アプリを自分で作ってみようと思った時、AIに送るプロンプトの生成で悩んだことはないですか?
AIの進歩には素晴らしいものがあります。
チャットGPが出現ですぐに有料会員($20/月)のユーザー登録をしてから数年経ちました。今年の6月には新たなAIとして従来のBardからGemini (ジェミニ)に進化し、さらにGemini CLIもコード作成に適したツールとりました。
今年の6月から頻繁に使い始めているのですが、「これはやっぱりもの凄い!」と痛感しております。今まではコツコツとコードを組み上げてのですが、このような生成AIが誕生したおかげで制作時間が大幅に短縮されました。

半年ほど前からコードを作成する時には、ChatGPT、Gemini、Copilotなどをいろいろ試しながらプログラムを作成しています。
今回はエクセルのVBAを使って色々なアプリを作ってみようと考えましたが、その前に簡単にプロンプト生成が出来るアプリをAIを使って作ってみました。
以下にそのコードをアップしましたので必要な方はこれをコピーしてお使いください。使い方は下記のコードをVS Codeに貼り付け、パソコン上のどこかに保存したら、Wクリックで動き出します。VS Codeは Microsoftのコード作成ツールなので無料でダウンロードできます。URLは下記に貼り付けておきます。
ダウンロード先:https://azure.microsoft.com/ja-jp/products/visual-studio-code
375行の長文ですが、コピーアイコンで一発コピーできます。
インプットボックスには予め私が考えたプロンプトがサンプルとして入っておりますが、お使いのユーザーが自由に変更することもできます。
改良を重ねることによって、画面下部にある3つのボタンでプロンプトのコピペ作業が簡単になりました。
ボタンの内容は、「テンプレート生成」、「クリップボードにコピー」、「マークダウン保存」の3つがあります。
「テンプレート生成」はこのツールで入力したテキストをテンプレートとして、自動生成します。

次に、「クリップボードにコピー」のボタンを押すと、今生成されたテキストがクリップボードに格納され、そのクリップボードからお使いの生成AIのプロンプトとして送信することでクオリティの高いコード生成ができます。
まずは、コピペしてお使いください。
いくらAIを使ってコードを作成するとしても長時間の作業になります。眼もかなり疲れてきますので「ナイトモード」も設置しました。
このようなコードをサイト上にアップすると、自分の仕事が少なくなってくるのは判っていますが、便利なモノは便利なので気に入って頂けましたら皆さんもどうぞお使いください。また使ってみての感想は、私のFacebookへ投稿していただければありがたいです。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>AI Excel VBS/VBA 用プロンプト生成ツール Vol.1.5</title>
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH"
crossorigin="anonymous"
/>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css"
integrity="sha512-SnH5WK+bZxgPHs44uWIX+LLJAJ9/2PkPKZ5QiAj6Ta86w+fsb2TkcmfRyVX3pBnMFcV7oQPJkl9QevSCWr3W6A=="
crossorigin="anonymous"
referrerpolicy="no-referrer"
/>
<link
href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700;800&display=swap"
rel="stylesheet"
/>
<style>
:root {
--bg-light: linear-gradient(to bottom left, #e7f5ff 0%, #ffffff 100%);
--text-color-light: #212529;
--card-bg-light: #ffffff;
--card-header-bg-light: #00796b;
--card-header-text-light: #ffffff;
--input-bg-light: #ffffff;
--input-text-light: #212529;
--input-border-light: #ced4da;
--bg-dark: linear-gradient(to bottom left, #1a202c 0%, #2d3748 100%);
--text-color-dark: #e2e8f0;
--card-bg-dark: #2d3748;
--card-header-bg-dark: #26a69a;
--card-header-text-dark: #ffffff;
--input-bg-dark: #1a202c;
--input-text-dark: #e2e8f0;
--input-border-dark: #4a5568;
--danger-red: #d32f2f;
--danger-red-dark: #ff6b6b;
--sidebar-w: 280px;
--sidebar-bg: rgba(255, 255, 255, 0.7);
--sidebar-bg-dark: rgba(26, 32, 44, 0.65);
--sidebar-border: rgba(0, 0, 0, 0.08);
--sidebar-border-dark: rgba(255, 255, 255, 0.12);
--sidebar-link: #0b1220;
--sidebar-link-dark: #e2e8f0;
--sidebar-active: rgba(0, 121, 107, 0.15);
--sidebar-active-dark: rgba(38, 166, 154, 0.22);
/* アイコン色彩 */
--icon-request: #0d6efd;
--icon-purpose: #ef4444;
--icon-req: #10b981;
--icon-lib: #f59e0b;
--icon-notes: #8b5cf6;
--icon-rules: #64748b;
--icon-checks: #a3e635;
--icon-extra: #eab308;
--icon-output: #06b6d4;
}
html, body {
height: 100%;
scroll-behavior: smooth;
}
body {
font-family: "Noto Sans JP", sans-serif;
background: var(--bg-light);
color: var(--text-color-light);
background-attachment: fixed;
display: flex;
flex-direction: column;
margin: 0; padding: 0;
transition: background-color 0.3s ease, color 0.3s ease;
}
body.dark-mode { background: var(--bg-dark); color: var(--text-color-dark); }
body.dark-mode .card { background-color: var(--card-bg-dark); border-color: var(--input-border-dark); }
body.dark-mode .card-header { background: var(--card-header-bg-dark); color: var(--card-header-text-dark); }
body.dark-mode textarea.form-control, body.dark-mode input.form-control { background-color: var(--input-bg-dark); color: var(--input-text-dark); border-color: var(--input-border-dark); }
header {
position: fixed; top: 0; left: 0; width: 100%; z-index: 2000;
background: #212529; box-shadow: 0 4px 12px rgba(0,0,0,0.15); padding: 1rem 0;
}
main { margin-top: 140px; position: relative; z-index: 100; }
.card { border: none; background-color: var(--card-bg-light); transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; }
.card:hover { transform: translateY(-5px); box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; }
.card-header { font-weight: bold; font-size: 1.1rem; background: var(--card-header-bg-light); color: var(--card-header-text-light); }
textarea.form-control, input.form-control { min-height: 80px; resize: vertical; }
#requirements { color: var(--danger-red); font-weight: 700; }
body.dark-mode #requirements { color: var(--danger-red-dark); font-weight: 700; }
.layout { display: grid; grid-template-columns: var(--sidebar-w) 1fr; gap: 18px; align-items: start; }
@media (max-width: 992px) { .layout { grid-template-columns: 1fr; } main { margin-top: 180px; } }
.sidebar {
position: sticky; top: 160px; z-index: 1020;
background: var(--sidebar-bg); border: 1px solid var(--sidebar-border); border-radius: 16px; padding: 14px;
backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px);
box-shadow: 0 12px 26px rgba(0, 0, 0, 0.12);
}
body.dark-mode .sidebar { background: var(--sidebar-bg-dark); border: 1px solid var(--sidebar-border-dark); }
.sidebar a.nav-link {
display: flex; align-items: center; gap: 12px; padding: 10px 14px; border-radius: 12px;
color: var(--sidebar-link); text-decoration: none; font-weight: 700; transition: all 0.2s ease;
}
body.dark-mode .sidebar a.nav-link { color: var(--sidebar-link-dark); }
.sidebar a.nav-link.active { background: var(--sidebar-active); }
.sidebar a.nav-link i { font-size: 1.1rem; width: 24px; text-align: center; filter: drop-shadow(0 2px 3px rgba(0, 0, 0, 0.1)); }
.icon-request { color: var(--icon-request); }
.icon-purpose { color: var(--icon-purpose); }
.icon-req { color: var(--icon-req); }
.icon-lib { color: var(--icon-lib); }
.icon-notes { color: var(--icon-notes); }
.icon-rules { color: var(--icon-rules); }
.icon-checks { color: var(--icon-checks); }
.icon-extra { color: var(--icon-extra); }
.icon-output { color: var(--icon-output); }
section.anchor { scroll-margin-top: 220px; }
.floating-action-group {
position: fixed; right: 20px; bottom: 20px; display: flex; align-items: center; gap: 12px; z-index: 3000;
opacity: 0; transform: translateY(20px); transition: all 0.4s ease; pointer-events: none;
}
.floating-action-group.show { opacity: 1; transform: translateY(0); pointer-events: auto; }
.btn-float {
display: flex; align-items: center; gap: 8px; padding: 10px 18px; border-radius: 50px;
font-weight: 700; color: white !important; box-shadow: 0 4px 15px rgba(0, 0, 0, 0.2); font-size: 0.9rem;
}
.btn-float-gen { background: linear-gradient(135deg, #0d6efd 0%, #0a58ca 100%); }
.btn-float-copy { background: linear-gradient(135deg, #198754 0%, #146c43 100%); }
.btn-float-dl { background: linear-gradient(135deg, #6c757d 0%, #495057 100%); }
.back-to-top {
display: flex; align-items: center; gap: 10px; padding: 10px 18px; border-radius: 50px;
font-weight: 800; color: #212529; text-decoration: none;
background: linear-gradient(135deg, #d1fae5 0%, #8be9fd 30%, #ff79c6 70%, #f1fa8c 100%);
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.15); font-size: 0.9rem;
}
.back-to-top i { background: white; padding: 5px; border-radius: 50%; width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; }
</style>
</head>
<body id="top">
<header>
<div class="container d-flex justify-content-between align-items-center text-white">
<h1 class="h3 mb-0">
AI Excel VBS 用プロンプト生成ツール<br>
<span style="font-size: 0.6em; font-weight: normal;">Vol.1.5 2025/12/25 <span style="opacity: 0.7;">Verified Edition</span></span>
</h1>
<div class="form-check form-switch fs-4" id="darkModeSwitch">
<input class="form-check-input" type="checkbox" id="darkModeToggle" />
<label class="form-check-label" for="darkModeToggle"><i class="fas fa-moon"></i></label>
</div>
</div>
</header>
<main class="container mb-5">
<div class="layout">
<aside class="sidebar">
<div class="sidebar-title mb-3"><i class="fas fa-list-ul me-2"></i>クイック目次</div>
<nav class="nav" id="sideNav">
<a class="nav-link" href="#sec-request" data-target="sec-request"><i class="fas fa-user-tie icon-request"></i> 依頼内容</a>
<a class="nav-link" href="#sec-purpose" data-target="sec-purpose"><i class="fas fa-bullseye icon-purpose"></i> 目的</a>
<a class="nav-link" href="#sec-req" data-target="sec-req"><i class="fas fa-list-check icon-req"></i> 仕様詳細</a>
<a class="nav-link" href="#sec-lib" data-target="sec-lib"><i class="fas fa-cogs icon-lib"></i> ライブラリ</a>
<a class="nav-link" href="#sec-notes" data-target="sec-notes"><i class="fas fa-comments icon-notes"></i> コメント</a>
<a class="nav-link" href="#sec-rules" data-target="sec-rules"><i class="fas fa-ruler-combined icon-rules"></i> ルール</a>
<a class="nav-link" href="#sec-checks" data-target="sec-checks"><i class="fas fa-check-double icon-checks"></i> 確認事項</a>
<a class="nav-link" href="#sec-extra" data-target="sec-extra"><i class="fas fa-paperclip icon-extra"></i> 補足情報</a>
<a class="nav-link" href="#sec-output" data-target="sec-output"><i class="fas fa-file-lines icon-output"></i> 生成結果</a>
</nav>
</aside>
<section>
<form id="templateForm">
<div class="row g-4">
<div class="col-lg-6">
<section id="sec-request" class="anchor">
<div class="card shadow-sm">
<div class="card-header bg-primary text-white"><i class="fas fa-user-tie me-2"></i>依頼内容(あなた=AI側の役割)</div>
<div class="card-body">
<textarea id="title" class="form-control" rows="7">あなたは プロの優秀な Excel 自動化エンジニア(VBA) です。
以下の仕様に基づいて、初心者にも分かりやすい日本語コメント付きの “完全版コード” を生成してください。
生成されたコードをこちらに提示する際は、ユーザーが一括でコピペで張り付けできるように、省略や抜粋などは禁止であり、処理の流れが判りやすい完成された完璧な全文コードでお願いします。
VBScript版は作成しなくてもいいです。</textarea>
</div>
</div>
</section>
<section id="sec-purpose" class="anchor">
<div class="card shadow-sm mt-4">
<div class="card-header"><i class="fas fa-bullseye me-2"></i>目的</div>
<div class="card-body">
<textarea id="purpose" class="form-control" rows="11">【Excelの編集作業をVBAで自動化したい。】
作成するコードは「自分自身の置かれているフォルダ名(CドライブのRootからPath)を取得し、その中に存在するCSVファイルを取り込みたいので、補足情報に示した内容のコードを作成/改造してほしい」。
コードの可読性に困難となる複雑なユーザー関数は使わないでほしい。
また、既存のシートモジュールなどやフォームモジュールなどはなるべく変更しないように標準モジュールだけでVBA初心者でも理解できるコードでお願いします。
あなたが作成したコードは、私がコピペで張り付ける際に標準モジュールの中で記述するコードなのか、シートモジュールの中で記述するコードなのかを明確に示してください。
また、あなたが生成したコードをユーザーが実行した時に、進捗状態を表示するようにしたい。</textarea>
</div>
</div>
</section>
<section id="sec-req" class="anchor">
<div class="card shadow-sm mt-4">
<div class="card-header"><i class="fas fa-list-check me-2"></i>仕様詳細(VBA)</div>
<div class="card-body">
<textarea id="requirements" class="form-control" rows="12">- 作成するプロシージャ名は [XXXXXXXXXXXXX] として作成してください。あなたがもし、ユーザーファンクションなど新規にプロシージャを作成する時は、日本語などを使用したなるべく短い文節でお願いします。
- 使用技術:VBA(.xlsm)【指定】
- 環境:Windows【10/11】/ Excel【365/2019/2016】(32/64bit)
- 対象ブック/シート:ブック名、シート名、テーブル名/範囲(例:tbl集計 B4:N? 見出し5行目)
- 入力/出力:入力元(CSV/OneDrive など)、日付形式(yyyy/mm/dd)、出力(シート/CSV/PDF/印刷)
- 機能:AM/PM最終時刻、重複排除、ログ、進捗、冪等性
- UI(VBA):ユーザーフォーム/ボタン/リボン/ショートカット
- エラー:メッセージ+error-Log記録+巻き戻し
- 権限/設定:マクロ有効、信頼センター、参照設定なし(遅延バインディング)
- VBScript版は作成しなくてもいいです
- 参考にするコードがある場合は下記に示します</textarea>
</div>
</div>
</section>
</div>
<div class="col-lg-6">
<section id="sec-lib" class="anchor">
<div class="card shadow-sm">
<div class="card-header"><i class="fas fa-cogs me-2"></i>使用ライブラリ/参照設定</div>
<div class="card-body">
<textarea id="libraries" class="form-control" rows="7">- 原則:参照設定なし(CreateObject)
- 64bit対応:PtrSafe / LongPtr
- 外部:FileSystemObject / ADODB.Stream(遅延バインディング)
- VBScript:Excel.Application を非表示起動→終了時 Quit と解放(ゾンビ防止)</textarea>
</div>
</div>
</section>
<section id="sec-notes" class="anchor">
<div class="card shadow-sm mt-4">
<div class="card-header"><i class="fas fa-comments me-2"></i>コメントと解説の要望</div>
<div class="card-body">
<textarea id="notes" class="form-control" rows="6">- 各処理に日本語コメント
- 末尾に「処理の流れ(擬似コード)」と「設計意図」
- 初心者向けの導入手順(.xlsm 保存、信頼センター)
- 初心者にも判りやすいコードとコメントを挿入したコードで生成してください。</textarea>
</div>
</div>
</section>
<section id="sec-rules" class="anchor">
<div class="card shadow-sm mt-4">
<div class="card-header"><i class="fas fa-ruler-combined me-2"></i>コード出力のルール</div>
<div class="card-body">
<textarea id="rules" class="form-control" rows="12">- あなたが私にコードを提示する時は省略なしの全文(ThisWorkbook/標準/シート/ユーザーフォーム)
- 修正依頼時も毎回全文再掲
- コードブロックは vba / vb
- VBA 対応時は VBA版 を連続提示
- ファイルI/Oは存在確認・例外・可変パス対応
- 冪等性を担保(同一データの再重複防止)
- ファイルを書き出すコードを生成する時は、▼ パス生成(ユーザー名対応)で、userRoot = Environ$("USERPROFILE") 等を使用し、操作するユーザーがどのPCからでもアクセス可能なようにしてほしい。
- 私が作成したコードをあなたに送ったとき、あなたは完成したコードを私に提示する際に、あなたが作成したコードと私のコードを照らし合わせ、脱落の無いように内容をチェックしてから私の方へお願いします。</textarea>
</div>
</div>
</section>
</div>
</div>
<section id="sec-checks" class="anchor">
<div class="card shadow-sm mt-4">
<div class="card-header"><i class="fas fa-check-double me-2"></i>出力前の確認(AI側チェックリスト)</div>
<div class="card-body">
<textarea id="checks" class="form-control" rows="10">- 32/64bit でコンパイルOK(Option Explicit / PtrSafe)
- 参照設定なしで動作(遅延バインディング)
- ブック/シート/テーブル名の整合
- 例外時の後始末(画面更新/計算/保護)
- 分かりやすいログ/メッセージ
- 環境依存パスの回避(ユーザープロファイル/OneDrive)
- 大量データでも高速(配列/一括代入、ScreenUpdating/Calculation制御)
- 手動実行の導線(Workbook_Open / ボタン)
- VBScript で Excel のゾンビ化なし(Quit + 解放)
- こちらからの要望であなたが再度修正し、私への提示前に、サンプルとしてあなたに提示したものと各セクションの内容に相違ないか、より厳重に検証を行うようにしてください。</textarea>
</div>
</div>
</section>
<section id="sec-extra" class="anchor">
<div class="card shadow-sm mt-4">
<div class="card-header"><i class="fas fa-paperclip me-2"></i>補足情報 & 添付ファイル</div>
<div class="card-body">
<textarea id="extra" class="form-control mb-3" rows="3">【補足事項や注意点を記載】
あなたがコードを生成する際に役立つと思われるファイルです</textarea>
<input type="file" id="file" class="form-control" multiple />
<textarea id="fileList" class="form-control mt-2" rows="2" readonly placeholder="選択されたファイル名"></textarea>
</div>
</div>
</section>
<div class="d-grid gap-3 d-md-flex justify-content-md-center mt-5 mb-5">
<button type="button" id="generateBtn" class="btn btn-primary btn-lg px-5 shadow-sm"><i class="fas fa-magic me-2"></i>テンプレートを生成</button>
<button type="button" id="copyBtn" class="btn btn-success btn-lg px-4 shadow-sm"><i class="fas fa-copy me-2"></i>クリップボードにコピー</button>
<button type="button" id="downloadBtn" class="btn btn-secondary btn-lg px-4 shadow-sm"><i class="fas fa-download me-2"></i>Markdownを保存</button>
</div>
</form>
<section id="sec-output" class="anchor">
<div id="output-section" class="card shadow-lg mt-4" style="display: none;">
<div class="card-header bg-light"><h2 class="h4 mb-0">生成されたテンプレート</h2></div>
<div class="card-body"><pre id="output" class="bg-light p-3 rounded" style="white-space: pre-wrap; font-family: Consolas, monospace;"></pre></div>
</div>
</section>
</section>
</div>
</main>
<div id="floatingActionGroup" class="floating-action-group">
<a href="#" class="btn-float btn-float-gen" onclick="smartScrollTo('generateBtn', event)"><i class="fas fa-magic"></i> 生成へ</a>
<a href="#" class="btn-float btn-float-copy" onclick="smartScrollTo('copyBtn', event)"><i class="fas fa-copy"></i> コピーへ</a>
<a href="#" class="btn-float btn-float-dl" onclick="smartScrollTo('downloadBtn', event)"><i class="fas fa-file-download"></i> DLへ</a>
<a href="#top" class="back-to-top"><i class="fas fa-arrow-up"></i><span>トップへ戻る</span></a>
</div>
<div class="toast-container position-fixed bottom-0 end-0 p-3">
<div id="copyToast" class="toast" role="alert"><div class="toast-header bg-success text-white"><strong class="me-auto">成功</strong><button type="button" class="btn-close" data-bs-dismiss="toast"></button></div><div class="toast-body">コピーしました!</div></div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script>
(function () {
"use strict";
const $ = (id) => document.getElementById(id);
window.smartScrollTo = (id, e) => { if(e) e.preventDefault(); const el = $(id); if(el) window.scrollTo({ top: el.getBoundingClientRect().top + window.scrollY - 220, behavior: "smooth" }); };
document.addEventListener("DOMContentLoaded", () => {
const copyToast = new bootstrap.Toast($("copyToast"));
$("darkModeToggle").addEventListener("change", (e) => { document.body.classList.toggle("dark-mode", e.target.checked); localStorage.setItem("darkMode", e.target.checked ? "enabled" : "disabled"); });
if (localStorage.getItem("darkMode") === "enabled") { $("darkModeToggle").checked = true; document.body.classList.add("dark-mode"); }
window.addEventListener("scroll", () => { $("floatingActionGroup").classList.toggle("show", window.scrollY > 300); });
$("generateBtn").addEventListener("click", () => {
const md = # AI Excel VBA プロンプト\n\n## 役割\n${$("title").value}\n\n## 目的\n${$("purpose").value}\n\n## 仕様\n${$("requirements").value}\n\n## 参照設定\n${$("libraries").value}\n\n## 要望\n${$("notes").value}\n\n## ルール\n${$("rules").value}\n\n## チェックリスト\n${$("checks").value}\n\n## 補足\n${$("extra").value}\n\n## ファイル\n${$("fileList").value || "(なし)"};
$("output").textContent = md; $("output-section").style.display = "block"; smartScrollTo("sec-output");
});
$("copyBtn").addEventListener("click", async () => { if(!$("output").textContent) return smartScrollTo("generateBtn"); await navigator.clipboard.writeText($("output").textContent); copyToast.show(); });
$("downloadBtn").addEventListener("click", () => { if(!$("output").textContent) return smartScrollTo("generateBtn"); const blob = new Blob([$("output").textContent], { type: "text/markdown" }); const a = document.createElement("a"); a.href = URL.createObjectURL(blob); a.download = VBA_Prompt_${Date.now()}.md; a.click(); });
$("file").addEventListener("change", (e) => { $("fileList").value = Array.from(e.target.files).map(f => f.name).join("\n"); });
window.addEventListener("scroll", () => {
let current = "";
document.querySelectorAll("section.anchor").forEach(sec => { if (window.scrollY >= sec.offsetTop - 250) current = sec.id; });
document.querySelectorAll("#sideNav .nav-link").forEach(a => { a.classList.toggle("active", a.getAttribute("data-target") === current); });
});
});
})();
</script>
</body>
</html>投稿者プロフィール

-
asamai-cts Owner
あさまいCTSの代表オヤジです(2024年現在=63歳)
横手市中央町で「ラーメン与市」を2012年まで約15年間を経営。
その後、「横手市雇用創出協議会 実践支援員」を経て、一時会社勤めをするが再度、自営業の世界に戻る。
現在の「あさまいCTS」は2019年1月に起業。業務内容は主に、パソコンの修理、出張スマホ・パソコン教室、ホームページ作成 その他 何でも屋みたいなものです・・・
最新の投稿
未分類2026年2月14日爆速ファイル名一括変換ツール
備忘録2026年2月10日年齢早見表アプリを紹介
備忘録2026年2月6日開発秘話
備忘録2026年2月5日AIを「最強の右腕」に変える魔法のツール、作りました。(第2弾)


