つらつら Excel VBA

私の備忘録です。

動的配列とループ処理

Dim var_list As Variant, cnt As Integer
cnt = 0

'配列の要素追加
If cnt = 0 Then
    ReDim var_list(0)
Else
    ReDim Preserve var_list(UBound(var_list) + 1)
End If
var_list(UBound(var_list)) = "データ"
cnt = cnt + 1

補足
・ReDim 配列の再定義。例)a(30,20,ココ)一番後ろしか再定義できない。
Preserveキーワードをつけるとデータが消えない。
・Ubound 配列の最大要素番号を返す。

重複なしのリスト作成(ハッシュマップ、連想配列)

Dim DIC As Object , keys As Object
Dim i As Integer, temp as String
Set DIC = CreateObject("Scripting.Dictionary")

temp = "Test"

'リストに無ければ、リストと配列に追加
If Not DIC.Exists(temp) Then
    DIC.Add temp, "値" '辞書に追加
End If

'確認
keys = DIC.keys
For i = 0 To DIC.Count - 1
     Debug.Print keys(i)
Next i

Set DIC = Nothing

シート名の確認処理

'シート名チェック処理
Function checkSheetName(sheet_name As String) As Boolean
    Dim i As Integer
    Dim bln_return As Boolean
    bln_return = False
    For i = 1 To ThisWorkbook.Worksheets.Count
        If ThisWorkbook.Worksheets(i).Name = sheet_name Then bln_return = True
        If bln_return = True Then Exit For
    Next
    checkSheetName = bln_return
End Function

'シート名の重複チェック。
If checkSheetName("Sheet1") Then
    MsgBox "同じシート名があります。"
    Exit Sub
End If

'もっとスマートに書けるようになりたい