VBAで複数CSVファイルを開かずにコピーする方法

Visual Basic

VBAを使って複数のCSVファイルからデータをコピーし、指定したシートに貼り付ける作業は、手動で行うよりも効率的に処理できます。しかし、複雑な条件や処理を組み合わせることで、初心者には少し難易度が上がります。この記事では、複数のCSVファイルからデータを貼り付けるためのVBAコードを実装する方法を解説します。

1. VBAでCSVファイルを開かずにコピーする方法

VBAを使うことで、CSVファイルを直接開かずにデータをコピーして、Excelシートに貼り付けることができます。これを実現するためには、まずVBAのコードでファイルを選択し、その内容を一時的に開いてコピーする必要があります。

最初にCSVファイルを選択し、For Eachループを使用して各ファイルから必要なデータを取り出し、Excelの対象シートに貼り付けます。

2. 複数CSVファイルのデータを最終行に貼り付ける方法

複数のCSVファイルを処理する際、各CSVファイルのデータを既存のデータの最終行に追加することが求められます。VBAでこれを実現するためには、各シートの最終行を特定し、その位置にデータを貼り付ける処理を組み込みます。

例えば、Sheet1の最終行を取得し、新しいデータをその下に追加するためには、次のようなコードが必要です。

rws1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
ws1.Range("A" & rws1 + 1).PasteSpecial xlPasteValues

3. 見出し行を除いてCSVファイルのデータを貼り付ける方法

データ2(CSV)では、見出し行(A行)を除いてデータを貼り付けたいという要望があります。この場合、最初のファイルの貼り付けはSheet2のA1に行い、2回目以降の貼り付けではB行からデータを開始する必要があります。

具体的には、最初のデータをそのまま貼り付け、2回目以降はB行から最終行までコピーしていくコードを組む必要があります。これにより、見出し行が重複せずにデータが貼り付けられます。

4. VBAコードの実装例

以下に、VBAコードの一部例を示します。このコードは、複数のCSVファイルを選択し、それぞれのデータを指定したシートに順番に貼り付けるものです。

Sub CopyCSVData()
    Dim rws1 As Long, rws2 As Long
    Dim ws1 As Worksheet, ws2 As Worksheet
    Set ws1 = Worksheets("Sheet1")
    Set ws2 = Worksheets("Sheet2")

    rws1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
    rws2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row

    ' CSVファイル選択
    SelectFileName1 = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", FilterIndex:=1, Title:="データ1ファイルを選択")

    If IsArray(SelectFileName1) Then
        For Each OneFileName1 In SelectFileName1
            Workbooks.Open OneFileName1
            Set MSCSV1 = Workbooks(OneFileName1)
            Set MSsh1 = MSCSV1.Worksheets(1)
            MSsh1.UsedRange.Copy
            ws1.Range("A" & rws1 + 1).PasteSpecial xlPasteValues
            MSCSV1.Close
        Next
    End If
End Sub

5. まとめ

VBAを使用して、CSVファイルからデータをシートに貼り付ける作業は自動化でき、効率的に処理を行えます。複数のCSVファイルを順番に処理し、貼り付け位置を調整する方法を理解することができれば、かなり柔軟にデータ管理が可能になります。

この記事で紹介したコードを元に、自分の要件に合わせたVBAコードを作成し、作業を効率化してみましょう。

コメント

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