エクセルで顧客管理ソフトのようなものを作っています。本来アクセスが良いと思うのですが、導入できない環境です。
またVBAに関しては初心者ですが、懸命に勉強しております。
今回作っているものは、実際に使用するのはエクセル初心者(文字入力程度しか出来ない人)が使用することになるため、極力分かりやすいように出来ればと思っています。
A B C D E
ID 姓 名 所属 性別
このような表があったとき、IDのセルをダブルクリックすると、そのIDの人の入力フォーム(姓名、所属、性別等)が出るようにしています。
例えばA2セルをダブルクリックでフォーム1(ID:001用)が出るという感じです。
が、このデータが大体1000人弱くらいあります。
このような場合、A3のセルはID:002のフォームが出るように、手作業で入力していかないといけないのでしょうか。(入力フォームを人数分用意しないといけないでしょうか)
出来れば人数が増えた時など「フォームの追加」などで、追加できればよいと思っています。このボタン一つで、対応したフォームが作成され、A列には「ダブルクリックで対応したフォームが開く」というような感じにすることは可能でしょうか。
また、入力フォームで入力した内容がシートにリストとなって表示されていますが、いくつかの条件をもとにそれに合う人を抽出する場合、VLOOKUPが使われることが多いと思いますが、これも「検索フォーム」のようなもので、条件を入力(もしくはプルダウンリストから選ぶ等)して表示させることは可能ですか?
分かりづらい点がありましたら補足いたします。
ご教授いただければと思います。
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
を貼り付けてみてください。
出来るだけわかりやすく記載していますので、何が起きているのか利害できると思います。
再度のご回答ありがとうございます。
早速試してみました!何が起きてるのか理解できました!!
Private Sub UserForm_Initialize()
と
Private Sub cndEntry_Click()
で、フォームに入力された文字をセルに反映させたり、逆にセルの文字をフォームに反映させてるということで良いでしょうか。
自分がまずすべき勉強が何なのかも分かった気がします。
そもそも、このようなことをしたいという目的はあっても、そのためにどういった処理が必要なのかということが全く分からない状態でしたので…。
本当にありがとうございました!
No.3
- 回答日時:
こういうのはエクセルVBA入門書籍に書いてあるのと、違った経験による知識が必要。
VBAの文法やメソッドなどを読むだけではダメ。
ーー
全体構想
ロジック
プログラム
などは、経験もあわせてつむ必要がある。
ーー
質問者が今VBAで質問の本番の処理をするのは早すぎると思う。
ただ有名な型の課題なので解説書でも読むと出くわすかも。
ーー
色んな構想やロジックがあるが、
質問に関して、下記が結論
何千人おろうが
(1)フォーム設計は1つ
(2)入力が終わったときにクリックするボタンをフォームに設ける。
(3)そのボタンのクリックイベントに(イベントを勉強)
(4)直前までのデータの最下行を捉える(良く使うコード)
(5)その次の行の対応項目列にフォームのテキストボックス等からデータを持ってくる(代入)
(6)フォームのテキストボックス等の内容をクリア(次の人に備える)
次の人の入力場面に入る。
ーー
>入力フォームで入力した内容がシートにリストとなって表示されていますが、いくつかの条件をもとにそれに合う人を抽出する場合、VLOOKUPが使われることが多いと思いますが、これも「検索フォーム」のようなもので、条件を入力(もしくはプルダウンリストから選ぶ等)して表示させることは可能ですか
可能です。検索のマクロの記録を採って考えたら。
ご回答ありがとうございます。お礼が遅くなり申し訳ありません。
VBAは本を読むだけでは得られないものがたくさんあるのですね。奥が深いです。仕事ではなく(仕事は全くの異業種)プライベートな部分で製作しているので、時間をかけつつ理解を深めていきたいと思います。
ご回答いただいた方法を一つずつ勉強し、理解しながらやってみます。
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のレベルは?なので・・・
ご回答ありがとうございます。お礼が遅くなり申し訳ありません。エクセルは色々と奥が深いですね。
VBAに関しては本当に初心者中の初心者でして、「作ってみよう!」的なお手本を見ながらフォームを作っている…という感じです。
現在は
Private Sub cndEntry_Click()
Range("A1").Value = txt1.Value
Range("B1").Value = Txt2.Value
End Sub
このような感じでフォームに入力ボタンをつけ、それをクリックしたら特定のセルに書き込める…という感じでフォームを作ったのですが、これじゃそのセルに入力するだけしか出来ないなと思いまして…。
ダブルクリックでこのフォームを表示させることまでは出来たのですが、違うなぁ…と。
まだ回答いただいた内容も完全に理解できておりませんので、改めて時間をかけて理解していきたいと思います。
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オブジェクトについてよく理解することをお勧めします。
ご回答ありがとうございます。お礼が遅くなり申し訳ありません。
プログラムを理解するだけではないのですね。奥が深いです。
まだ本当に初心者で、1つ1つ理解しながら進めているところですので、回答いただいた内容を全部は理解できないのですが、何度も読み返しながら理解していこうと思います。
質問しなければ、云々悩んだ挙句、膨大なフォームを製作してしまうところでした。
回答いただいたキーワードを完全に理解するところから始めたいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
最近、いつ泣きましたか?
泣いてストレス発散! なんて言いますよね。 あなたは最近いつ、どんなシチュエーションで泣きましたか?
-
人生最悪の忘れ物
今までの人生での「最悪の忘れ物」を教えてください。 私の「最悪の忘れ物」は「財布」です。
-
メモのコツを教えてください!
メモを取るのが苦手です。 急いでメモすると内容がごちゃごちゃになってしまったり、ひどいときには全く読めない時もあります。
-
ちょっと先の未来クイズ第4問
11月ごろに発表される、2024年の「新語・流行語大賞」にノミネートされる言葉を書けるだけ書いてください。
-
14歳の自分に衝撃の事実を告げてください
タイムマシンで14歳の自分のところに現れた未来のあなた。 衝撃的な事実を告げて自分に驚かせるとしたら何を告げますか?
-
ExcelVBAでセルをクリックしてユーザーフォームを表示するには
Excel(エクセル)
-
ダブルクリックしたセルの近くにユーザーフォームを表示したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
YahooのIDがロックされてしまい...
-
「フォームを作成できませんで...
-
帳票フォームのなかにリストを...
-
大至急!アクセスのフォームを...
-
アクセス フォームをリクエリ...
-
アクセスで、androidのスマホサ...
-
Excelのデータフォームの設定変更
-
エクセルでフォームのDropDown...
-
Accessのフォームを改ページしたい
-
デフォルトでチェックボックス...
-
無効なパスというエラーメッセ...
-
ACCESS クロス集計クエリの抽...
-
Accessのフォームで開く時のウ...
-
フォームの高さを数値で指定し...
-
フォームなどに半角カナで入力...
-
MSワード 年齢を計算表示でき...
-
Accessでフォームとレポートの...
-
エクスポートされたエクセルの...
-
ACCESSで
-
Accessで、フォームからフォー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
YahooのIDがロックされてしまい...
-
「フォームを作成できませんで...
-
Accessで、フォームからフォー...
-
フォームの高さを数値で指定し...
-
デフォルトでチェックボックス...
-
Accessのフォームで開く時のウ...
-
アクセス フォームをリクエリ...
-
大至急!アクセスのフォームを...
-
アクセスで複数列にまたがる同...
-
Access2003 フォーム入力中に...
-
MSワード 年齢を計算表示でき...
-
ACCESS クロス集計クエリの抽...
-
Excelのデータフォームの設定変更
-
アクセスのレコードをフォーム...
-
access vba 開いていないフォー...
-
Access テキストボックスの通貨型
-
ACCESSでオートメーションエラー
-
エクスポートされたエクセルの...
-
Accessフォームを開くときに決...
-
フォームなどに半角カナで入力...
おすすめ情報