【Excel VBA革命】もう手作業で探さない!特定シートを瞬時に見つけ出し、必要なデータを自動で整理する方法

業務効率化ツール

【Excel VBA革命】
もう手作業で探さない!特定シートを瞬時に見つけ出し、
必要なデータを自動で整理する方法

繰り返しのExcel作業から解放!VBAで驚くほど簡単にシート検索とデータ整理を自動化

「大量のExcelファイルの中から、特定のキーワードが含まれるシートを探し出すのに毎回時間がかかっている…」
「複数のシートから必要なデータをコピー&ペーストする作業、もううんざり…」

そんな悩みを抱えているあなたに朗報です!

この記事では、Excel VBAを使って、まるで魔法のようにシートの検索からデータの自動転記までを効率化する方法を徹底解説します。

今回ご紹介するVBAコードを使えば、今まで手作業で行っていた煩雑な作業から解放され、貴重な時間をよりクリエイティブな業務に使うことができるようになります。

今回の主役:シート検索とデータ転記を自動化するVBAコード

早速ですが、今回ご紹介するVBAコード全体像を見てみましょう。

Sub OpenFileAndSelectSheet()
Dim wb As Workbook
Dim ws As Worksheet
Dim filePath As String
Dim keyword As String
Dim matchedSheet As Worksheet
Dim foundMatch As Boolean
Dim lastRow As Long
Dim newSheet As Worksheet
Dim rowIndex As Long
Dim targetRow As Long

' ダイアログボックスを表示してファイルを選択
filePath = Application.GetOpenFilename("Excel Files (*.xls; *.xlsx; *.xlsm), *.xls; *.xlsx; *.xlsm", , "ファイルを開く")

' キャンセルが押された場合
If filePath = "False" Then
MsgBox "ファイルが選択されませんでした。", vbExclamation
Exit Sub
End If

' ファイルを開く
Set wb = Workbooks.Open(filePath)

' 検索するキーワードを入力
keyword = InputBox("シート名に含まれるキーワードを入力してください:", "シート検索")

' キーワードが入力されなかった場合
If keyword = "" Then
MsgBox "キーワードが入力されませんでした。", vbExclamation
Exit Sub
End If

' 一部一致するシートを探す
foundMatch = False
For Each ws In wb.Sheets
If InStr(1, ws.Name, keyword, vbTextCompare) > 0 Then
Set matchedSheet = ws
foundMatch = True
Exit For
End If
Next ws

' 一致するシートが見つかった場合
If foundMatch Then
matchedSheet.Select
MsgBox "シート " & matchedSheet.Name & " を選択しました。", vbInformation
Else
MsgBox "指定したキーワードに一致するシートが見つかりませんでした。", vbExclamation
Exit Sub
End If

' 選択シートの最終行を取得
lastRow = matchedSheet.Cells(matchedSheet.Rows.Count, 1).End(xlUp).Row

' Bank Statement_Sampleシートをコピーして名前を変更
On Error Resume Next
Set newSheet = wb.Sheets("Bank Statement_Sample")
On Error GoTo 0

If newSheet Is Nothing Then
MsgBox "Bank Statement_Sample シートが見つかりません。", vbExclamation
Exit Sub
End If

newSheet.Copy After:=wb.Sheets(wb.Sheets.Count)
Set newSheet = wb.Sheets(wb.Sheets.Count)
newSheet.Name = "Bank Statement"

' データの転記
targetRow = 2 ' 新しいシートの開始行
For rowIndex = 2 To lastRow
If InStr(1, matchedSheet.Cells(rowIndex, "F").Value, "PY", vbTextCompare) > 0 Then
With newSheet
' A列に"Bank"を入力
.Cells(targetRow, "A").Value = "Bank"
' D列をF列にコピー
.Cells(targetRow, "F").Value = matchedSheet.Cells(rowIndex, "D").Value
' C列の条件に応じてX列の値を転記
If matchedSheet.Cells(rowIndex, "C").Value = "Debit" Then
.Cells(targetRow, "H").Value = matchedSheet.Cells(rowIndex, "X").Value
ElseIf matchedSheet.Cells(rowIndex, "C").Value = "Credit" Then
.Cells(targetRow, "I").Value = matchedSheet.Cells(rowIndex, "X").Value
End If
' 他の列を転記
.Cells(targetRow, "J").Value = matchedSheet.Cells(rowIndex, "AG").Value
.Cells(targetRow, "K").Value = matchedSheet.Cells(rowIndex, "S").Value
.Cells(targetRow, "Q").Value = matchedSheet.Cells(rowIndex, "AY").Value
.Cells(targetRow, "R").Value = matchedSheet.Cells(rowIndex, "W").Value
.Cells(targetRow, "C").Value = matchedSheet.Cells(rowIndex, "N").Value
End With
targetRow = targetRow + 1 ' 次の行に進む
End If
Next rowIndex

MsgBox "データの転記が完了しました。", vbInformation
End Sub

このVBAコードは、以下の3つの主要な処理を行います。

  1. ファイルを選択: まず、ダイアログボックスを表示して、処理対象のExcelファイルを選択します。
  2. シートを検索: 入力されたキーワードに基づいて、ファイル内のシートを検索し、最初に見つかったシートを選択します。あいまい検索にも対応しているため、シート名の完全一致でなくても大丈夫です。
  3. データを転記: 選択されたシートのデータを、テンプレートシート「Bank Statement_Sample」をコピーして作成した「Bank Statement」シートに自動で転記します。

このVBAコードを使うメリット

このVBAコードを活用することで、以下のようなメリットが得られます。

  • 大幅な時間短縮: 手作業でのシート検索やデータコピー&ペーストにかかっていた時間を劇的に削減できます。
  • ヒューマンエラーの防止: 手作業による入力ミスや転記ミスをなくし、データの正確性を向上させます。
  • 作業効率の向上: 定型的な作業を自動化することで、より重要な業務に集中できるようになります。
  • 誰でも簡単に実行可能: 一度設定すれば、専門知識がなくても簡単に実行できます。

VBAコードの使い方:3つのステップで簡単実行!

  1. VBAエディタを開く: Excelを開き、Alt + F11キーを押してVBAエディタを開きます。
  2. 標準モジュールを挿入: VBAエディタのメニューから「挿入」→「標準モジュール」を選択します。
  3. コードを貼り付け: 表示されたコードウィンドウに、上記のVBAコードをコピー&ペーストします。

実行方法:

  1. VBAエディタでコードを表示したまま、実行ボタン(緑色の▶️ボタン)をクリックするか、F5キーを押します。
  2. ファイル選択ダイアログが表示されるので、処理したいExcelファイルを選択します。
  3. シート検索のキーワードを入力するダイアログが表示されるので、検索したいキーワードを入力して「OK」をクリックします。

さらに便利に!応用編

  • 検索キーワードの柔軟な設定: InputBoxの部分を修正することで、複数のキーワードでの検索や、より複雑な条件での検索も可能です。
  • 転記先のシート名やレイアウトの変更: コード内のシート名や転記先の列を変更することで、様々な形式のデータ整理に対応できます。
  • エラー処理の強化: On Error Resume NextやOn Error GoTo 0を活用して、予期せぬエラーが発生した場合の処理を追加できます。

まとめ:VBAでExcel作業をスマートに進化させよう!

今回ご紹介したVBAコードは、Excelでのシート検索とデータ転記作業を効率化するための強力なツールです。日々のルーチンワークに費やしていた時間を削減し、より付加価値の高い業務に集中できる環境を手に入れましょう。

VBAは少し難しそうに感じるかもしれませんが、今回のようなシンプルなコードから始めることで、少しずつその便利さを実感できるはずです。ぜひ、このコードをあなたのExcel業務に取り入れて、効率化を体験してみてください。

この記事を読んで、少しでも「役に立った!」と思っていただけたら、ぜひSNSでシェアしてくださいね!

タイトルとURLをコピーしました