生成AIを用いた作業効率化にチャレンジしてみた
2026年7月
いま経済ニュースの多くが生成AIに関連するものです。
米中のAI覇権をめぐる争い、ビッグテックによる巨大データセンター建設とそれに伴う半導体不足、そしてAI・半導体関連企業の株価高騰。これらはバブリー臭さを漂わせつつも経済活動の牽引役となっています。一方で、AIの発達・普及は多くの人の仕事を奪うのではないか、またこの世界で知性の頂点に君臨していた人間をその座からひきずりおろすのではないか、といった悲観論も盛んになっています。
巨大な経済動向や深遠な哲学的議論はさておき、生成AIの普及によって我々の日常生活がどのように変化していくのか体感してみたく、今さらかもしれませんが生成AIを利用したデータ編集作業の効率化にチャレンジしてみることにしました。
1. Google Spreadsheet上のグラフやセル表示データの画像編集作業
題材として選んだのが、当ブログの個別企業分析に掲載するための「業績推移グラフと付随情報の画像化・加工・保存」です。
●作業内容
具体的には、以下のGoogle Spreadsheetから赤枠の部分を切り出し、ブログ貼付用の画像として保存するというものです。

↓

なお、上部の「4816 東映アニメーション」や「安定成長スコア 10」などがセルに入力・表示したデータ、下部がグラフとして画像表示しているもので、これら2つを複合して画像化することになります(後々、このことが重要と知りました)。
現在の手作業の手順は以下のとおりです。
① Google Spreadの画面をプリントスクリーン(スクショ)する
② 画像編集ソフトに①の画像を貼り付ける
③ 画像のうち赤枠の部分をトリミングする
④ 画像の大きさを変更する(横幅 800ピクセル)
⑤ 所定のフォルダに分かりやすいファイル名(例:東映アニメ_業績グラフ)で保管する
これら一連の作業を自動化するコード(プログラム言語)を生成AIに教えてもらって実装する、というのが今回の試みとなります。
GoogleのことはGoogleに聞けと、使用した生成AIは「Gemini」です。また、コードは「GAS (Google Apps Script)」となります。
なお、筆者は仕事でExcel VBAを使用していたので、プログラミングに関しては多少の知識があります。
●生成AIとの質疑
質疑に先立ち、質問内容を考えました。
一連の作業の中で最も指示が難しいのが、トリミングする範囲の指定です。人間ならば適当に余白を設けてマウスをドラッグして範囲を指定しますが、コンピュータに「適当」という指示は理解できません。そこで赤枠に相当するセルの範囲を選択してもらうことにします。
それでは質疑開始、以下はその抜粋です。(せっかくなのでアイコンもGeminiにつくってもらいました)

Google spreadsheet上の特定のセル範囲をprintscreenするGASはあるか

GASだけで「クリップボードに選択範囲のスクリーンショット画像を直接格納する」ということは、Googleのセキュリティ制限(プライバシー保護)のため不可能です
しかし、代替案として「特定のセル範囲をPNG画像としてGoogleドライブに自動保存する」、あるいは「一時的にPDFとして書き出して画像化する」という仕組みをGASで構築することは可能です
・・・そのGASを表示

(jpeg形式を普段使用しているので)
出力フォーマットをjpegに指定できるか

結論からお伝えすると、Googleスプレッドシートのエクスポート機能では、直接「JPEG(.jpg)」を指定して書き出すことはできません
どうしてもJPEG形式でGoogleドライブに保存したい場合は、「一度PNG画像として取得したバイナリデータを、GAS上でJPEG形式に変換して保存する」というステップを踏む必要があります。
・・・そのGASを表示

エラーが発生した

失礼いたしました
GASの標準機能では、内部の制限により PNGからJPEGへの直接変換に対応していません
スプレッドシートの枠線や背景を維持したまま、GASで正しくJPEG画像としてGoogleドライブに保存するためには、「Googleスライド(またはGoogleドキュメント)を一時的に作成し、そこに画像を貼り付けてJPEGで書き出す」 という迂回処理が必要になります
エラーを回避し、確実に指定範囲をJPEG(.jpg)で保存できる修正版のコードを作成しましたので、こちらに差し替えてお試しください
・・・そのGASを表示

(それでもエラーが発生するので、コードを貼り付けた上で)
このコードで問題ないか

大変失礼いたしました
提示していただいたコードの中に、私の記載ミスによる致命的なURLの間違いが1箇所ありました
具体的には、コードの下部(4. Googleスライドのエクスポート機能…)の行で、誤って https://google.com と記述してしまっていました
Googleスライドのデータをエクスポートする正しいURLは、https://docs.google.com/presentation/d/ です
今回は最初からPDFではなく「PNG」で綺麗に切り出した上で、Googleスライドの仕様に合わせた正しいURLに変換してJPEG保存する、最も確実で安全な完全版コードを再構築しました
・・・そのGASを表示

(それでもエラーが発生、JPEG変換がエラーを引き起こしている可能性があるため)
JPEGに変換せずにPNGで出力したい

それであれば、途中でGoogleスライドを新規作成して変換するような複雑な迂回処理(エラーの原因になりやすい処理)がすべて不要になるため、コードが非常にシンプルになり、実行スピードも大幅に高速化します
以下のコードをスプレッドシートの「拡張機能」>「Apps Script」に貼り付けて実行してください。
・・・そのGASを表示

(それでもエラーが発生)
「画像の取得に失敗しました」とのエラーメッセージが出る

そのメッセージが表示されたということは、コード自体は最後まで動いているものの、Googleのサーバーが画像(PNG)の生成リクエストを拒否(エラー)している状態です
この現象が起きる原因の 9割以上は「範囲指定(結合セルを含む)」か「シート名・IDの不整合」 によるものです。原因を特定し、確実に動くようにするために、以下の 3つの対策・確認 を順番にお試しください
・対策1:最も確実な「今選択している範囲」を自動取得するコードに変える
・対策2:エラーの原因になりやすい「チェックポイント」の確認(結合セルの有無など)
・対策3:エラー番号(詳細)を確認する

(エラー番号を含むログを貼り付け)

詳細なログのご提示、ありがとうございます!
原因が完全に特定できました
ログの 「現在、ファイルを開くことができません。アドレスを確認して、もう一度試してください。」 というメッセージは、Google側が 「そのスプレッドシートが見つからない、またはURLの形式が正しくない」 と判断したときに返す特有のエラー画面です
原因は、GoogleスプレッドシートのURL(ss.getUrl())を書き換える処理にあります
お使いのスプレッドシートが、「共有ドライブ」の中にある場合や、URLの末尾が edit#gid=0 ではなく edit?gid=0 やその他のパラメータ(edit?usp=sharing など)で終わっている場合、従来の置換コード(.replace(/edit$/, ''))がうまく機能せず、デタラメなURLが生成されてしまっていました
このURL生成バグを根本から修正し、共有ドライブやどんな特殊なURL環境でも確実に100%動く「決定版」のPNG出力コードを作成しました
・・・そのGASを表示

(それでもエラーが出るので、エラーメッセージを貼り付け)

何度もコードを貼り付け直していただいているにもかかわらず、全く同じエラー(https://google.com1msE4apt…)が出続けてしまう原因が判明しました
これはコードの問題ではなく、Google Apps Script(GAS)のエディタが「古い状態のコード」を記憶してしまっており、画面上の見た目だけが新しくなっている現象(キャッシュバグ)です
GASのエディタでは、全消去して貼り付け直しても、裏側で古いコードが実行されてしまうことが稀にあります。このバグを根本から完全にリセットして確実に動かすため、以下の「3つの手順」を上から順番に試してください
・手順1:古いスクリプトファイルを削除して新しく作り直す
・手順2:マニフェストファイル(appsscript.json)を確認する(念のため)
・手順3:新しく作成したファイルに貼り付けるコード
・・・そのGASを表示

(それでもエラーが出るので、エラーメッセージを貼り付け)

何度もファイルを削除して貼り付け直していただいているにもかかわらず、全く同じエラー(しかも行番号まで「コード.gs:42」と同じ)が出続ける原因が完全に分かりました
原因は、お使いのGoogleスプレッドシート自体のURL(ID)が特殊な状態になっているか、設定した「GoogleドライブのフォルダID」の入力場所に問題があるかのいずれかです。GASは内部で ss.getId() という命令を使って、あなたのスプレッドシートのIDを自動的に取得しています
しかし、エラーログを見ると、なぜかその手前に https://google.com が自動的に合体してしまっています
コード上に google.com と書いていなくてもこの現象が起きる場合、GASシステム側がスプレッドシートの場所を誤認している状態です
この問題を完全に回避するため、自動取得(ss.getId())を一切やめて、URLをすべて手動で直接指定する「最終解決版コード」を作成しました
・・・そのGASを表示

・・・・・・・・・

・・・・・・・・・・・・
・・・・・・・・・・・・
・・・こんなやり取りを3時間を続けたあげく、断念しました。
これとまったく同じようなやり取りを他の作業(株価チャートの陽線と陰線に色塗りする)でも経験しました。
このちくはぐなやりとり、一体何が悪かったのでしょうか。
2. うまくいった自動化の例
うまくいかなかった点を検証する前に、うまくいった作業の自動化の例も紹介します。
以下は、株価チャート作成のための作業シートです。
このシートでは以下の入出力を行います。
①に240月分の株価データを入力
②で直近12年分の年足株価チャートを出力

今回、自動化を試みたのは次の2点です。
① 入力セルのデータクリア
ここで240月分の入力セルを用意していますが、新しく株価データを入力する際に事前にデータをクリアしておかないと、新しい株価データが240月に満たない場合に古いデータが残ってしまいます。非常に単純な作業であるものの、一々画面を240行目までスクロールさせてセル範囲を選択するのは結構面倒くさい。
② 株価チャートの縦軸の調整
デフォルトで縦軸の最小値は0円に設定されている(下記イメージ)。最小値をもっと大きな値を設定することで、株価の変動を強調したい。手動で最小値を設定することは可能であるが、一々グラフの詳細設定画面を開いて値を入力するのは面倒くさい。

↓

この2点に関しては、生成AIが示したコード(GAS)を入力することでうまくいきました。
どちらもコード自体はそれほど複雑ではないものの、GASに詳しくない筆者が一から調べながら書くことを考えると相当な時間短縮になりました。
ちなみに、作業画面上の「データクリア」「グラフの更新」と書かれたボタンを押すと、それぞれのGASが起動します。
3. 雑感
それでは実際に生成AIを使ってみての感想です。
① できないものは生成AIでもできない
うまくいった自動化作業「特定のセル範囲のデータ消去」「グラフの縦軸の調整」は、Google Spreadsheetの機能を用いて手作業で可能なことです。プログラミング言語を知って入ればたやすくコード化できます。そして生成AIの便利なのは、言語を知らなくても完成したコードを準備してもらえるところです。
一方、「画面の一部をスクショし、JPEG形式で保存する」「チャートの陽線・陰線に色塗りする」といった機能はGoogle Spreadsheetには(調べた限りでは)存在しないか制限がかけられています。機能がない以上は、生成AIがいかに賢くとも、GASをいかに駆使しようともできるわけがありません。できるようにするためにはSpreadsheet側で機能拡張し、それに対応するGASを用意してもらうしかありません。
② 生成AIの回答は自らが考えて作成したものではなく責任も持たない
今回もっとも気になったのは、生成AIが提示するコードがことごとくエラーを発生させていたことです。しかも、問いただすたびに今度こそ完全版と妙に自信たっぷりにもかかわらずです。生成AIからの回答をみると右に引用元を載せています(青枠の部分)。

すなわち、生成AIは自らコードを考え出したわけではなく、誰かが作ったコードを転載しているわけです。転載自体は問題ないとしても、そのコードが機能するかを責任もって事前検証してもらいたいところです。検証の結果、エラーが出ないものだけを紹介する、あるいは対応不能と回答してくれれば3時間も費やさずに済みました。
それでも、今回はコードという実行してすぐに正確性が判明するものなので被害は少なかったといえます。生成AIからの回答の大部分はすぐには正確性がわからず、後から不正確がゆえに被害が発生するということがあります。例えば先日、プロ野球監督の娘が父親の暴力行為を生成AIへ問い合わせたところ、児童相談所への相談を薦められ、結果的に本人が望まぬ形でマスコミを騒がすという事件が起きています。筆者の場合も、プロ野球監督の娘の場合も生成AIは回答に責任を一切負っていません。
③ 「生成AI」の次は「社内AI」ではないか
今回の経験を通じて、生成AIによりもたらされる知識よりも、むしろ生成AIの活用方法の方が有用性の高い知識ではないかと思いました。
AIの本質の一つは「集団内の知の共通基盤」と考えます。ある人が得た経験を他の人と共有する、集団内で合意された情報処理や意思決定を自動化する等々です。これまでのAI開発が限定的なデータ基盤上で行われたていたところ、生成AIはその基盤を世界中のインターネット空間へと大きく拡大したことで飛躍的な革命を起こしています。筆者のブログサイトにも相当数の外国からのアクセスがあります。それも米中だけではなくあまり名前を聞かないような国も含まれています。外国の方が日本語のブログを読んでいるとは思えないので、生成AI用のボットなのでしょう。世界中のマイナーな情報に容易にアクセスできるようになったことは生成AIの大きな功績です。
一方で、誰もが同じように同じ情報にアクセスできるということは、それだけでは競争優位にならないことを意味します。また生成AIの提供する情報には信頼性が保証されないことを先に述べました。企業においては、社外には機密にすべき知的財産があり、それがその企業の強みとなります。この知的財産は、単なる一般的な知識ではなく、これまでの企業活動に伴う成功・失敗体験により信頼性を裏付けされた経験知です。経験知をより発揮するには、これまでに積み重ねられた経験知を社内共有することはもちろん、経営理念・経営方針にそった形で蓄積されることも必要です。これを補助するのが「社内AI」となります。例えば、コールセンターにおける顧客との会話のやり取りや最終的な顧客の反応は、その企業における経験です。回答の難しい質問に対し顧客が満足するような対応ができれば、それは共有すべき貴重な経験です。そしてその経験を経験知として活かすためには、顧客との一連の対応や顧客の反応が利用しやすい形で記録され、それらの中から貴重なものを拾い上げ、内部で共有する、という一連の仕組みが必要となります。この仕組みをまわすには膨大なデータを取り扱うため作業負荷が高くなりますが、AIであれば効率的で人手をかけずに運用することが可能です。
「生成AI」がオープンな全世界共通の基盤に立脚しているのに対し、「社内AI」はクローズな企業内の基盤に立脚するものです。いまの生成AIブームが一巡した後は、社内AIに注目が集まる可能性があると考えます。
④ AIは人間のニーズを理解できるのか
生成AIの出す回答は自らが考えたのではなく、誰か人間がインターネット上に載せた回答を転載している、と先に述べました。自分が知りたいと思ったことは、たいてい誰かしら他人も知りたいと思って回答を用意しているので、その回答を入手できるというのはありがたいことです。しかし、今回のように特殊なニーズに対してはそれにぴったりな回答を得られないこともあります。そうなるとAIには、人間の多種多様なニーズを先読みしてもらい、それぞれに対する回答を用意してもらいたいところです。
それではAIはどれだけ人間のニーズをよむことができるのか? 生成AI技術に詳しいわけではないのですが、得意分野と苦手分野がはっきりしているように思います。苦手にしているであろう分野は人間の感性にかかわるところ、例えば「見た目のよいグラフを作成する」といったところです。人間がグラフを作成するのは、多数の数値データをみてもその特長がよく分からないので視覚化するためです。ほとんどの人が直感的に理解できる数値データ数はせいぜい10個程度でしょう。人間は数値データの処理にそれほど長けているわけではなく、アナログな視覚情報の処理の方が断然得意です。一方のAIは当然のごとく数値データ処理が大得意です。逆に画像のようなアナログ情報はデジタル情報に変換しないと処理ができません。もしAIに意識があったとして、人間とは逆にグラフを見ても理解が難しいものであり、元となる数値データの方が頭に入りやすいと感じるでしょう。そんなAIに「見た目のよい」グラフをお願いするとすれば、人間の方で「見た目がよい」とはどのような概念か定義をしてあげる必要があります。人間でもやらされる仕事はたいしてパフォーマンスは上がりません。とてもAIが人間のニーズを先回りして、主体的に創造的な回答を準備できるとは思えないのです。

