VBAコード解説: テスト1からテスト18までのデータを新しいシートに挿入
はじめに
VBA(Visual Basic for Applications)は、Microsoft Officeアプリケーション(Excel、Word、Outlookなど)で使用されるプログラミング言語です。この記事では、Excel VBAを使用して、特定の条件を満たす行のデータを新しいシートに挿入する方法を解説します。
課題
以下の課題を解決するためのVBAコードを作成します。
- シート「Sheet1」のL列には、テスト1からテスト18までの文字列を含むデータが入力されています。
- 最終行は不明ですが、データは1行目から記入されています。
- 検索文字列が「テスト1」の場合、その行のA列からK列までのデータを新しいシート「テスト1」の2行目に挿入します。
- 同様に、検索文字列が「テスト2」の場合は新しいシート「テスト2」に、検索文字列が「テスト3」の場合は新しいシート「テスト3」にデータを挿入します。これをテスト18まで繰り返します。
解決策
以下の手順でVBAコードを作成します。
- シート「Sheet1」の最終行を取得します。
- テスト1からテスト18までの検索文字列をループで処理します。
- 各検索文字列に対して、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までの文字列を含む行のデータが新しいシートに挿入されます。必要に応じて検索文字列の範囲を調整してください。