はじめに
皆さんこんにちは。川副です。
最近対応した業務の一つとして、ユーザーから送られてきた申請書を確認し、対象のデータをまとめたCSVファイルを作成するという業務がありました。
その際に、Microsoft Copilotを活用してCSVファイルを生成するためのマクロを作成することになったため、どのように活用したのかを解説していきます。
Microsoft Copilotとは
Microsoft Copilotは、ブラウザやスマホから利用することができるMicrosoftのAIアシスタントです。
生成AIによる会話・検索・コンテンツ制作が可能で、検索欄に質問を書き込むだけで利用することができます。
無料版と有料版があるのですが、今回は無料版を使用しました。
今回対応した作業
今回の作業対象となる申請書のイメージ画像が、下記になります。
※本記事のために作成した仮の申請書です。
「●」はそのユーザがメインで使うサイトを表しているため、
対象サイトに「●」と記載されている箇所が存在する場合、
CSVファイルには「ユーザID,MAINSITE」と表示する必要があります。
「〇」はそのユーザがサブで使うサイトを表しているため、
対象サイトに「〇」と記載されている箇所が存在する場合、
CSVファイルには「ユーザID,SUBSITE」と表示する必要があります。
それでは、さっそくCopilotにお願いしてみましょう。
この作業では、作ってもらったマクロに後からどんどん処理を足していってもらうことも可能なので、始めから完璧に作って貰おうとはせずに、最初はおおまかな要件だけを伝えましょう。
まず最初に、下記を伝えてみます。
①下記条件を満たすマクロを作成してほしいこと。
②ユーザID(B列)が記載されている時に動くこと。
③同じ行のC列を見て、「●」が記載されている場合、「B列の値,MAINSITE」と出力すること。
④同じ行のC列を見て、「〇」が記載されている場合、「B列の値,SUBSITE」と出力すること。
⑤上記の出力結果は、CSVファイルを新規作成してそこに出力すること。
' アクティブなワークシートを設定
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
さっそく答えてくれたので、申請書でこのマクロを動かしてみます。
実行することで、下記「output.csv」が作成されました。
最初はC列の日本のみ対象にしてみましたが、うまく作成されています。
続けて、D列のアメリカとE列の中国も対象にしてもらいましょう。
続けてチャットすれば答えてくれます。
' アクティブなワークシートを設定
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
このマクロを動かしてみたところ、下記が作成されました。
申請書には●と〇が合計21件存在していましたが、全て出力されています。
これで対応完了となります。
おわりに
CSVファイルの出力先や、出力するCSVファイルの名前などもCopilotにお願いすれば要望に合わせたマクロを生成してくれます。もしCopilotを使用する際は参考にしてみてください。
実際の作業では、申請書の項目はもっと多く、出力しなければならないCSVの種類も多かったのですが、Copilotへの質問は、指定する列などを変えることである程度使い回すことができました。
そのため、質問に使用した文章はメモ帳などに残しておくことをおすすめします。
以上、川副でした。