今回はExcelのフローチャートの図形を指定した場所へ移動させる、マクロを登録した専用ボタンを作成する手順をご紹介します。
Excelでフローチャートを作成して図形の位置を微調整したいときは、図形を選択して「矢印」キー(↑↓ ← →)、またはより細かく調整したいときは「Ctrl」キー +「矢印」キーを使って行います。

「Ctrl」キー +「矢印」キーの操作をマクロの記録をしてみると以下の様なコードが生成されます。
Sub Macro1()
'
' Macro1 Macro
'
'
ActiveSheet.Shapes.Range(Array("Flowchart: Decision 1")).Select
Selection.ShapeRange.IncrementLeft 0.75
End Sub
記録された「Selection.ShapeRange.IncrementLeft 0.75」のコードは、矢印キーを1回押すたびに選択した図形が1ピクセルずつ移動するという意味になります。
標準モジュールに図形を移動するマクロを作成
VBA編集画面(Visual Basic Editor)を立ち上げて「挿入」タブ →「標準モジュール」で標準モジュールを作成し、次の8種類の「図形を移動するマクロ」をコピーして貼り付けます。
Sub 図形を右に1ピクセル移動する()
On Error Resume Next '図形を選択していなくてエラーが発生しても中断せずに次の行を実行する
If Selection.ShapeRange.Count > 0 Then '選択されている図形が1つ以上あるかを判定する
If Err.Number = 0 Then 'エラーが発生していないときは
Selection.ShapeRange.IncrementLeft (1 * 0.75) '図形を右に1ピクセル移動する
Else '図形が選択されていなくてエラーが発生した時は
MsgBox "図形を選択してから実行してください。" 'メッセージを表示して終了する
End If
End If
On Error GoTo 0 'エラーの無視を解除する
End Sub
Sub 図形を左に1ピクセル移動する()
On Error Resume Next '図形を選択していなくてエラーが発生しても中断せずに次の行を実行する
If Selection.ShapeRange.Count > 0 Then '選択されている図形が1つ以上あるかを判定する
If Err.Number = 0 Then 'エラーが発生していないときは
Selection.ShapeRange.IncrementLeft (-1 * 0.75) '図形を左に1ピクセル移動する
Else '図形が選択されていなくてエラーが発生した時は
MsgBox "図形を選択してから実行してください。" 'メッセージを表示して終了する
End If
End If
On Error GoTo 0 'エラー無視を解除する
End Sub
Sub 図形を上に1ピクセル移動()
On Error Resume Next '図形を選択していなくてエラーが発生しても中断せずに次の行を実行する
If Selection.ShapeRange.Count > 0 Then '選択されている図形が1つ以上あるかを判定する
If Err.Number = 0 Then 'エラーが発生していないときは
Selection.ShapeRange.IncrementTop (-1 * 0.75) '図形を上に1ピクセル移動する
Else '図形が選択されていなくてエラーが発生した時は
MsgBox "図形を選択してから実行してください。" 'メッセージを表示して終了する
End If
End If
On Error GoTo 0 'エラー無視を解除する
End Sub
Sub 図形を下に1ピクセル移動()
On Error Resume Next '図形を選択していなくてエラーが発生しても中断せずに次の行を実行する
If Selection.ShapeRange.Count > 0 Then '選択されている図形が1つ以上あるかを判定する
If Err.Number = 0 Then 'エラーが発生していないときは
Selection.ShapeRange.IncrementTop (1 * 0.75) '図形を下に1ピクセル移動する
Else '図形が選択されていなくてエラーが発生した時は
MsgBox "図形を選択してから実行してください。" 'メッセージを表示して終了する
End If
End If
On Error GoTo 0 'エラー無視を解除する
End Sub
Sub 図形を右に18ピクセル移動する()
On Error Resume Next '図形を選択していなくてエラーが発生しても中断せずに次の行を実行する
If Selection.ShapeRange.Count > 0 Then '選択されている図形が1つ以上あるかを判定する
If Err.Number = 0 Then 'エラーが発生していないときは
Selection.ShapeRange.IncrementLeft (18 * 0.75) '図形を右に18ピクセル移動する
Else '図形が選択されていなくてエラーが発生した時は
MsgBox "図形を選択してから実行してください。" 'メッセージを表示して終了する
End If
End If
On Error GoTo 0 'エラーの無視を解除する
End Sub
Sub 図形を左に18ピクセル移動する()
On Error Resume Next '図形を選択していなくてエラーが発生しても中断せずに次の行を実行する
If Selection.ShapeRange.Count > 0 Then '選択されている図形が1つ以上あるかを判定する
If Err.Number = 0 Then 'エラーが発生していないときは
Selection.ShapeRange.IncrementLeft (-18 * 0.75) '図形を左に18ピクセル移動する
Else '図形が選択されていなくてエラーが発生した時は
MsgBox "図形を選択してから実行してください。" 'メッセージを表示して終了する
End If
End If
On Error GoTo 0 'エラー無視を解除する
End Sub
Sub 図形を上に18ピクセル移動()
On Error Resume Next '図形を選択していなくてエラーが発生しても中断せずに次の行を実行する
If Selection.ShapeRange.Count > 0 Then '選択されている図形が1つ以上あるかを判定する
If Err.Number = 0 Then 'エラーが発生していないときは
Selection.ShapeRange.IncrementTop (-18 * 0.75) '図形を上に18ピクセル移動する
Else '図形が選択されていなくてエラーが発生した時は
MsgBox "図形を選択してから実行してください。" 'メッセージを表示して終了する
End If
End If
On Error GoTo 0 'エラー無視を解除する
End Sub
Sub 図形を下に18ピクセル移動()
On Error Resume Next '図形を選択していなくてエラーが発生しても中断せずに次の行を実行する
If Selection.ShapeRange.Count > 0 Then '選択されている図形が1つ以上あるかを判定する
If Err.Number = 0 Then 'エラーが発生していないときは
Selection.ShapeRange.IncrementTop (18 * 0.75) '図形を下に18ピクセル移動する
Else '図形が選択されていなくてエラーが発生した時は
MsgBox "図形を選択してから実行してください。" 'メッセージを表示して終了する
End If
End If
On Error GoTo 0 'エラー無視を解除する
End Sub
図形移動用ボタンを作成してマクロを登録
エクセルシートを表示して「挿入」タブ → 「図形」 → 「四角形」の中の「正方形/長方形」を選択してシート上に8つの図形を「移動用ボタン」として配置します。
ボタンの用途がわかりやすいようにボタンを「右クリック」して「テキストの編集」で1ピクセル移動用ボタンは「▷」マークを18ピクセル移動用ボタンは「▷▷」マークを入力します。
セルの幅は18ピクセルで設定しています。


1ピクセル移動用のボタンを右クリックして右クリックメニューから「マクロを登録」を選択します。

マクロ名から「図形を右に1ピクセル移動する」を選択し「OK」ボタンを押してマクロを登録をします。
他のボタンも順番にマクロを登録を行います。
登録したマクロの実行
マクロを登録が終わったら、2024年3月に「Excelでフローチャート作成」のブログ記事で作ったフローチャートをボタンの右側に貼り付けて図形が移動できるのか確認してみます。

一番上の「端子」を選択して「▷▷」ボタンを2回押すと、右方向に36ピクセル移動したのが分かると思います。

「Ctrl」キー + 「図形の複数選択」してボタンを押すと図形をまとめて移動することもできます。
マクロのコードの「Selection.ShapeRange.IncrementLeft (1 * 0.75)」の「1」の部分を書き換えれは移動する幅を自由に設定できるので、セルの幅に合わせて行ってみてください。
