推しミネラルウォーターはありますか?

初めまして。表題の件についてアドバイスお願い致します。
(前置き)6年前までIT業界でPG(C++/VC/Java)・SEを十数年したが、色々と挫折をし現在は他業界。
そんな経験もあってか、現上司からExcelVBAを使って、あんな事、こんな事、簡単に出来るよね、、、『VBAは未経験です』とは言ったものの、少しは協力するハメに。(/前置き)

前置きが長くなりました。
本題です。

[前提]
Excel2010のVBAを利用
Form上でのActiveXコントロール使用
ComboBox→以下、Cmbと称します
参照Sheet→以下、M_PLAN
M_PLANの内容は、
[A列][B列][C列]
1行 プランCD,プラン名,休止FLG ←見出し
2行 1001,プランA,0
3行 1002,プランB,1
4行 1003,プランC,0
5行 1004,プランD,1

行数は可変、列数は固定

[実現したいこと]
C列=0 の条件に一致するB列を取得したい

[現状]
条件無しの状態で取得済み

Dim w_endline,w_nowline As Integer

w_endline=Worksheets(M_PLAN).Cells(Rows.Count,1).End(xlUp).Row

For w_nowline=2 To w_endline
Cmb.AddItem Worksheets(M_PLAN).Range("B" & w_nowline).Value
Next w_nowline

まだ技術が伴ってないですが、
頭のなかでは、一旦、配列に格納してから
配列要素と比較してCmbに入れるのか、
それとも、ダイレクトに判定しながCmbに入れた方がいいものか(ケースバイケースなのかも...)

今は、単一条件で質問してますが、実際は複数条件です。

前置きが長いわりに初歩的な質問で申し訳ありませんがアドバイスお願い致します。

A 回答 (1件)

ActiveXのコンボボックス(Cmb)がM_PLANシート上にあると仮定して記述しました。


Dimで2つの変数をカンマ区切りで宣言する場合、As以降を省略するとVariant型になります。
何行あるか不定なので数値型はIntegerよりLongのほうがいいです。
ワークシート名はダブルクォーテーションで囲ってください。

Sub test()

Dim w_endline As Long, w_nowline As Long

With Worksheets("M_PLAN")
w_endline = .Cells(Rows.Count, 1).End(xlUp).Row

For w_nowline = 2 To w_endline
'3列目の値が0の場合
If .Cells(w_nowline, 3) = 0 Then
'.cmb.AddItemのところですが、別のシートにコンボボックスがある場合は、Worksheets("シート名").cmb.AddItemにしてください。
'コンボボックスの選択肢に追加
.cmb.AddItem .Range("B" & w_nowline).Value
End If
Next w_nowline
End With

End Sub
    • good
    • 0

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