エクセルでダブルクリックで入力フォームが出る顧客管理ソフトの作成方法

このQ&Aのポイント
  • エクセルで顧客管理ソフトを作成する際、各セルをダブルクリックすると、そのデータに対応する入力フォームが表示されるようにする方法が知りたいです。
  • また、フォームの追加や検索フォームの実装も検討しています。
  • エクセル初心者向けに分かりやすい方法を教えてください。
回答を見る
  • ベストアンサー

エクセルで各セルをダブルクリックで各入力フォームが出る

エクセルで顧客管理ソフトのようなものを作っています。本来アクセスが良いと思うのですが、導入できない環境です。 またVBAに関しては初心者ですが、懸命に勉強しております。 今回作っているものは、実際に使用するのはエクセル初心者(文字入力程度しか出来ない人)が使用することになるため、極力分かりやすいように出来ればと思っています。 A   B   C   D   E ID  姓   名   所属  性別 このような表があったとき、IDのセルをダブルクリックすると、そのIDの人の入力フォーム(姓名、所属、性別等)が出るようにしています。 例えばA2セルをダブルクリックでフォーム1(ID:001用)が出るという感じです。 が、このデータが大体1000人弱くらいあります。 このような場合、A3のセルはID:002のフォームが出るように、手作業で入力していかないといけないのでしょうか。(入力フォームを人数分用意しないといけないでしょうか) 出来れば人数が増えた時など「フォームの追加」などで、追加できればよいと思っています。このボタン一つで、対応したフォームが作成され、A列には「ダブルクリックで対応したフォームが開く」というような感じにすることは可能でしょうか。 また、入力フォームで入力した内容がシートにリストとなって表示されていますが、いくつかの条件をもとにそれに合う人を抽出する場合、VLOOKUPが使われることが多いと思いますが、これも「検索フォーム」のようなもので、条件を入力(もしくはプルダウンリストから選ぶ等)して表示させることは可能ですか? 分かりづらい点がありましたら補足いたします。 ご教授いただければと思います。

noname#126489
noname#126489

質問者が選んだベストアンサー

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

ユーザーフォームに Private Sub UserForm_Initialize() GYOU = ActiveCell.Row TextBox1.Value = Range("A" & GYOU).Value TextBox2.Value = Range("B" & GYOU).Value End Sub Private Sub cndEntry_Click() GYOU = ActiveCell.Row Range("A" & GYOU).Value = TextBox1.Value Range("B" & GYOU).Value = TextBox2.Value End Sub を貼り付けてみてください。 出来るだけわかりやすく記載していますので、何が起きているのか利害できると思います。

noname#126489
質問者

お礼

再度のご回答ありがとうございます。 早速試してみました!何が起きてるのか理解できました!! Private Sub UserForm_Initialize() と Private Sub cndEntry_Click() で、フォームに入力された文字をセルに反映させたり、逆にセルの文字をフォームに反映させてるということで良いでしょうか。 自分がまずすべき勉強が何なのかも分かった気がします。 そもそも、このようなことをしたいという目的はあっても、そのためにどういった処理が必要なのかということが全く分からない状態でしたので…。 本当にありがとうございました!

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

こういうのはエクセルVBA入門書籍に書いてあるのと、違った経験による知識が必要。 VBAの文法やメソッドなどを読むだけではダメ。 ーー 全体構想 ロジック プログラム などは、経験もあわせてつむ必要がある。 ーー 質問者が今VBAで質問の本番の処理をするのは早すぎると思う。 ただ有名な型の課題なので解説書でも読むと出くわすかも。 ーー 色んな構想やロジックがあるが、 質問に関して、下記が結論 何千人おろうが (1)フォーム設計は1つ (2)入力が終わったときにクリックするボタンをフォームに設ける。 (3)そのボタンのクリックイベントに(イベントを勉強) (4)直前までのデータの最下行を捉える(良く使うコード) (5)その次の行の対応項目列にフォームのテキストボックス等からデータを持ってくる(代入) (6)フォームのテキストボックス等の内容をクリア(次の人に備える) 次の人の入力場面に入る。 ーー >入力フォームで入力した内容がシートにリストとなって表示されていますが、いくつかの条件をもとにそれに合う人を抽出する場合、VLOOKUPが使われることが多いと思いますが、これも「検索フォーム」のようなもので、条件を入力(もしくはプルダウンリストから選ぶ等)して表示させることは可能ですか 可能です。検索のマクロの記録を採って考えたら。

noname#126489
質問者

お礼

ご回答ありがとうございます。お礼が遅くなり申し訳ありません。 VBAは本を読むだけでは得られないものがたくさんあるのですね。奥が深いです。仕事ではなく(仕事は全くの異業種)プライベートな部分で製作しているので、時間をかけつつ理解を深めていきたいと思います。 ご回答いただいた方法を一つずつ勉強し、理解しながらやってみます。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

>A3のセルはID:002のフォームが出るように、手作業で入力していかないといけないのでしょうか。(入力フォームを人数分用意しないといけないでしょうか) いやいや、そんな必要はありません。 >IDのセルをダブルクリックすると、そのIDの人の入力フォーム(姓名、所属、性別等)が出るようにしています。 現在の入力フォームはどうなっているのでしょうか。多分、ダブルクリックしたセルの行番号で姓名や所属を表示させているのでは? 一例ですが、 ユーザーフォームに Private Sub UserForm_Initialize() GYOU = ActiveCell.Row TextBox1.Value = Cells(GYOU, 1).Value TextBox2.Value = Cells(GYOU, 2).Value TextBox3.Value = Cells(GYOU, 3).Value TextBox4.Value = Cells(GYOU, 4).Value TextBox5.Value = Cells(GYOU, 5).Value End Sub UserForm_Initialize() はフォームを開いたときに実行される(イベント) GYOU = ActiveCell.Row はアクティヴなセルの行番号ですので、ダブルクリックしたセルの行番号 TextBox1.Value = Cells(GYOU, 1).Value で必要な内容がそれぞれのテキストボックスに入ると思います。 現状、どのようなVBAで実行されているのか、質問者が作成されたのか 質問者のVBAのレベルは?なので・・・

noname#126489
質問者

お礼

ご回答ありがとうございます。お礼が遅くなり申し訳ありません。エクセルは色々と奥が深いですね。 VBAに関しては本当に初心者中の初心者でして、「作ってみよう!」的なお手本を見ながらフォームを作っている…という感じです。 現在は Private Sub cndEntry_Click() Range("A1").Value = txt1.Value Range("B1").Value = Txt2.Value End Sub このような感じでフォームに入力ボタンをつけ、それをクリックしたら特定のセルに書き込める…という感じでフォームを作ったのですが、これじゃそのセルに入力するだけしか出来ないなと思いまして…。 ダブルクリックでこのフォームを表示させることまでは出来たのですが、違うなぁ…と。 まだ回答いただいた内容も完全に理解できておりませんので、改めて時間をかけて理解していきたいと思います。

  • Randomize
  • ベストアンサー率70% (38/54)
回答No.1

はじめまして。 まず結論から言いますと、VBAを使えばほぼ何でも出来ます。今回の質問の件も容易に実現できます。しかし、プログラムへの理解もですが、アルゴリズムや手法を組み上げる技量のほうが強く求められるでしょう。 motaunさんは複数人登録した場合、その人数分のフォームを用意しなければいけないのでしょうかと書いてますが、発想を変えて1個の入力/表示フォームだけ用意してそのフォームを表示するまでにフォームの中身を書き換えてしまうという考え方もあります。そうすると何人に増えてもフォームは1個だけで済みますよね。 本来であればフォームモジュールにPublic Subプロシージャで中身を書き換える部分を作成するのがセオリーでしょうが、初心者とのことなので付け焼刃なマクロに仕上がってしまうでしょうがあえて細かくは言いません。 しかし、手順としましては Load UserForm1 '入力フォームを作ったユーザーフォームをロードする 'フォームの各欄の中身を書き換える With ThisWorkBook.Sheets("一覧表") '一覧の書いてあるシート名 txtID.Text = .Cells([Row],[Column]).Value txtSei.Text = .Cells([Row],[Column]).Value '・・・・・・以下同じように表示する項目の数分繰り返してください End With UserForm1.Show 1 という風になります。[Row][Column]は該当の行番号列番号に書き換えてくださいね Loadだけではフォームはロードされるけれど表示はされません。そしてShowが呼び出された時点でフォームは表示されます。なので、LoadからShowの間に中身を書き換えてその人の情報が書かれたフォームのように見せかけるのです。Showのあとに1がついているため、Showされたらそのフォームを閉じるまでShowのあとのマクロは実行されないので注意してくださいね。 続いて、検索条件で検索ですが、これもVBAで実現可能です。しかし、組み方によってはいろいろ面白いことも出来ます。Like演算子を用いればワイルドカードを用いた合致非合致の判断が出来ます。これも手法の組みようなのですが、1000人程度でしたら、条件を入力するとリアルタイムに絞り込まれた結果が合致一覧に表示されるといった芸当も可能です。Findというキーワードで検索するといいでしょう。(Excelの関数でないほうのFindです) ちなみに、よくある初心者の落とし穴にSelectとSelectionの多用があります。本来Selectionを使わなくても値を入力したり取り出したり色をつけるなどは容易に可能ですが勘違いしてしまう人が非常に多いです。なので、Rangeオブジェクトについてよく理解することをお勧めします。

noname#126489
質問者

お礼

ご回答ありがとうございます。お礼が遅くなり申し訳ありません。 プログラムを理解するだけではないのですね。奥が深いです。 まだ本当に初心者で、1つ1つ理解しながら進めているところですので、回答いただいた内容を全部は理解できないのですが、何度も読み返しながら理解していこうと思います。 質問しなければ、云々悩んだ挙句、膨大なフォームを製作してしまうところでした。 回答いただいたキーワードを完全に理解するところから始めたいと思います。

関連するQ&A

  • 《VBA》セルをダブルクリックしたときのイベント

    Worksheet/BeforeDoubleClickを使用して、 フォームを表示するという処理を行っています。 エクセルのセルにリストボックスが設定されているセルがあるのですが、 リストボックスのセルをダブルクリックした時にはイベントが動作しません。 通常のセルをダブルクリックした時にはイベントは正常に動作します。 リストボックスが設定されているセルでは動作することができないのでしょうか。

  • エクセルでセルをクリックすると“○”と入力

    エクセルでセルをクリック(またはダブルクリック)すると“○”と入力され、もう一度クリックすると空欄に戻るよう設定したいのですが、マクロを使わないとできないのでしょうか?マクロを使用せずセルの設定でもできますか?どちらでできるのでしょうか、またその方法も教えてください。

  • EXCELセルのダブルクリックで文字の入力

    EXCEL2003です。セルをダブルクリックで「あ」の文字の入力、さらにダブルクリックで「い」の文字が入力することは可能でしょうか。可能でしたら教えていただけますでしょうか。よろしくお願いします。

  • エクセル A列のセルをクリックするとフォームが出て

    A列のセルをクリックするとフォームAが出てリストBOXの値をクリックするとA列のクリックしたセルに値を返す また同じようにB列のセルをクリックすると違うフォームBが出てリストBOXの値をクリックするとB列のクリックしたセルに値を返す そんなことが実現出来るのでしょうか ご指南ください。

  • EXCEL VBAでこんなことがしたい。(2)

    EXCELの特定のセルを選択して、ダブルクリックすると フォームが現れて、別の情報を入力する、ということはできますか。 たとえばある人名が書いてあるセルを選択してダブルクリックすると フォームが現れて、性別、年齢、血液型を入力できる、とか。

  • EXCELの入力について

    EXCELの入力で教えてほしいことがあります。 セルに"○"か、それ以外かを入力したいのですが、 現在は、リストで"○"か"×"を選ぶかたちにしています。 もっと簡単な入力をしたいと思っています。 セルをダブルクリックするだけで、"○"が入力でき、 VBAなどではなく、簡単にできると聞いたのですが、 知っている方がおりましたら教えてください。 お願いします。

  • セルをダブルクリックするだけで●が表示されるように

    エクセル2003にてセルをダブルクリックすると特定の文字「●」が入力されるようにしたいのです。 既出の質問 http://okwave.jp/qa/q915096.html を見て特定のセルは出来るようになったのですが、 それを更にラジオボタンのように動作させたいのです。 具体的には [A1 A2] [A3 A4] [A5 A6] [B1 B2] [B3 B4] [B5 B6] のようにA1A2の結合されているセル、A3A4の結合されているセル、A5A6の結合されているセルの中から一つだけしか●が表示されないようにしたいのです。 しかもそれをダブルクリックだけで… そういったグループがB列、C列とたくさんあるのです。 ラジオボタンで出来るのは知っているのですが、 出来ればラジオボタンを使わずに表示させたいのです よろしくご教授いただければと思います。

  • エクセル マクロ ダブルクリックによる設定

    エクセルのマクロについての質問です。 ある特定のセル(”H1:K1”かな?)をダブルクリックすると今日の日付が記入される様になり、また別のセルをダブルクリックするとユーザーフォームが立ち上がる様なマクロを組みたいと考えております。 詳しい方がおりましたら、是非お願いします。

  • ダブルクリックしたセルを別のセルに反映させたい

    会社でえくせる2003を使っています。 データリストがあり、1列(A列)リスト番号があります。 たとえば、リスト番号をダブルクリックしたら、リストの外のセルにリスト番号を反映させたいのです。 つたない説明ですが、よろしくお願いします。

  • セルをフォームに一発入力

    モニターの左半分にsleipnir 右半分にエクセルを表示させているのですが、 sleipnirの方にはcgiのページを表示させていて、一番上にフォームがついています。 エクセルの右クリックか何かで、セルをsleipnirの方のフォームにその値を一発で入力することは可能でしょうか?

専門家に質問してみよう