AIがあればVBAはできる:セルに絵文字を入れる
生成AIの進歩が凄まじいです。
AIがあればVBAなんてスクリプトだし簡単に作成できるでしょ。
お題の趣旨は、
これだけです。
VBA10大躓きポイントのページ内目次
𝕏での出題

AIを使って以下のVBAを完成させて。
・A1セルに「🙇♂️」を入れるVBA
※絵文字を別セルに入れておいたり外部テキスト利用は禁止。純粋にVBAコードだけで実現させる。
※再現性のある(他の絵文字でも使える)プロンプトと完成したVBAコードを引用ポストで回答して下さい。
Gemini 2.5 Flash(experimental) での作成過程
AIの回答 | プロンプト | |
![]() ※絵文字を別セルに入れておいたり外部テキスト利用は禁止。純粋にVBAコードだけで実現させる。 |
||
![]() この絵文字は複数のUnicode文字を組み合わせたシーケンスであるため、それぞれの文字のUnicodeコードポイントを取得し、ChrW関数を使って結合することで実現できます。
コードの説明:
|
||
![]() ![]() ![]() 2枚目は実行したときのエラー |
||
![]() ![]() お送りいただいた画像を確認しました。 1枚目のVBEに貼り付けたコード、2枚目の実行時エラー「プロシージャの呼び出し、または引数が不正です。」から、原因はChrW(&H1F647)の部分にあると考えられます。 U+1F647 のサロゲートペアは、高位サロゲートが U+D83D、低位サロゲートが U+DE47 です。 そして、「🙇♂️」は、「🙇」 + ZWJ (U+200D) + 「♂」 (U+2642) なので、以下のようになります。
この修正されたコードで試してみてください。サロゲートペアを正しく指定することで、「プロシージャの呼び出し、または引数が不正です。」のエラーを回避できるはずです。 |
||
![]() ![]() ![]() 2枚目は実行後のA1セル:文字が分割されてしまっている |
||
![]() ![]()
|
このまま続けてAI自身に気付かせるのは、さすがに無理そうですね。
文字コード
サロゲートペア
異体字セレクタ
絵文字対応フォント
これらをプロンプトで伝えないと先に進まないようです。
ただし、そもそも私は完成のVBAコードがわかっているので、答えを知った上で誘導しているだけにも思えてしまいます。
そういうことなので、もう真っすぐに完成プロンプトを目指すことにしました。
独自に考えたプロンプト作成のチェックリスト/テンプレート
プロンプト作成のチェックリスト/テンプレート
- 目的/ゴール
- 役割/ペルソナ
- 状況/背景/使用シーン
- 指示内容/依頼内容
- 含めるべき要素
- 除外する要素(ネガティブ制約)
- 出力形式/構成
- トーン/文体
- 制約条件
- 参考資料/出力例
プロンプト作成で注意すべき点
- 複雑なタスクは分解(段階的なプロンプト)
- 繰り返し調整する前提で試す
- 必要に応じて思考のプロセスを指示
内容によって不要な項目は削除します。
場合によって項目の追加もしてください。
完成プロンプトを目指して
プロンプトの初期案
A1セルに「🙇♂️」を入れるVBAを作成。
・絵文字の文字コードを調べる。
・絵文字は文字コードから文字を作る。
・この絵文字はサロゲートペアです。
・この絵文字は異体字セレクタも含んでいます。
・A1セルは絵文字に対応したフォント("Segoe UI Emoji")に設定する。
・日本語でコメント(先頭に「'」)を入れる。
・インデントはブロック構文内を4文字下げる。
・VBAのコメントには絵文字を入れない。
そこで、このプロンプトの改善をAIに手伝ってもらったりしながら完成を目指しました。
以下はAIが出してきた改善案の一例です。

これを何度か繰り返してプロンプト作成を進めました。
これはエクセルのバグっぽい挙動ですが、先にフォントを設定しておかないとうまく絵文字が表示されないようです。

これの対処もプロンプトには書き加えています。
完成したプロンプト
A1セルに「🙇♂️」を入れるVBAを作成。
Unicodeや、サロゲートペア、異体字セレクタ・絵文字スタイル指定子などに関する知識の確認。
VBAコードを作成では以下の点に注意する。
・絵文字の文字コードを調べる。
・絵文字は文字コードから文字を作る。
・この絵文字はサロゲートペアです。
・この絵文字は異体字セレクタ・絵文字スタイル指定子を含みます。
・ChrW関数は2バイトの16進数で指定する関数です。
・絵文字を入れる前に出力セルは絵文字に対応したフォント("Segoe UI Emoji")に設定する。
VBA記述では以下の規約を守る。
・日本語でコメント(先頭に「'」)を入れる。
・VBEはUTF-8に対応していないのでコメントはSJISのみで記述する。絵文字は使用禁止。
・SubやFunctionの先頭には概要を記述する。
・インデントはブロック構文内を4文字下げる。
・VBAコードのをテキストとして出力する。
・Subプロシージャとして定義する。
完成したプロンプトの実行結果
VBAコード部分のみ掲載(解説は省略)します。
Gemini 2.5 Flash
' 目的: A1セルに絵文字「🙇♂️」を挿入する
' 概要:
' このプロシージャは、A1セルのフォントを絵文字対応フォントに設定した後、
' Unicodeのサロゲートペア、異体字セレクタ、ゼロ幅接合子、男性記号から成る
' 絵文字「🙇♂️」を構築し、A1セルに代入します。
' ChrW関数を使用して、指定された16進数のUTF-16コード単位から文字を作成します。
Sub InsertBowingManEmoji()
' 変数宣言
Dim targetCell As Range
Dim emojiString As String
' 対象とするセル (A1セル) を設定する
' ここではアクティブなシートのA1セルを指定します。
Set targetCell = ActiveSheet.Range("A1")
' 絵文字を正しく表示するために、セルのフォントを絵文字対応フォントに設定します。
' "Segoe UI Emoji" はWindowsで広く使われる絵文字フォントです。
' 他のOSや環境では異なるフォントが必要になる場合があります。
On Error Resume Next ' フォントが存在しない場合のエラーを無視
targetCell.Font.Name = "Segoe UI Emoji"
On Error GoTo 0 ' エラー処理を元に戻す
' 絵文字「🙇♂️」は、複数のUnicodeコードポイントと制御文字の組み合わせで構成されます。
' これらのコードポイントは、UTF-16エンコーディングにおいて
' 1つまたは複数の16ビットコード単位として表現されます。
' ChrW関数は、この16ビットコード単位(10進数または16進数で指定)に対応する文字を返します。
' 絵文字「🙇♂️」の構成要素 (UnicodeコードポイントとUTF-16コード単位 16進数):
' 1. 「🙇」(Person Bowing Deeply): U+1F647
' これはBMP外のコードポイントであるため、サロゲートペア (D83D DC47) として表現されます。
' - 高位サロゲート (High Surrogate): U+D83D (16進数 D83D)
' - 低位サロゲート (Low Surrogate): U+DC47 (16進数 DC47)
' 2. 「」(異体字セレクタ/絵文字スタイル指定子): U+FE0F
' この文字が絵文字スタイルで表示されることを明示します。(16進数 FE0F)
' 3. 「」(ゼロ幅接合子 ZWJ): U+200D
' 複数の文字を組み合わせて新しい絵文字を形成するために使用される非表示文字です。(16進数 200D)
' 4. 「♂」(Male Sign): U+2642
' 男性を示す記号です。(16進数 2642)
' ChrW関数を使用して、これらのUTF-16コード単位を文字列として結合します。
' 各&hXXXXは16進数リテラルを表します。ChrW関数は2バイト(16ビット)の値を引数にとります。
' サロゲートペアの高位サロゲート (U+D83D)
emojiString = ChrW(&HD83D)
' サロゲートペアの低位サロゲート (U+DC47) を結合
emojiString = emojiString & ChrW(&HDC47)
' 異体字セレクタ/絵文字スタイル指定子 (U+FE0F) を結合
emojiString = emojiString & ChrW(&HFE0F)
' ゼロ幅接合子 ZWJ (U+200D) を結合
emojiString = emojiString & ChrW(&H200D)
' 男性記号 (U+2642) を結合
emojiString = emojiString & ChrW(&H2642)
' 結合してできた絵文字文字列をA1セルに代入します。
targetCell.Value = emojiString
' オブジェクト変数の解放
Set targetCell = Nothing
End Sub
' サロゲートペアの低位サロゲート (U+DC47) を結合
emojiString = emojiString & ChrW(&HDC47)
ここの文字コードが間違っていますね。
DC47 → DE47
それ以外は特に問題はありません。
・VBEはUTF-8に対応していないのでコメントはSJISのみで記述する。絵文字は使用禁止。
これが守られていないです。
何故でしょう・・・
Gemini 2.5 Pro
Sub InsertEmojiManBowing()
' 概要: ExcelのA1セルに絵文字「🙇♂️」(土下座する男性)を挿入します。
' この処理では、絵文字のUnicode構成要素を理解し、
' サロゲートペア、ZWJ(ゼロ幅接合子)、および絵文字スタイル指定子を
' ChrW関数を用いて文字列として構築します。
' また、挿入前にセルのフォントを絵文字表示に適したフォントに設定します。
Dim targetCell As Range
Dim emojiString As String
Dim highSurrogate As String
Dim lowSurrogate As String
Dim personBowing As String
Dim zeroWidthJoiner As String
Dim maleSign As String
Dim emojiStyleSelector As String
' 処理対象のセルを設定 (例: アクティブシートのA1セル)
On Error Resume Next ' シートが存在しない場合などのエラーをスキップ
Set targetCell = ThisWorkbook.Sheets(1).Range("A1")
If targetCell Is Nothing Then
' アクティブシートが存在しない、または特定できない場合、新しいシートを追加して試みる
Set targetCell = ThisWorkbook.Worksheets.Add().Range("A1")
If targetCell Is Nothing Then
MsgBox "対象セルを設定できませんでした。", vbExclamation
Exit Sub
End If
End If
On Error GoTo 0 ' エラーハンドリングを元に戻す
' 出力セルに絵文字対応フォントを設定
' Windows環境では "Segoe UI Emoji" が代表的な絵文字フォントです。
targetCell.Font.Name = "Segoe UI Emoji"
' 絵文字「🙇♂️」のUnicode構成要素:
' 1. 🙇 (PERSON BOWING DEEPLY) : U+1F647
' この文字はUnicodeの補助多言語面(SMP)にあり、UTF-16ではサロゲートペアで表現されます。
' 上位サロゲート (High Surrogate): U+D83D
' 下位サロゲート (Low Surrogate) : U+DE47
' 2. ? (ZERO WIDTH JOINER - ZWJ) : U+200D
' 複数の絵文字を結合して一つの絵文字として表示させるために使用します。
' 3. ♂ (MALE SIGN) : U+2642
' 男性記号です。
' 4. ? (VARIATION SELECTOR-16 - VS16) : U+FE0F
' 直前の文字(この場合はMALE SIGN)を絵文字スタイルで表示するよう指定します。
' これがないとテキストスタイルで表示されることがあります。
' ChrW関数は、0から65535までの数値を引数に取り、
' 対応するUnicode文字(UTF-16のコードユニット)を返します。
' 16進数で指定する場合、2バイト(4桁)の範囲です。
' U+10000以上の文字はサロゲートペアを使用し、ChrWを2回使って表現します。
' U+1F647 (🙇 - PERSON BOWING DEEPLY) の構築
' 上位サロゲート (&HD83D)
highSurrogate = ChrW(&HD83D)
' 下位サロゲート (&HDE47)
lowSurrogate = ChrW(&HDE47)
personBowing = highSurrogate & lowSurrogate
' U+200D (? - ZWJ)
zeroWidthJoiner = ChrW(&H200D)
' U+2642 (♂ - MALE SIGN)
maleSign = ChrW(&H2642)
' U+FE0F (? - VARIATION SELECTOR-16)
emojiStyleSelector = ChrW(&HFE0F)
' 各要素を結合して最終的な絵文字文字列を作成
' 🙇 + ZWJ + ♂ + VS16 => 🙇♂️
emojiString = personBowing & zeroWidthJoiner & maleSign & emojiStyleSelector
' セルに絵文字文字列を挿入
targetCell.Value = emojiString
' 後片付け
Set targetCell = Nothing
MsgBox "A1セルに絵文字「🙇♂️」を挿入しました。" & vbCrLf & _
"フォント: Segoe UI Emoji" & vbCrLf & _
"構成Unicode: U+1F647 U+200D U+2642 U+FE0F", vbInformation
End Sub
Sheets(1).Range("A1")の存在確認はさすがに不要でしょwww
そこはご愛敬としても、ちょっと丁寧すぎと言いますか長すぎwww
それにしても、なぜコメントに絵文字を出力しているのでしょう。
ChatGPT
' 概要:
' このマクロは、セルA1に「🙇♂️」という絵文字(おじぎをする男性)を入力し、
' フォントを「Segoe UI Emoji」に設定して絵文字が正しく表示されるようにします。
' この絵文字は、サロゲートペアおよび異体字セレクタ・絵文字スタイル指定子を含みます。
Sub InsertBowEmoji()
' セルA1を指定
Dim targetCell As Range
Set targetCell = ThisWorkbook.Sheets(1).Range("A1")
' セルのフォントを絵文字対応フォントに設定
targetCell.Font.Name = "Segoe UI Emoji"
' 「🙇♂️」の構成(Unicodeコードポイント):
' 🙇 U+1F647(人がおじぎをしている)
' → サロゲートペア: &H1F647 = ChrW(&HD83D) & ChrW(&HDE47)
' ♂ U+2642(男性記号)+U+FE0F(絵文字スタイル指定子)
' → 男性記号: &H2642 = ChrW(&H2642)
' → 異体字セレクタ: &HFE0F = ChrW(&HFE0F)
' 絵文字を結合してセルに入力
targetCell.Value = ChrW(&HD83D) & ChrW(&HDE47) & ChrW(&H200D) & ChrW(&H2642) & ChrW(&HFE0F)
End Sub
コメントに絵文字を出力していること以外は良いですね。
Claude
Sub 絵文字をA1セルに挿入()
' 概要: お辞儀をする男性の絵文字「🙇♂️」をA1セルに挿入するプロシージャ
' この絵文字は複数のコードポイントから構成されているサロゲートペア絵文字です
' 構成:
' - 基本文字: 🙇 (U+1F647) - お辞儀をする人
' - ZWJ結合子: U+200D - 後続の文字と結合することを示す
' - 男性記号: ♂ (U+2642) - 男性を表す記号
' - 異体字セレクタ: U+FE0F - 絵文字スタイル指定子
' A1セルを選択
Range("A1").Select
' セルのフォントを絵文字対応フォントに設定
With Selection.Font
.Name = "Segoe UI Emoji"
.Size = 14
End With
' サロゲートペア絵文字「🙇♂️」を文字コードから構築
Dim emojiString As String
' お辞儀をする人 (U+1F647) - サロゲートペアとして表現
' High surrogate: D83D, Low surrogate: DE47
emojiString = ChrW(&HD83D) & ChrW(&HDE47)
' ZWJ結合子 (U+200D)
emojiString = emojiString & ChrW(&H200D)
' 男性記号 (U+2642)
emojiString = emojiString & ChrW(&H2642)
' 異体字セレクタ/絵文字スタイル指定子 (U+FE0F)
emojiString = emojiString & ChrW(&HFE0F)
' A1セルに絵文字を設定
ActiveCell.Value = emojiString
' 列幅を自動調整
Columns("A:A").AutoFit
End Sub
これもコメントに絵文字を出力していること以外は良いですね。
いろいろプロンプトを工夫してみたのですが効果ありませんでした。
日本語のコメントを入れるということと絵文字禁止が相反してしまうのでしょうか・・・
時に正しいVBAになったり、少しだけ間違ったVBAになったり・・・
なかなか生成AIでのVBA開発は難しいものですね。
生成AIの結果が安定しないのは、いろいろな結果を受け取れるという利点はあるものの、再現性が低いというのは実用としてはネックになる場合もありそうです。
筆者が書いたVBAコード
端的に必要な部分だけでわかりやすいVBAにしておきました。
Sub EmojiIntoA1()
Dim sEmoji1 As String: sEmoji1 = WorksheetFunction.Unichar(&H1F647) 'お辞儀の基本文字
' sEmoji1 = ChrW(&HD83D) & ChrW(&HDE47) '↑これと同じ
Dim sEmoji2 As String: sEmoji2 = ChrW(&H200D) 'ゼロ幅接合子
Dim sEmoji3 As String: sEmoji3 = ChrW(&H2642) '♂
Dim sEmoji4 As String: sEmoji4 = ChrW(&HFE0F) '異体字セレクタ・絵文字スタイル
With ActiveSheet.Range("A1")
.Font.Name = "Segoe UI Emoji"
.Value = sEmoji1 & sEmoji2 & sEmoji3 & sEmoji4
End With
End Sub
同じテーマ「生成AI活用研究」の記事
AI(Gemini)とエクセル数式対決 その1
AI(Gemini)とエクセル数式対決 その2
ダウンロードフォルダのExcelファイルブロック解除
AIがあればVBAはできる:セルに絵文字を入れる
Geminiと100本ノック 1本目:セルのコピー
Geminiと100本ノック 2本目:セルのコピー
Geminiと100本ノック 3本目:セルの消去
Geminiと100本ノック 4本目:セルの消去
Geminiと100本ノック 5本目:セルの計算
Geminiと100本ノック 6本目:セルに計算式
Geminiと100本ノック 5本目:セルの計算
新着記事NEW ・・・新着記事一覧を見る
第5章:AI×VBAでつまづかない!トラブルシューティングとAIとの付き合い方
|生成AI活用研究(2025-05-20)
第4章:【事例で学ぶ】AIとVBAでExcel作業を劇的に効率化する!
|生成AI活用研究(2025-05-20)
第3章:AIを「自分だけのVBA先生」にする!質問・相談の超実践テクニック|生成AI活用研究(2025-05-19)
第2章 VBAって怖くない!Excelを「言葉で動かす」(超入門)|生成AI活用研究(2025-05-18)
第1章:AIって一体何?あなたのExcel作業をどう変える?(AI超基本)|生成AI活用研究(2025-05-18)
AI時代のExcel革命:AI×VBAで“書かない自動化”超入門|生成AI活用研究(2025-05-17)
Geminiと100本ノック 23本目:シート構成の一致確認|生成AI活用研究(5月16日)
AIが問う出版の未来は淘汰か進化か:AIと書籍の共存の道とは|生成AI活用研究(2025-05-16)
Geminiと100本ノック 22本目:FizzBuzz発展問題|生成AI活用研究(5月15日)
すぐに使える!生成AI プロンプト作成 実践ガイド|生成AI活用研究(2025-05-15)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.ひらがな⇔カタカナの変換|エクセル基本操作
6.RangeとCellsの使い方|VBA入門
7.メッセージボックス(MsgBox関数)|VBA入門
8.セルのクリア(Clear,ClearContents)|VBA入門
9.FILTER関数(範囲をフィルター処理)|エクセル入門
10.条件分岐(Select Case)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。