VBAマクロじゃできないExcel作業自動化?それなら生成AI(ChatGPT/Copilotなど)の出番じゃないですか?

  • ブックマーク
  • Feedly
  • -
    コピー
VBAマクロじゃできないExcel作業自動化?それなら生成AI(ChatGPT/Copilotなど)の出番じゃないですか?

せるワザ

前回(「ChatGPTやCopilotで、VBAを学ばなくてもExcel自動化実現」)のテーマで、VBAマクロによるExcel自動化事例をご紹介しました。しかし、そもそも必ずVBAを使わないと、Excel作業は自動化できないんでしたっけ?

賢者の皆さまなら、もうお気づきですよね?

決してそんなことはないんです。

たとえば、VBAマクロでExcelを制御することが必要な自動化メニューとして、2024年現在も、

・タイマー設定(毎日、毎週など、時間をあらかじめ指定して自動起動、自動作業を進めるプログラム)

・ユーザー入力ダイアログボックスの内容によって処理を分岐させるような、インタラクティブ(対話的な)タスク

など、まだいくつもの作業がありますが、これら以外、デスクワーク中に思いつく自動化の多くは、実はVBAを介さなくても実現できるのです。

特に、最近Excelへ標準搭載されるようになった強力な新関数(XLOOKUPやFILTER、GROUPBY)などをうまく使いこなせば、VBAに頼らなくても、かなり高度な作業自動化を実現できるようになります。

今回は、「VBAじゃなくてもよいこと」、「VBAじゃできないこと」について取り上げます。

住所の分解は、VBAマクロを組めば簡単に自動化できますが...

多くの職場で発生するルーチンワークの1つに、「住所の分解」があります。

住所を含む顧客名簿や取引先名簿を、基幹系システムやリレーショナル・データベースなどへインポートするため、「都道府県名」「市区町村名」「それ以降の住所」に分割する作業のことです。

たとえば、

VBAマクロじゃできないExcel作業自動化?それなら生成AI(ChatGPT/Copilotなど)の出番じゃないですか?

このように、”1セルに1住所”でまとまっている情報が、数100件あると仮定します。

(※この住所情報は、ジェネレーター”住所データのランダム作成”が自動生成したダミーデータで、実在の個人や企業などを特定するものではありません。)

住所分解のためのVBAが書ければ、このような住所データは100件でも1000件でも、数万件でも、簡単に分解することができます。

もし、元の住所で「都道府県」「市区町村」などの間に空白[スペース]があれば、それを区切り位置と判定します。空白がなくても、VBAの正規表現(RegExp)を参照すれば、一発でかなり正確な分解結果を返してくれます。あらかじめ、VBEの[ツール]→[参照設定]ダイアログボックスから、[Microsoft VBScript Regular Expressions 5.5]にチェックを入れて[OK]しておいてくださいね。

VBAマクロじゃできないExcel作業自動化?それなら生成AI(ChatGPT/Copilotなど)の出番じゃないですか?

この記事で、下記プログラムを1行ずつ解説することはできませんが、これをコピーして、そのままVBEにペースト→実行すれば、ほんの数秒で、目的とする住所分割は完了です。

Sub 分解住所()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") '対象のシート名を設定
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row 'A列で最後の行を見つける
    Dim i As Long
    For i = 1 To lastRow
        Dim fullAddress As String
        fullAddress = ws.Cells(i, 1).Value 'A列の住所を取得
        Dim prefectureName As String
        Dim cityName As String
        Dim restOfAddress As String
        ' ここで正規表現を使用して住所を分割する
        ' 正規表現パターンは、実際の住所データに合わせて調整してください
        Dim regex As Object
        Set regex = CreateObject("VBScript.RegExp")
        regex.Global = True
        regex.IgnoreCase = True
        regex.Pattern = "(.?[都道府県])(.?[市区町村])(.*)"
        Dim matches As Object
        Set matches = regex.Execute(fullAddress)
        If matches.Count = 1 Then
            prefectureName = matches(0).SubMatches(0)
            cityName = matches(0).SubMatches(1)
            restOfAddress = matches(0).SubMatches(2)
            ws.Cells(i, 2).Value = prefectureName '都道府県名
            ws.Cells(i, 3).Value = cityName '市区町村名
            ws.Cells(i, 4).Value = restOfAddress 'その他の住所
        End If
    Next i
End Sub

VBAマクロじゃできないExcel作業自動化?それなら生成AI(ChatGPT/Copilotなど)の出番じゃないですか?

”市区町村”もしくは”郡”などの文字を含む行政区(「町田市」「郡山市」etc.)では、分割ミスとなることが多々ありますので、作業後の目視チェックが必要です。

Excel関数を複数組み合わせれば、VBAマクロを使わなくても住所分割はできます

マクロで簡単に成果物が得られるとはいえ、すべての職場でマクロOK、というわけではないですよね?

「プログラムを作成する能力」は別として、そもそも、セキュリティ・ポリシーで「マクロ使用禁止」を掲げている企業もあります。

また、職場の標準オフィスソフトが”オンライン版Microsoft 365”だとしたら、オンライン上ではVBEの起動も、.xlsmの保存もできません。

そのような場合には、Excel関数を組み合わせれば、上記VBAマクロと同じ成果物を得ることができます。

たとえば、都道府県名だけを抽出するには、

=IF(LEFT(A1,4)="神奈川県",LEFT(A1,4),IF(LEFT(A1,4)="鹿児島県",LEFT(A1,4),IF(LEFT(A1,4)="和歌山県",LEFT(A1,4),LEFT(A1,3))))

という、LEFT関数とIF関数を入れ子にした関数式を入力してみてください。

国内47都道府県のうち、漢字4文字県は3つ(神奈川県/鹿児島県/和歌山県)なので、いずれかに該当する場合のみ、住所文字列左から4文字を抽出し、そうでない場合には一律で左から3文字を抽出します。これなら、行政区の呼称が、”府”や”道”でも、”都”でも、間違わずに都道府県名を抽出できますね。

同じように、1セル内の文字列から、”市”もしくは”町”という漢字を見つけ、都道府県名(3文字、または4文字)を除き左から”市”もしくは”町”までの文字数をMID関数で抽出すれば、市区町村名だけが残る関数式となります。

=MID(A1,LEN(E1)+1,FIND("",A1)-LEN(E1))

〜郡〜町を検索する場合は、”市”を”町”に置き換えてください。

前節のVBAマクロと同様、「町田市」などのレコードからは、

正確な抽出結果が得られないことがありますので、やはり目視確認は必要となります。 最後に、都道府県名、市区町村名を除いた残りの文字列を書き出せば、分割は完了です。

VBAマクロじゃできないExcel作業自動化?それなら生成AI(ChatGPT/Copilotなど)の出番じゃないですか?

VBAマクロが使えない自動化? ならば生成AIにお願いしましょう

ここまでは、VBAマクロ”じゃなくても”できる自動化の内容です。しかし、VBAマクロ”じゃ”できない自動化についてはどうしましょうか?

そんなことあるの? いや、あるんです。

たとえば、上記住所録が、顧客の直接入力したデータで、以下のような表記だったらどうでしょう?

VBAマクロじゃできないExcel作業自動化?それなら生成AI(ChatGPT/Copilotなど)の出番じゃないですか?

VBAマクロや文字列操作関数で、都道府県名や市区町村名なら、分割することはできるでしょう。

しかし、

(1)VBAマクロやExcel関数は”漢数字”を取り扱うことが苦手で、これを他ソフトに取り込める形式の算用数字に、自動変換することができません。

仮に”一 = 1”、”二 = 2”という変換付け合わせ表を作ったところで、では”一”ではなく”壱”と書かれていたら?

上記サンプル・リストでも、”三番町”の”三”は、算用数字”3”に変換するのでしょうか?

しないのでしょうか?

(2)番地の後ろに、建物名が入力されています。

多くのデータベースソフトは、番地と建物名を切り分けて保存する仕様になっていますが、VBAマクロやExcel関数では、建物名を切り分けることはできません。

さらに、”技術者泣かせ”な京都洛中の複雑な住所、”西堀川通御池下る西三坊堀川町”などでは、「御池下る」は建物名ではないの? 住所ではないの?

こんなこと、VBAマクロやExcel関数には、判定することができません。

もうお手上げ...!?

ここで、ChatGPTやCopilotなどの生成AIをうまく活用するのです。

上記サンプル住所を、Copilotのチャット窓にリクエストを入れてみました。

<プロンプト>(Question)

VBAマクロじゃできないExcel作業自動化?それなら生成AI(ChatGPT/Copilotなど)の出番じゃないですか?

<フィードバック>

VBAマクロじゃできないExcel作業自動化?それなら生成AI(ChatGPT/Copilotなど)の出番じゃないですか?

さすがに、VBAマクロのように、数万件のデータを一気にCopilotで自動変換することは、今のところできないでしょう。

数百件でも、Copilotは途中でギブアップする可能性が高いと見込まれます。

しかし、目的の成果物に近いデータは、かなり正確にCopilotがフィードバックしてくれていることがわかります。

VBAマクロでもExcel関数でも得られない住所分割の成果物をゲットするには、いまや私たちには「生成AI」という強い味方ができたのです。 ※ただし、この場合もやはり、最終的には担当者が必ず目視チェックをかけましょう。

まとめ:Excel作業自動化の手段は、マクロだけじゃありません
目的のためには、関数や生成AIもうまく活用しましょう

Excelで業務を自動化するには、まずVBAマクロのプログラムを書くことを考えるビジネス・パーソンも多いでしょう。しかし、「マクロ禁止」の環境や、VBAマクロで”できない”データを加工するには、ほかの手段を考えざるをえません。

関数やAI活用など、深く調べてみると、マクロ以外にも代替手段があることがわかります。

これからの業務効率化には、最終的な目的(成果物)にあわせ、どの手段(ツール)を活用していくか、その選球眼を磨いていくことが求められます。

せるワザ

忙しいビジネス・アワーの合間にも、ぜひ少し時間を確保して、新しいツールやソフトをどんどん使ってみることをおすすめします!









小さなお悩みでも、
お気軽にご相談ください!

お急ぎの方はお電話にてお問い合わせください

050-6867-2130
せるワザロゴ

セルワザでは、役に立つEXCELワザをご紹介しております!

  • ブックマーク
  • Feedly
  • -
    コピー