●質問の主旨
1.コンボボックスから選択した顧客名によって
ラベルに顧客種別を表記させるにはどのように
コードを書き換えればよいでしょうか?
2.またどの顧客が選ばれても、顧客種別に
対応して表記させるにはコードが足りない
ような気がします。もしそのような対応が
できるコードがあれば、合わせてご教示
ください
●質問の補足
添付の画像のユーザーフォームのコンボボックスから
顧客名を選んで、その顧客名によって別シートの顧客
一覧表から
・「新規顧客」
・「既存顧客」
・「自社」
のどれに当たるかVLookup関数を使ってラベルに
表記させたいと考えております。
以下のコードを記述しましたが、
「メソッドまたはメンバが見つかりません」と
エラーが返されてしまいます。
●ユーザーフォームの構成
「顧客名」→Label3
「顧客リスト」→ComboBox1
「顧客種別」→Label4
なお、ユーザーフォームはプリントスクリーンで
貼り付けており、本来はWorksheets(1)に表示されます。
●コード
'ユーザーフォームの初期化
Private Sub UserForm_Initialize()
With ComboBox1
.AddItem "NPO法人亀山社中"
.AddItem "土佐商会株式会社"
.AddItem "(株)薩摩示現流"
.AddItem "越後屋株式会社"
.AddItem "藩校コンサルティング(株)"
.AddItem "株式会社ラーニングバー"
.AddItem "自社"
End With
End Sub
'顧客リストが選択された時の顧客種別の表記
Private Sub ComboBox1_Click()
Worksheets(2).Activate
Label4.Value = Application.WorksheetsFunction.VLookup("B4", Range("B3:C8"), 2, 1)
End Sub
以上よろしくお願い申し上げます。使用機種はWindowsVistaで、
Excel2007です。私はVBA初心者です。
No.1ベストアンサー
- 回答日時:
まず、
LabelコントロールにはValueプロパティがありませんから
「メソッドまたはメンバが見つかりません」のコンパイルエラーになります。
VBEditorで[F2]キー、[オブジェクトブラウザ]を開いて
<すべてのライブラリ>ではなく
[ MSForms ]ライブラリの中から
[ Label ]を検索してみてください。
Label のメンバにどんなものがあるか確認する事ができます。
また、ComboBox1にアイテムを追加する時、
コード内に直値を書き込んでしまうと変動時の修正が大変です。
シートに設定するなら、そこから読み込んだほうが良いです。
どうせ読み込むなら、「顧客種別」も同時に読み込めば、
VLookup関数を使う必要もなくなります。
Private Sub UserForm_Initialize()
Dim r As Range
With Worksheets(2)
'B列基準でデータ範囲を取得
Set r = .Range("C3", .Cells(.Rows.Count, 2).End(xlUp))
'データ範囲以下に無関係な何かが入力してあるなら
'Set r = .Range("C3", .Range("B3").End(xlDown))
End With
With Me.ComboBox1
'Comboを2列設定し2列目は非表示
.ColumnCount = 2
.ColumnWidths = ";0"
'データ範囲 r をまとめてセット
.List = r.Value
End With
Set r = Nothing
End Sub
Private Sub ComboBox1_Click()
Worksheets(2).Activate
With Me.ComboBox1
'ComboBoxのListの選択行、2列目の値。(Indexは0から始まる)
Me.Label4.Caption = .List(.ListIndex, 1)
End With
End Sub
この回答への補足
コードの記述及び各コードのご説明ありがとうございます。
上記の通りコードを書き換えると、
顧客名と顧客種別を同時に選択することができました。
ただ
Set r = Nothing
というコードの存在が良く分かりません。
ネットなどで検索をかけて見ていると、
「フォームの解放処理が行われずに、
メモリ上に残ってしまう現象なのだと
想像できます」
と初心者には分かったようわからないような説明が
書いてあったりします。
end-u様のコードにあてはめて考えてみて、
もしこのコードがないとどんな不都合が生じるのでしょうか?
たびたびの質問で恐縮ですが、
ご教示くだされば幸いです
ちなみに私が検索したHPのアドレスは
以下の通りです。
http://www.gizcollabo.jp/vbtomo/log/archive/vbqa …
No.2
- 回答日時:
フォーム..に限った話ではないです。
が、今回は
>もしこのコードがないとどんな不都合が生じるのでしょうか?
不都合は生じません。(と、思われます)
この(と、思われます)部分をつっこんで検証しようとすると
ちょっと大変かなぁ..という感じです。
Object型変数について。
本来、プロシージャ内の変数はそのプロシージャを抜けると
変数のメモリ参照も解放されるはずなので
Set xxx = Nothing
は必要ない、..というポリシーの方もいらっしゃるようです。
実経験として、Object型変数で参照したメモリ領域が解放されず、残ってしまうケースもあるようで、
確実に開放したいため、【Object型変数を初期化している】、
..というポリシーの方もいらっしゃいます。
ポリシーの問題で片付けてはいけないのでしょうけど、
「守破離」の「守」段階であるワタシ的には先人の教えの中で
自分が一番腑に落ちるものを踏襲しているだけですので詳しく説明できるわけではありません。
ただ、実際に
Set xxx = Nothing
を書いておいたほうが良いケースもあるようで。で、あれば
「このケースは必要ないから書かなくていいや」
「ここ書かないとまずいかな」
なんて頭悩ませながら書くより最初から
Set xxx = Object
としたら同時に
Set xxx = Nothing
書いておく、というコーディングスタイルを取っています。私は。
あとは、いろんな情報を仕入れて判断してみてください。
http://www.excel.studio-kazu.jp/kw/2009030323244 …
http://starfleet.txt-nifty.com/blog/2008/02/exce …
補足質問にもお答えいただきありがとうございます。
end-u様の紹介HPも参考にさせていただきました。
ただ「Set xxx = Nothing」というコードについての
扱いはいろいろあるようですね。
今の私は初心者なので、
「とりあえず書いてるからかいておこう」
というスタイルにしておきます。
二度にわたるご回答ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) ユーザーフォームの表示を追加したい 2 2023/03/26 23:18
- Visual Basic(VBA) リストボックス セルの値を取得する 1 2022/05/21 20:47
- Visual Basic(VBA) ListBox1をClickしたときのイベント 5 2022/12/11 19:45
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- Access(アクセス) 対象月の2桁表示について 1 2023/01/07 05:08
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける (再質問) 4 2022/09/14 22:51
- PDF PDFファイルを分割するマクロの作り方を教えてください。 2 2022/06/24 11:09
- Visual Basic(VBA) 指定月分の顧客データファイルを統合して並べ替え、所定の場所に貼り付ける 3 2022/09/10 07:55
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VLOOKUP関数とテキストボックスの連携
Excel(エクセル)
-
Excel VBAのユーザーフォームでVLOOKUP
Visual Basic(VBA)
-
エクセルのユーザーフォームでVLOOKUPと同じ機能をするには?
Excel(エクセル)
-
-
4
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
5
ExcelVBAでテキストボックスの表示形式を小数点第二位まで表示する方法
Visual Basic(VBA)
-
6
マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。
Access(アクセス)
-
7
VBA コンボボックスとテキストボックスを連結させたい
Visual Basic(VBA)
-
8
Excel VBA ユーザーフォーム内のラベルにテキストボックスの小計を出す方法
Visual Basic(VBA)
-
9
Excel VBA ユーザーフォーム内のラベルにテキストボックスの計算結果を出す方法
Visual Basic(VBA)
-
10
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
1、Rstudioで回帰直線を求める...
-
過剰なオブジェクト指向脳から...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
ExcelVBAで「Shift_JIS(MS932)...
-
pythonで同じコード内で複数の...
-
オートフィルタで抽出結果に 罫...
-
pythonにてseleniumを使うも、...
-
JavaScriptの定数名が取り消し...
-
COBOLの文法
-
Excel VBAでOpenTextのFieldInf...
-
特定行の背景色を変えたいのですが
-
JANコードとPOSコードは同じ?
-
ACCESS VBA ヘッダなしCSVの入...
-
Nullの使い方が不正です。
-
VBA リストボックス(複数条件...
-
Gitのクローンについて
-
Microsoft Visual Studio Commu...
-
C# コードビハインドについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
access2003 クエリSQL文に...
-
1日に1人がこなせるプログラム...
-
Exel VBA 別ブックから該当デ...
-
pythonにてseleniumを使うも、...
-
ExcelのVBAコードについて教え...
-
ExcelのVBAコードについて教え...
-
chatgptでつくってもらったコー...
-
欠番の抽出について
-
JANコードとPOSコードは同じ?
-
JavaScriptの定数名が取り消し...
-
1、Rstudioで回帰直線を求める...
-
特定行の背景色を変えたいのですが
-
変数名「cur」について
-
PreviewKeyDownイベントが2回...
-
将来AIが進歩してくるにつれて...
-
ACCESSユニオンクエリでORDER B...
-
VBAでファイルオープン後にコー...
-
COBOLの文法
-
Nullの使い方が不正です。
おすすめ情報