【VBA初心者必見】ChatGPTを使ったエクセルのマクロでのCSV統合の方法

ChatGPT

今回はChatGPTを使用してVBAコードを作成し、フォルダに保存されているバラバラのCSVを、一つに統合する方法を紹介します。

今話題のChatGPTを仕事の中に持ち込むにあたって、VBAのコードを書く作業をChatGPTに任せることが、一番簡単効率化が図れるものだと思います。

今回は、社内システムなどで無尽蔵に増えていってしまうCSVファイルを、一つのエクセルにまとめるVBAをChatGPTに作成してもらいながら、質問の仕方や修正するポイントなどを紹介していきます。

今回の状況について

今回ChatGPTで作成を行っていくコードは「フォルダーにあるCSVを、一つのエクセルにまとめる」といった内容のものです。

したがって、一つのフォルダーにCSVファイルが数点ある状況で、そのCSVファイルを一つのエクセルにまとめるコードを書いてもらいます。

フォルダにあるlist(1)~list(4)を一つのエクセルにシートに分けてまとめるコードを作成

ChatGPTへの質問・コード生成

ここからコードの作成をしていきます。今回は元となるリストがないので、Outlookの時の質問文に合った「リスト」の部分をなくして、以下のフォーマット沿ってに質問するとスムーズです。

「○○を行うVBAコードを作成してください。」

今回は「1つのフォルダーに入った複数のcsvファイルを、1つのエクセルにまとめる」ということを○○に入れた形で質問する形となります。

Outlookの一斉送信の時は、エクセルのリストに沿ってメールを作成してほしかったので、作成したリストも貼り付けを行いましたが、今回はエクセル側で元となるリストはない為、リストの貼り付けなどは不要です。

この質問で以下のように、コードと環境設定の回答がもらえたので、詳しく確認していきます。

コードについての回答
環境設定の回答。回答が途中で止まっているときは「つづき」と打つと回答を再開してくれる。

コードの修正・回答の確認

まず今回書いてくれたコードを見ていきます。修正も同時に行う為、新しいエクセルファイルの標準モジュールの中に、このコードを打ち込んで作業を行うとスムーズです。

ChatGPTで作成したコードの確認するポイントは、日本語で書いてある部分だけです。VBAのコードの中で「’」の後の文字は、コードに直接関係のないコメントで、解説の意味で書かれています。

VBAが全く分からないという方も、日本語で書かれた部分だけまずは目で追っていってください。

Sub MergeCSVFiles()
    ' 変数の宣言
    Dim folderPath As String
    Dim csvFile As String
    Dim wbTarget As Workbook
    Dim wbSource As Workbook
    Dim wsTarget As Worksheet
    Dim wsSource As Worksheet
    Dim lRowTarget As Long
    Dim lRowSource As Long
    
    ' エクセルアプリケーションを設定
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    ' フォルダーパスを指定
    folderPath = "C:\CSVFiles"
    
    ' 新しいワークブックを作成
    Set wbTarget = Workbooks.Add(xlWBATWorksheet)
    Set wsTarget = wbTarget.Worksheets(1)
    
    ' フォルダー内のCSVファイルをループ
    csvFile = Dir(folderPath & "\*.csv")
    Do While csvFile <> ""
        
        ' CSVファイルを開く
        Set wbSource = Workbooks.Open(folderPath & "\" & csvFile)
        Set wsSource = wbSource.Worksheets(1)
        
        ' タイトル行をコピー
        lRowTarget = wsTarget.Cells(Rows.Count, 1).End(xlUp).Row
        lRowSource = wsSource.Cells(Rows.Count, 1).End(xlUp).Row
        If lRowTarget > 1 Then lRowTarget = lRowTarget + 1
        wsSource.Range("A1", wsSource.Cells(1, Columns.Count).End(xlToLeft)).Copy wsTarget.Cells(lRowTarget, 1)
        
        ' データ行をコピー
        wsSource.Range("A2", wsSource.Cells(lRowSource, Columns.Count).End(xlToLeft)).Copy wsTarget.Cells(lRowTarget + 1, 1)
        
        ' CSVファイルを閉じる
        wbSource.Close SaveChanges:=False
        
        ' 次のCSVファイルを取得
        csvFile = Dir()
    Loop
    
    ' ファイルを保存
    wbTarget.SaveAs folderPath & "\Merged.csv", xlCSV
    
    ' ワークブックを閉じる
    wbTarget.Close SaveChanges:=False
    
    ' アプリケーションの設定を元に戻す
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
    MsgBox "CSVファイルを結合しました。"
End Sub

この中で、修正が必要な個所を確認していきます。

①任意のフォルダ名に変更する(必須)

前半部分の「フォルダーパスを指定」という部分を、CSVが入っているフォルダー名に変更する必要があります。

①-1:CSVが保存されているフォルダー名をコピーする。

①-2:「”C:\CSVFiles”」の「”」の間に、貼り付ける。

「フォルダーパスを指定」と書いてあるところの一行下の部分、「folderPath = “C:\CSVFiles”」の「”C:\CSVFiles”」がフォルダー名を記載する所になります。

プログラムの世界では、フォルダー名などの文字列は「”」で囲んで書くというルールがあるため、「”」の間にフォルダー名を貼り付けます。

folderPath = “C:\CSVFiles”
→folderPath = “フォルダー名”

このフォルダー名の部分に貼り付けを行えば、今回の場合最低限の修正は完了となります。

②作成するエクセルのファイル名を設定する(推奨)

コードの下の方に「ファイルを保存」というコメントがありますが、この部分でファイル名が「Merged」という名前に設定されています。プログラム的には問題ありませんが、わかりやすい名前にしておいた方がベターです。

wbTarget.SaveAs folderPath & “\Merged.csv”, xlCSV
→wbTarget.SaveAs folderPath & “\〇〇.csv”, xlCSV

今回、「”」の中に、「¥」や「.csv」という文字も入っていますが、そこは消さないように注意しましょう。

環境設定

環境設定については、以下のような回答がありましたが、エクセルVBAの使い方を書いているだけなので、対応する必要はありません。

このコードを使用するには、まずVBAエディタを開き、新しいモジュールを作成してから、上記のコードを貼り付けます。また、フォルダーパスを自分の環境に合わせて変更する必要があります。

次に、エクセルを開いて、マクロを実行するためのボタンを追加します。リボンの開発タブで、[コマンドボタン]を選択し、ワークシート上に追加したい場合わせて、そのボタンをクリックするとマクロが実行されるように設定します。ボタンを右クリックし、[コントロールの選択]を選択し、[マクロ]タブで[新規作成]をクリックします。マクロ名を指定し、[OK]をクリックします。次に、[このワークブックに保存]を選択してマクロを保存し、ダイアログを閉じます。

最後に、エクセルを再起動して、ワークブックを開き、追加したボタンをクリックしてマクロを実行します。マクロが完了すると、CSVファイルが1つのエクセルファイルに結合され、フォルダー内に新しいファイルが作成されます。

このコードを実行するには、Microsoft Excelがインストールされ、有効になっている必要があります。また、セキュリティ設定によっては、マクロの実行が許可されていない場合があります。その場合は、セキュリティ設定を変更する必要があります。

VBAの記入・実行

今回のエクセルを実行するとフォルダーに自動でCSVファイルが作成されます。

統合CSVではlist(1)~list(4)の内容が、縦に結合される形で統合されています。

まとめ

統合は、それぞれのCSVをエクセルのシートとして統合させたり、横につなげていったりなど、場面によってやりたいことは変わってくると思います。

その状況に合わせてChatGPTに指示を出すことで、思った通りの統合ができるようになりますので是非試してみてください。

コメント

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