papicorisのネットワーク技術ブログ

Cisco/FortiGate/BIG-IPを中心にネットワーク関連のナレッジを雑多に書きます。

Excel VBAで(個人的に)よく使う記述をまとめます。

最終行を取得

Cells(Rows.Count, 1).End(xlUp).Row  


別ブックのセルor範囲を指定

Workbooks("BookName.xlsx").Worksheets("SheetName").Cells(1, 2).Value
Workbooks("BookName.xlsx").Worksheets("SheetName").Range("A:C")


VLOOKUP

Application.WorksheetFunction.VLookup("Word", Range("A:C"), 3, False)

※範囲を指定する際は、ブック名とシート名を明示すること

セルを配列に格納&検索

Dim arr As Variant
Dim i As Long
Dim line1 As Long
'範囲を指定し、セルの値を二次元配列に格納する
arr = Range("A1:B200")

'配列の1から最後まで文字列"Word"を検索
For i = 1 To UBound(arr, 1)
    If arr(i, 1) = "Word" Then
        line1 = i
    End If
Next j

※LBoundは1になることに注意

テキストファイル読み込み&置換&書き込み

Dim fso As Object
Dim buf As String

'FileSystemObjectオブジェクト作成
Set fso = CreateObject("Scripting.FileSystemObject")

'テキストファイル読み込み&格納
With fso.OpenTextFile(ThisWorkbook.Path & "\" & "Template.txt", 1, False)
    buf = .ReadAll
    .Close
End With

'置換
buf = Replace(buf, "Word01", "Word02")

'テキストファイル書き込み
With fso.OpenTextFile(ThisWorkbook.Path & "\" & "Result.txt", 2, True, 0)
    .Write buf
    .Close
End With

Set fso = Nothing


テキストファイル追加書き込み

Dim fso As Object
Dim tso As Object

Sheets("データシート").Select

Set fso = CreateObject("Scripting.FileSystemObject")
Set tso = fso.OpenTextFile(ThisWorkbook.Path & "\" & "test.txt", 8, False)
With tso
    .WriteLine Now
    .Close
End With
Set tso = Nothing
Set fso = Nothing

fso.OpenTextFile ( FileName [, IOMode] [, Create] [, Format] )

引数 説明 備考
IOMode ファイルを開く際のモード指定。
1: 読み込み, 2: 新規書き込み, 8: 追加書き込み
規定値は1(読み込み)
Create ファイルが存在しない場合の動作。
True: 新規作成する, False: 新規作成しない
規定値はFalse(新規作成しない)
Format 文字コード
-2: システムデフォルト, -1: Unicode, 0: ASCII
規定値は0(ASCII)


configファイルからホスト名を抜き出す

Dim fso As Object
Dim buf As String
Dim arr1 As Variant
Dim arr2 As Variant
Dim i As Long
Dim line1 As Long
Dim hostname As String

Set fso = CreateObject("Scripting.FileSystemObject")

With fso.OpenTextFile(ThisWorkbook.PATH & "\" & "Sample1.txt", 1, False)
    buf = .ReadAll
    .Close
End With

'取り込みデータを改行で分割し、配列化
arr1 = Split(buf, vbCrLf)

'配列の中から"hostname"を含む行を探す
For i = 0 To UBound(arr1)
    If InStr(1, arr1(i), "hostname") <> 0 Then
        line1 = i
        Exit For
    End If
Next i

'"hostname"を含む行を半角スペースで分割し、配列化
arr2 = Split(arr1(line1), " ")
    If arr2(0) = "hostname" Then
        hostname = arr2(1)    '←★arr2(1)がホスト名となる
    Else
        MsgBox "ERROR!!"
    End If
    
MsgBox hostname


全シートに処理を実行

For i = 1 To Worksheets.Count
    With Worksheets(i)
        Debug.Print .Cells(1, 1).Value
    End With
Next i


ディレクトリ作成

MkDir ThisWorkbook.Path & "\" & Format(Now, "yyyymmdd_hhmmss")


データシートの一覧からシートを生成

'データシートの最終行を取得
lastRow = Worksheets("Data").Cells(Rows.Count, 5).End(xlUp).Row

'シート生成&リネーム
For i = lastRow To 3 Step -1
    Worksheets("Template").Copy After:=Worksheets("Template")
    ActiveSheet.Name = "Sheet" & i
Next i


Select Case

Select Case Cells(1, 1).Value
    Case Is = "a"
        Debug.Print "a"
    Case Else
        Debug.Print "e"
End Select


Like

End SelectIf Cells(1, 1).Value Like "*aaaabbbbcccc*" Then
    Debug.Print "ok"
Else
    Debug.Print "no"
End If


ループから抜ける

Exit For


画面描画抑止

Application.ScreenUpdating = False
'~処理~
Application.ScreenUpdating = True