VBAコード解説: テスト1からテスト18までのデータを新しいシートに挿入

VBAコード解説: テスト1からテスト18までのデータを新しいシートに挿入

はじめに

 VBA(Visual Basic for Applications)は、Microsoft Officeアプリケーション(Excel、Word、Outlookなど)で使用されるプログラミング言語です。この記事では、Excel VBAを使用して、特定の条件を満たす行のデータを新しいシートに挿入する方法を解説します。

課題

以下の課題を解決するためのVBAコードを作成します。

  1. シート「Sheet1」のL列には、テスト1からテスト18までの文字列を含むデータが入力されています。
  2. 最終行は不明ですが、データは1行目から記入されています。
  3. 検索文字列が「テスト1」の場合、その行のA列からK列までのデータを新しいシート「テスト1」の2行目に挿入します。
  4. 同様に、検索文字列が「テスト2」の場合は新しいシート「テスト2」に、検索文字列が「テスト3」の場合は新しいシート「テスト3」にデータを挿入します。これをテスト18まで繰り返します。

解決策

以下の手順でVBAコードを作成します。

  1. シート「Sheet1」の最終行を取得します。
  2. テスト1からテスト18までの検索文字列をループで処理します。
  3. 各検索文字列に対して、Sheet1のデータを検索し、該当する行のA列からK列までのデータを新しいシートに挿入します。
Sub InsertDataToNewSheets()
    Dim ws1 As Worksheet
    Dim wsNew As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim searchString As String
    
    ' シートを指定
    Set ws1 = ThisWorkbook.Sheets("Sheet1")
    
    ' Sheet1の最終行を取得
    lastRow = ws1.Cells(ws1.Rows.Count, "L").End(xlUp).Row
    
    ' テスト1からテスト18までの繰り返し処理
    For i = 1 To 18
        searchString = "テスト" & i
        
        ' 新しいシートを作成
        On Error Resume Next
        Set wsNew = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        wsNew.Name = searchString
        On Error GoTo 0
        
        ' データをコピー
        For j = 1 To lastRow
            If InStr(1, ws1.Cells(j, "L").Value, searchString) > 0 Then
                ws1.Range("A" & j & ":K" & j).Copy
                wsNew.Cells(wsNew.Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
            End If
        Next j
        
        ' コピーしたデータを挿入
        Application.CutCopyMode = False
    Next i
End Sub

まとめ

 このVBAコードを実行すると、テスト1からテスト18までの文字列を含む行のデータが新しいシートに挿入されます。必要に応じて検索文字列の範囲を調整してください。