プロが教えるわが家の防犯対策術!

いつもお世話になります

今、ValidateListを使ってシーt上にドロップダウンリストを作り、予め指定された値にしておきたいのですが、下記のようにテストプログラムを作ってみました

Sub test()
Cells(2, 10).Select: Call MakeDropDownList06(2): Selection.HorizontalAlignment = xlCenter
End Sub

Sub MakeDropDownList06(ByVal n As Integer)
Dim moji As String
Dim tmp As Variant

moji = "SD345,SD390,SD490,SR235,SR295"
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=moji
End With

tmp = Split(moji, ",")
With Selection
.Value = tmp(n - 1)
End With
End Sub

ここではSplitを使って、指定された番号の文字を挿入しているのですが
UserFormでつかうComboBox1.LsitIndexみたいなものや
もっとスマートな方法が有るのでないかと思い相談させていただきました

もし有れば、ご教授頂ければ幸いです
以上、よろしくお願い申し上げます

A 回答 (1件)

あなたが提示した方法と、たいして変わりませんが、以下の方法ではどうでしょうか。


リスト用の文字をArrayで確保しておき、
Formula1には、それをカンマで連結して渡します。
表示値はArrayのn-1番目を渡します。
------------------------------
Sub MakeDropDownList06(ByVal n As Integer)
Dim tmp As Variant
tmp = Array("SD345", "SD390", "SD490", "SR235", "SR295")
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Formula1:=Join(tmp, ",")
End With
With Selection
.Value = tmp(n - 1)
End With
End Sub
    • good
    • 0
この回答へのお礼

いつもお世話になります

なるほど
Splitを使うよりこちらの方がスマートですね
凄く参考になりました
使わせていただきます

これからもよろしくお願い致します

お礼日時:2023/03/27 09:41

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