プロが教える店舗&オフィスのセキュリティ対策術

エクセルで顧客管理ソフトのようなものを作っています。本来アクセスが良いと思うのですが、導入できない環境です。
またVBAに関しては初心者ですが、懸命に勉強しております。

今回作っているものは、実際に使用するのはエクセル初心者(文字入力程度しか出来ない人)が使用することになるため、極力分かりやすいように出来ればと思っています。

A   B   C   D   E
ID  姓   名   所属  性別

このような表があったとき、IDのセルをダブルクリックすると、そのIDの人の入力フォーム(姓名、所属、性別等)が出るようにしています。
例えばA2セルをダブルクリックでフォーム1(ID:001用)が出るという感じです。

が、このデータが大体1000人弱くらいあります。
このような場合、A3のセルはID:002のフォームが出るように、手作業で入力していかないといけないのでしょうか。(入力フォームを人数分用意しないといけないでしょうか)

出来れば人数が増えた時など「フォームの追加」などで、追加できればよいと思っています。このボタン一つで、対応したフォームが作成され、A列には「ダブルクリックで対応したフォームが開く」というような感じにすることは可能でしょうか。

また、入力フォームで入力した内容がシートにリストとなって表示されていますが、いくつかの条件をもとにそれに合う人を抽出する場合、VLOOKUPが使われることが多いと思いますが、これも「検索フォーム」のようなもので、条件を入力(もしくはプルダウンリストから選ぶ等)して表示させることは可能ですか?

分かりづらい点がありましたら補足いたします。
ご教授いただければと思います。

A 回答 (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
を貼り付けてみてください。
出来るだけわかりやすく記載していますので、何が起きているのか利害できると思います。
    • good
    • 1
この回答へのお礼

再度のご回答ありがとうございます。
早速試してみました!何が起きてるのか理解できました!!
Private Sub UserForm_Initialize()

Private Sub cndEntry_Click()
で、フォームに入力された文字をセルに反映させたり、逆にセルの文字をフォームに反映させてるということで良いでしょうか。

自分がまずすべき勉強が何なのかも分かった気がします。
そもそも、このようなことをしたいという目的はあっても、そのためにどういった処理が必要なのかということが全く分からない状態でしたので…。
本当にありがとうございました!

お礼日時:2009/12/08 01:58

こういうのはエクセルVBA入門書籍に書いてあるのと、違った経験による知識が必要。


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

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

ご回答いただいた方法を一つずつ勉強し、理解しながらやってみます。

お礼日時:2009/12/07 16:51

>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のレベルは?なので・・・
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。お礼が遅くなり申し訳ありません。エクセルは色々と奥が深いですね。
VBAに関しては本当に初心者中の初心者でして、「作ってみよう!」的なお手本を見ながらフォームを作っている…という感じです。

現在は
Private Sub cndEntry_Click()
Range("A1").Value = txt1.Value
Range("B1").Value = Txt2.Value
End Sub
このような感じでフォームに入力ボタンをつけ、それをクリックしたら特定のセルに書き込める…という感じでフォームを作ったのですが、これじゃそのセルに入力するだけしか出来ないなと思いまして…。
ダブルクリックでこのフォームを表示させることまでは出来たのですが、違うなぁ…と。

まだ回答いただいた内容も完全に理解できておりませんので、改めて時間をかけて理解していきたいと思います。

お礼日時:2009/12/07 16:40

はじめまして。


まず結論から言いますと、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オブジェクトについてよく理解することをお勧めします。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/12/07 16:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!