プロンプトの構造を考える:ハッシュマークとトリプルクォートを活用
ハッシュマークとトリプルクォートを使用して生成AIにプロンプトを送る方法を考えます。
シートはもともと、以下のように、B列に地名が、C列に名前が記入されています。
[ 画像1. 元のシート ]
ChatGPT に以下のプロンプト(生成AIに指示するための文章)を送ってみました。
[プロンプト]以下の #処理 を実現するVBAのコードを書いてください。
#前提条件:
"""
•B2からB4には地名が記入されている。
•C2からC4には氏名が記入されている。
"""
#処理:
"""
•B2からB4を検索し、「東京」という地名を探す。
•「東京」が見つかったら、その右隣の氏名の背景を黄色にする。見つからなかったら、「東京は見つかりませんでした。」と表示する。
"""
#制約条件:
"""
•LibreOfficeのVBAでも動作するように、オブジェクトはできるだけ使用しないで、シンプルな構成で記述すること。
"""
-----
ChatGPT は以下のコードを書いてくれました。
Sub HighlightTokyo()
Dim ws As Object
Dim i As Integer
Dim found As Boolean
found = False
' シートを取得
Set ws = ThisComponent.Sheets(0) ' 1枚目のシートを参照
' B2からB4を検索
For i = 2 To 4
 If ws.getCellByPosition(1, i - 1).String = "東京" Then
' 隣のセル(C列)の背景色を黄色にする
ws.getCellByPosition(2, i - 1).CellBackColor = RGB(255, 255, 0)
found = True
 End If
Next i
' 見つからなかった場合のメッセージ
If Not found Then
 MsgBox "東京は見つかりませんでした。"
End If
End Sub
なお、1行目の「Option VBASupport 1」という記述だけは私が書きました。
このコードを実行すると、シートの「東京」の右隣の「スズキ」に、下図のように色が付きました。
[ 画像2. 実行結果 ]
#プロンプトで指定した通り、東京の右隣のセルに色が付きました。ただ、プロンプトでは「黄色」と書きましたが、実行結果は水色に見えます。コードでは「RGB(255, 255, 0)」となっているので黄色になってもよさそうですが、結果は水色に見えます。原因は不明ですが、色が変わったので、コードの動作確認はここまでとします。(環境による違いの可能性がある。)
LibreOffice の Calc は Excel とはちょっと使い心地が違います。個人的には Excel のほうが使いやすいですが、無料で利用できる LibreOffice を私はプライベートでは使用しています。
プロンプトの構成このプロンプトは、以下のような構成で書いています。
- データは、トリプルクォート(""")で区切る。
- データの見出しには、ハッシュマーク(#)を付ける。
- 見出しの末尾には、コロン(:)を付ける。(だたし、本文内に見出し文字列を記入する場合には、付けない。)
- 指示文は、箇条書きで記述する。
- データの範囲(どこからどこまでが1つの情報のまとまりなのか)を明確にすること。:
トリプルクォートで囲んだ部分を1つのブロックとすることで、プロンプト内の情報の境界が明確になる。さらに、ハッシュマークを利用した見出しで、そのブロックに名前を付けることができる。
構成の形を図示すると以下のようになります。
#見出し1:
"""
•指示文1-1
•指示文1-2
"""
#見出し2:
"""
•指示文2-1
•指示文2-2
"""
ハッシュマーク(#)とトリプルクォート(""")を使用してプロンプトを書いてみました。「どこからどこまでがデータのまとまりなのか」を示すために、ハッシュマークやトリプルクォートなどの記号を使用しています。また、本文の中であるデータに言及するとき、どのデータを指しているのかが分かりやすくなると思います。
参考