59
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

エニプラAdvent Calendar 2024

Day 8

Microsoft Copilotを使用したCSV生成マクロ作成

Last updated at Posted at 2024-12-07

はじめに

皆さんこんにちは。川副です。

最近対応した業務の一つとして、ユーザーから送られてきた申請書を確認し、対象のデータをまとめたCSVファイルを作成するという業務がありました。

その際に、Microsoft Copilotを活用してCSVファイルを生成するためのマクロを作成することになったため、どのように活用したのかを解説していきます。

Microsoft Copilotとは

Microsoft Copilotは、ブラウザやスマホから利用することができるMicrosoftのAIアシスタントです。
生成AIによる会話・検索・コンテンツ制作が可能で、検索欄に質問を書き込むだけで利用することができます。
無料版と有料版があるのですが、今回は無料版を使用しました。

今回対応した作業

今回の作業対象となる申請書のイメージ画像が、下記になります。
※本記事のために作成した仮の申請書です。
申請書.png

「●」はそのユーザがメインで使うサイトを表しているため、
対象サイトに「●」と記載されている箇所が存在する場合、
CSVファイルには「ユーザID,MAINSITE」と表示する必要があります。

「〇」はそのユーザがサブで使うサイトを表しているため、
対象サイトに「〇」と記載されている箇所が存在する場合、
CSVファイルには「ユーザID,SUBSITE」と表示する必要があります。

それでは、さっそくCopilotにお願いしてみましょう。

この作業では、作ってもらったマクロに後からどんどん処理を足していってもらうことも可能なので、始めから完璧に作って貰おうとはせずに、最初はおおまかな要件だけを伝えましょう。

まず最初に、下記を伝えてみます。
①下記条件を満たすマクロを作成してほしいこと。
②ユーザID(B列)が記載されている時に動くこと。
③同じ行のC列を見て、「●」が記載されている場合、「B列の値,MAINSITE」と出力すること。
④同じ行のC列を見て、「〇」が記載されている場合、「B列の値,SUBSITE」と出力すること。
⑤上記の出力結果は、CSVファイルを新規作成してそこに出力すること。

応答1.png
すると、このようなマクロが作成されました。

' アクティブなワークシートを設定
Set ws = ActiveSheet

' 最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

' 出力データ用の文字列を初期化
outputData = ""

' 最終行までループ
For i = 1 To lastRow
    If ws.Cells(i, 2).Value <> "" Then ' B列に値がある場合
        userID = ws.Cells(i, 2).Value
        If ws.Cells(i, 3).Value = "●" Then
            siteType = "MAINSITE"
            outputData = outputData & userID & "," & siteType & vbCrLf
        ElseIf ws.Cells(i, 3).Value = "〇" Then
            siteType = "SUBSITE"
            outputData = outputData & userID & "," & siteType & vbCrLf
        End If
    End If
Next i

' CSVファイルを書き出すパスを指定
filePath = Application.DefaultFilePath & "\output.csv"

' ファイルシステムオブジェクトを作成してCSVを書き出し
Set fs = CreateObject("Scripting.FileSystemObject")
Set aFile = fs.CreateTextFile(filePath, True)
aFile.WriteLine outputData
aFile.Close

' 完了メッセージを表示
MsgBox "データが " & filePath & " に書き出されました。", vbInformation

さっそく答えてくれたので、申請書でこのマクロを動かしてみます。

マクロ1.png
実行することで、下記「output.csv」が作成されました。
CSV1.png

最初はC列の日本のみ対象にしてみましたが、うまく作成されています。

続けて、D列のアメリカとE列の中国も対象にしてもらいましょう。
続けてチャットすれば答えてくれます。

応答2.png
このように、かなり雑に依頼しても作ってくれます。

' アクティブなワークシートを設定
Set ws = ActiveSheet

' 最終行を取得
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

' 出力データ用の文字列を初期化
outputData = ""

' 最終行までループ
For i = 1 To lastRow
    If ws.Cells(i, 2).Value <> "" Then ' B列に値がある場合
        userID = ws.Cells(i, 2).Value
        ' C列の値を確認
        If ws.Cells(i, 3).Value = "●" Then
            siteType = "MAINSITE"
            outputData = outputData & userID & "," & siteType & vbCrLf
        ElseIf ws.Cells(i, 3).Value = "〇" Then
            siteType = "SUBSITE"
            outputData = outputData & userID & "," & siteType & vbCrLf
        End If
        
        ' D列の値を確認
        If ws.Cells(i, 4).Value = "●" Then
            siteType = "MAINSITE"
            outputData = outputData & userID & "," & siteType & vbCrLf
        ElseIf ws.Cells(i, 4).Value = "〇" Then
            siteType = "SUBSITE"
            outputData = outputData & userID & "," & siteType & vbCrLf
        End If
        
        ' E列の値を確認
        If ws.Cells(i, 5).Value = "●" Then
            siteType = "MAINSITE"
            outputData = outputData & userID & "," & siteType & vbCrLf
        ElseIf ws.Cells(i, 5).Value = "〇" Then
            siteType = "SUBSITE"
            outputData = outputData & userID & "," & siteType & vbCrLf
        End If
    End If
Next i

' CSVファイルを書き出すパスを指定
filePath = Application.DefaultFilePath & "\output.csv"

' ファイルシステムオブジェクトを作成してCSVを書き出し
Set fs = CreateObject("Scripting.FileSystemObject")
Set aFile = fs.CreateTextFile(filePath, True)
aFile.WriteLine outputData
aFile.Close

' 完了メッセージを表示
MsgBox "データが " & filePath & " に書き出されました。", vbInformation

このマクロを動かしてみたところ、下記が作成されました。

CSV2.png
申請書には●と〇が合計21件存在していましたが、全て出力されています。
これで対応完了となります。

おわりに

CSVファイルの出力先や、出力するCSVファイルの名前などもCopilotにお願いすれば要望に合わせたマクロを生成してくれます。もしCopilotを使用する際は参考にしてみてください。

実際の作業では、申請書の項目はもっと多く、出力しなければならないCSVの種類も多かったのですが、Copilotへの質問は、指定する列などを変えることである程度使い回すことができました。
そのため、質問に使用した文章はメモ帳などに残しておくことをおすすめします。

以上、川副でした。

59
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?