みなさん、join関数ってご存じですか?
Excel VBAで開発をして7年くらいたちますが、この前初めてExcel VBAにjoin関数があるというのを知りました。
Join(文字列型配列, 区切り文字)
配列を区切り文字で結合することが可能です。
&でも代用できるのですが、処理速度に大きな違いがでるとのこと。
参考
VBAの高速化(文字列の連結はJoinで行う)
配列を使用するため、join関数を使用した方が早いようです。
私は入力規則に日付を入れたくてこのjoin関数を使用しました。
入れる日付はマクロ実行日から2年分の月をyyyy/m形式で入力したいというものでした。
Excel VBA
Sub test()
Dim i As Long
Dim targetDate As Date, endDate As Date
Dim objDate As Object
Dim strDate As String
'今回はハッシュテーブルを使用
Set objDate = CreateObject("Scripting.Dictionary")
targetDate = Year(Date) & "/" & Month(Date) & "/1"
endDate = DateAdd("m", 24, targetDate)
Do Until targetDate > endDate
objDate(Format(targetDate, "yyyy/m")) = targetDate
targetDate = DateAdd("m", 1, targetDate)
Loop
'ハッシュテーブルのキーをカンマ(,)で結合
strDate = Join(objDate.Keys, ",")
'入力規則
With Sheet1.Range("B3:B11").Validation
.Delete
.Add Type:=xlValidateList, _
Formula1:=strDate
End With
Set objDate = Nothing
End Sub
と上記のようにコードを作成し、エクセルに入力規則を設定しました。