コンテンツへスキップ

Yamada's blog

メインメニュー
  • 汎用エクセルVBAツール
  • 動画マニュアル
  • ホーム
  • ツール
  • 【Excel VBA】画像+テキストで作る検索可能なマニュアル作成ツールのご紹介(動画マニュアルの弱点を補完)
  • Excel・CSV
  • VBA
  • ツール

【Excel VBA】画像+テキストで作る検索可能なマニュアル作成ツールのご紹介(動画マニュアルの弱点を補完)

KINGKING007 2026年2月17日 6 分読み取り

女性
女性
操作マニュアルを効率よく作成するにはどうすればいいですか。

動画は映像・音声付きで分かり易いですが、分からない部分だけ見直したりするのは該当箇所を探すのが手間だったりしますね。
HUNT
HUNT
女性2
女性2
そうなんです。難しいですよね。。
分かり易さと探しやすさの両方があればいいのですが。。

動画マニュアルに加えて、VBAで画像とテキストを取り込むExcelマニュアルを作成すればできますよ。
HUNT
HUNT

目次

  • 本記事でご紹介すること
  • 実行手順
    • 工程1:マニュアルの土台を作成
    • 工程2:テキストマニュアルの取り込み
    • 工程3:画像の取り込み
  • コード
  • 参考サイト
  • 補足:なぜ画像+テキストマニュアルが重要なのか

本記事でご紹介すること

  • 動画マニュアルのメリットと弱点について説明します

  • 画像+テキストマニュアルがなぜ業務で役立つのかを解説します

  • マニュアル作成を自動化するVBAの全体像をご紹介します

  • 実際に使えるVBAコード(3ステップ構成)を掲載します

実行手順

本VBAは、マニュアル作成を3工程で自動化します。

工程1:マニュアルの土台を作成

  • 新規Excelブックを作成します

  • 見出し行を自動生成し、最大10001行分の枠を用意します

  • 名前を付けて保存し、一旦ブックを閉じます

工程2:テキストマニュアルの取り込み

  • UTF-8対応のテキストファイルを読み込みます

  • 「◇」区切りで1手順=10行として自動配置します

  • 10行を超える説明文は10行目に集約します

工程3:画像の取り込み

  • 複数の画像ファイルを一括選択します

  • ファイル名順に並び替えて自動挿入します

  • 1手順ごとに画像を配置し、サイズも自動調整します

コード

以下が、実際に使用できる マニュアル作成用VBA(画像・テキスト取り込み対応) です。
※そのまま標準モジュールに貼り付けて使用できます。

モジュール1

モジュール1(新規ブック作成)
Default
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Sub Step1_CreateNewBook_ForceSaveAndClose()
Dim newBook As Workbook
Dim ws As Worksheet
Dim i As Long
Dim counter As Integer: counter = 1
Dim saveFileName As Variant
 
' 1. 開始確認
If MsgBox("【工程1:新規ブック作成】を開始します。" & vbCrLf & _
"マニュアルの土台(最大10001行)を作成し、名前を付けて保存後に一旦閉じます。" & vbCrLf & vbCrLf & _
"よろしいですか?", vbQuestion + vbYesNo, "工程1の確認") = vbNo Then Exit Sub
 
' 2. 新規ブック作成と初期設定
Set newBook = Workbooks.Add
Set ws = newBook.Worksheets(1)
ws.Name = "手順"
 
' 描画停止(処理高速化)
Application.ScreenUpdating = False
With ws
.Cells.Font.Name = "Meiryo UI"
.Cells.Font.Size = 11
.Cells.Font.Bold = True
' ★修正箇所:ループの終端を 10001 に変更
' 見出し行(水色)と連番の作成
For i = 1 To 10001 Step 10
.Rows(i).Interior.Color = RGB(0, 255, 255)
.Cells(i, 1).Value = counter
counter = counter + 1
Next i
' 書式設定
With .Columns("A:G")
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
End With
.Columns("A").AutoFit
.Columns("H").ColumnWidth = 60
.Columns("H").WrapText = True
.Columns("H").VerticalAlignment = xlTop
End With
Application.ScreenUpdating = True
 
' 3. 名前を付けて保存の実行
MsgBox "マニュアルの土台(10001行分)が完成しました。" & vbCrLf & _
"保存先を指定してください。保存後、このブックは自動で閉じられます。", vbInformation, "保存のお願い"
 
saveFileName = Application.GetSaveAsFilename( _
InitialFileName:="操作手順書.xlsx", _
FileFilter:="Excelブック (*.xlsx), *.xlsx", _
Title:="【工程1】作成したマニュアルを保存してください")
 
' 4. 保存と終了処理
If saveFileName <> False Then
newBook.SaveAs fileName:=saveFileName, FileFormat:=xlOpenXMLWorkbook
' 保存したブックを閉じる
newBook.Close SaveChanges:=False
MsgBox "保存してブックを閉じました。" & vbCrLf & vbCrLf & _
"【次のステップ】" & vbCrLf & _
"「工程2:テキスト取り込み」を実行してください。", vbInformation, "工程1完了"
Else
' 保存がキャンセルされた場合
MsgBox "保存がキャンセルされたため、作成したブックを破棄して終了します。", vbExclamation, "処理中断"
newBook.Close SaveChanges:=False
End If
End Sub

 

モジュール2

モジュール2(テキストファイル取り込み)
Default
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
Sub Step2_ImportText_BlockLimit10()
Dim targetFile As Variant
Dim targetBook As Workbook
Dim ws As Worksheet
Dim fdTxt As FileDialog
Dim fullText As String, txtParts() As String, lineParts() As String
Dim i As Long, txtIdx As Long, lineIdx As Long
Dim modeSelect As VbMsgBoxResult
Dim blockStartRow As Long: blockStartRow = 2 ' 各「◇」の開始行
Dim currentLineOffset As Long ' ブロック内での行オフセット
 
MsgBox "【工程2:テキスト取り込み】を開始します。" & vbCrLf & _
"改行がある場合は下の行へ配置し、10行目を超える分は10行目にまとめます。", vbInformation, "工程2開始"
 
targetFile = Application.GetOpenFilename("Excelブック (*.xlsx; *.xlsm),*.xlsx;*.xlsm", , "【Excel選択】マニュアル(Excel)を選択してください")
If targetFile = False Then Exit Sub
Set targetBook = Workbooks.Open(targetFile)
On Error Resume Next
Set ws = targetBook.Sheets("手順")
On Error GoTo 0
 
If ws Is Nothing Then
MsgBox "「手順」シートが見つかりません。", vbCritical
targetBook.Close SaveChanges:=False
Exit Sub
End If
 
' --- 既存データの確認とモード選択 ---
If Application.WorksheetFunction.CountA(ws.Columns("H")) > 0 Then
modeSelect = MsgBox("H列に既にテキストが存在します。" & vbCrLf & vbCrLf & _
"【はい】:既存のテキストを削除して上書きする" & vbCrLf & _
"【いいえ】:続き(空白行)から追加する" & vbCrLf & _
"【キャンセル】:処理を中止する", vbYesNoCancel + vbQuestion, "データ競合の確認")
If modeSelect = vbCancel Then
targetBook.Close SaveChanges:=False
Exit Sub
ElseIf modeSelect = vbYes Then
ws.Columns("H").ClearContents
Else
' 続きから(最終行の次のブロック開始位置を計算)
blockStartRow = ws.Cells(ws.Rows.Count, "H").End(xlUp).Row
blockStartRow = ((Int((blockStartRow - 2) / 10) + 1) * 10) + 2
End If
End If
 
' --- テキストファイル読み込み (UTF-8) ---
Set fdTxt = Application.FileDialog(msoFileDialogFilePicker)
With fdTxt
.Filters.Clear
.Filters.Add "テキストファイル", "*.txt", 1
If .Show = False Then GoTo CancelExit
Dim adoStream As Object
Set adoStream = CreateObject("ADODB.Stream")
With adoStream
.Charset = "UTF-8"
.Open
.LoadFromFile fdTxt.SelectedItems(1)
fullText = .ReadText
.Close
End With
End With
 
' --- 流し込み処理 ---
txtParts = Split(fullText, "◇")
For txtIdx = 0 To UBound(txtParts)
Dim blockText As String
blockText = Trim(txtParts(txtIdx))
If blockText <> "" Then
' 改行で分割
blockText = Replace(blockText, vbCrLf, vbLf)
blockText = Replace(blockText, vbCr, vbLf)
lineParts = Split(blockText, vbLf)
currentLineOffset = 0 ' ブロック内の書き込み位置リセット (0~8)
For lineIdx = 0 To UBound(lineParts)
Dim targetStr As String
targetStr = Trim(lineParts(lineIdx))
If targetStr <> "" Then
' 9行目(offset=8)までは普通に下の行へ
If currentLineOffset < 8 Then
ws.Cells(blockStartRow + currentLineOffset, "H").Value = targetStr
currentLineOffset = currentLineOffset + 1
Else
' 10行目(offset=9)に到達した場合、それ以降の全行をここに結合して格納
Dim remainingText As String
Dim k As Long
For k = lineIdx To UBound(lineParts)
If Trim(lineParts(k)) <> "" Then
remainingText = remainingText & Trim(lineParts(k)) & vbCrLf
End If
Next k
' 最後の改行を除去して10行目にセット
If Len(remainingText) > 0 Then
ws.Cells(blockStartRow + 8, "H").Value = left(remainingText, Len(remainingText) - 2)
End If
' この「◇」ブロックの処理を終了
Exit For
End If
End If
Next lineIdx
' 次の「◇」ブロックへ移動 (10行飛ばす)
blockStartRow = blockStartRow + 10
End If
Next txtIdx
 
MsgBox "工程2が完了しました。" & vbCrLf & _
"1つのブロックに10行以上のデータがあった場合は、10行目に集約しました。" & vbCrLf & vbCrLf & _
"上書き保存して閉じます。次は「工程3」を実行してください。", vbInformation, "工程2完了"
targetBook.Close SaveChanges:=True
Exit Sub
 
CancelExit:
targetBook.Close SaveChanges:=False
End Sub

 

モジュール3

モジュール3(画像ファイル取り込み)
Default
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
Sub Step3_ImportImages()
Dim targetFile As Variant
Dim targetBook As Workbook
Dim ws As Worksheet
Dim fdImg As FileDialog
Dim imgList() As String
Dim i As Long, imgIdx As Long
Dim modeSelect As VbMsgBoxResult
Dim startRow As Long: startRow = 2
 
MsgBox "【工程3:画像取り込み】を開始します。" & vbCrLf & _
"まず、画像を取り込みたい「Excelファイル」を選択してください。", vbInformation, "工程3開始"
 
targetFile = Application.GetOpenFilename("Excelブック (*.xlsx; *.xlsm),*.xlsx;*.xlsm", , "【Excel選択】マニュアル(Excel)を選択してください")
If targetFile = False Then Exit Sub
Set targetBook = Workbooks.Open(targetFile)
On Error Resume Next
Set ws = targetBook.Sheets("手順")
On Error GoTo 0
 
If ws Is Nothing Then
MsgBox "「手順」シートが見つかりません。", vbCritical
targetBook.Close SaveChanges:=False
Exit Sub
End If
 
' --- 追加メッセージ ---
MsgBox "Excelファイルの読み込みが完了しました。" & vbCrLf & _
"次に、挿入したい「画像ファイル」をすべて選択してください。", vbInformation, "次の操作案内"
 
' --- 既存画像の確認 ---
Dim shp As Shape, hasImages As Boolean
For Each shp In ws.Shapes
If Not Intersect(shp.TopLeftCell, ws.Columns("B")) Is Nothing Then
hasImages = True: Exit For
End If
Next
 
If hasImages Then
modeSelect = MsgBox("B列に既に画像が存在します。" & vbCrLf & vbCrLf & _
"【はい】:既存の画像を削除して上書きする" & vbCrLf & _
"【いいえ】:続き(空白行)から追加する" & vbCrLf & _
"【キャンセル】:処理を中止する", vbYesNoCancel + vbQuestion, "画像競合の確認")
If modeSelect = vbCancel Then
targetBook.Close SaveChanges:=False
Exit Sub
ElseIf modeSelect = vbYes Then
If MsgBox("B列の画像データをすべて消去します。元に戻せませんが本当によろしいですか?", _
vbOKCancel + vbExclamation, "最終確認") = vbCancel Then
targetBook.Close SaveChanges:=False
Exit Sub
End If
For Each shp In ws.Shapes
If Not Intersect(shp.TopLeftCell, ws.Columns("B")) Is Nothing Then shp.Delete
Next
Else
Dim maxRow As Long: maxRow = 0
For Each shp In ws.Shapes
If Not Intersect(shp.TopLeftCell, ws.Columns("B")) Is Nothing Then
If shp.TopLeftCell.Row > maxRow Then maxRow = shp.TopLeftCell.Row
End If
Next
If maxRow < 2 Then
startRow = 2
Else
startRow = ((Int((maxRow - 2) / 10) + 1) * 10) + 2
End If
End If
End If
 
' --- 画像選択 ---
Set fdImg = Application.FileDialog(msoFileDialogFilePicker)
With fdImg
.Filters.Clear
.Filters.Add "画像ファイル", "*.jpg; *.jpeg; *.png; *.bmp", 1
.Title = "【画像選択】挿入する画像を複数選択してください"
If .Show = False Then GoTo CancelExit
ReDim imgList(.SelectedItems.Count - 1)
For i = 1 To .SelectedItems.Count: imgList(i - 1) = .SelectedItems(i): Next i
' ★ここでコンパイルエラーが出ていたため、下の関数を必ず同じモジュール内に貼ってください
Call QuickSort_Single(imgList, LBound(imgList), UBound(imgList))
End With
 
' --- 画像挿入 ---
imgIdx = 0
For i = startRow To 1002 Step 10
If imgIdx <= UBound(imgList) Then
Dim pic As Shape
Set pic = ws.Shapes.AddPicture(fileName:=imgList(imgIdx), _
LinkToFile:=False, SaveWithDocument:=True, _
left:=ws.Cells(i, "B").left, Top:=ws.Cells(i, "B").Top, _
Width:=-1, Height:=-1)
pic.LockAspectRatio = msoTrue
pic.Height = 4.75 * 28.346
imgIdx = imgIdx + 1
Else
Exit For
End If
Next i
MsgBox "工程3(すべての工程)が正常に完了しました。" & vbCrLf & _
"Excelを上書き保存して閉じます。お疲れ様でした。", vbInformation, "工程3完了"
targetBook.Close SaveChanges:=True
Exit Sub
 
CancelExit:
targetBook.Close SaveChanges:=False
End Sub
 
' --- 【重要】この関数がないと工程3でコンパイルエラーになります ---
Private Sub QuickSort_Single(v() As String, left As Long, right As Long)
Dim i As Long, j As Long, pivot As String, tmp As String
i = left: j = right: pivot = v((left + right) \ 2)
Do
Do While v(i) < pivot: i = i + 1: Loop
Do While v(j) > pivot: j = j - 1: Loop
If i <= j Then
tmp = v(i): v(i) = v(j): v(j) = tmp
i = i + 1: j = j - 1
End If
Loop While i <= j
If left < j Then QuickSort_Single v, left, j
If i < right Then QuickSort_Single v, i, right
End Sub

 

参考サイト

  • Microsoft公式 VBA リファレンス

  • Excel FileDialog / Shapes / Workbook 操作に関する技術ブログ

  • UTF-8テキスト読み込み(ADODB.Stream)解説記事

 

補足:なぜ画像+テキストマニュアルが重要なのか

動画マニュアルは 全体の流れを理解する には非常に便利です。
しかし、

  • 知りたい操作だけを素早く探したい

  • 「あの設定どこだっけ?」を後から確認したい

といった場面では不向きです。

その点、画像+テキストのExcelマニュアルであれば、

  • Ctrl+Fで全文検索できる

  • 必要な手順だけを一瞬で確認できる

  • 動画と併用することで理解度が大きく向上する

という強力なメリットがあります。

投稿ナビゲーション

前: 【Gemini】バイブコーティングを試す|ローカルHTMLツールの作成例

関連記事

サムネイル
  • AI
  • Gemini
  • html
  • ツール
  • 考え方

【Gemini】バイブコーティングを試す|ローカルHTMLツールの作成例

KINGKING007 2026年2月17日 0
2046_000
  • Excel・CSV
  • VBA

【エクセルVBA】指定列で指定文字列を含む、セル個数を集計するVBA

KINGKING007 2025年2月22日 0
2016_000
  • Excel・CSV
  • VBA

【エクセルVBA】特定の文字列を含むセルへ、一括で色を付けるVBA

KINGKING007 2025年2月22日 0

検索

最近の投稿

  • 【Excel VBA】画像+テキストで作る検索可能なマニュアル作成ツールのご紹介(動画マニュアルの弱点を補完)
  • 【Gemini】バイブコーティングを試す|ローカルHTMLツールの作成例
  • 【WordPress】スマホで表を横スクロールさせる方法|Gutenberg対応CSSを解説
  • 【エクセルVBA】指定列で指定文字列を含む、セル個数を集計するVBA
  • 【エクセルVBA】特定の文字列を含むセルへ、一括で色を付けるVBA

中の人

山田太郎111

自分向けの備忘録も兼ねて、
業務効率化に繋がる情報を投稿中です。

カテゴリー

  • AI (1)
  • Chrome (2)
  • Excel・CSV (23)
  • Gemini (1)
  • Google (1)
  • html (1)
  • PDF (2)
  • Power Automate Desktop (1)
  • PowerPoint (3)
  • VBA (21)
  • Word (1)
  • WordPress (1)
  • スプレッドシート (1)
  • ツール (2)
  • バッチファイル (1)
  • メール術 (1)
  • 単語登録 (1)
  • 考え方 (2)

アーカイブ

当サイトについて

  • プライバシーポリシー
  • 免責事項

スポンサーリンク

スポンサーリンク

スポンサーリンク

PR005

関連記事

20260217【Excel VBA】画像+テキストで作る検索可能なマニュアル作成ツールのご紹介(動画マニュアルの弱点を補完)
  • Excel・CSV
  • VBA
  • ツール

【Excel VBA】画像+テキストで作る検索可能なマニュアル作成ツールのご紹介(動画マニュアルの弱点を補完)

KINGKING007 2026年2月17日 0
サムネイル
  • AI
  • Gemini
  • html
  • ツール
  • 考え方

【Gemini】バイブコーティングを試す|ローカルHTMLツールの作成例

KINGKING007 2026年2月17日 0
20260208サムネイル_【WordPress】スマホで表を横スクロールさせる方法|Gutenberg対応CSSを解説
  • WordPress

【WordPress】スマホで表を横スクロールさせる方法|Gutenberg対応CSSを解説

KINGKING007 2026年2月8日 0
2046_000
  • Excel・CSV
  • VBA

【エクセルVBA】指定列で指定文字列を含む、セル個数を集計するVBA

KINGKING007 2025年2月22日 0
Copyright © All rights reserved. | MoreNews by AF themes。