MS Excel:吹き出しの移動やサイズ変更で指示先の位置が変わる
- 2023/05/31
- 23:40
Microsoft EXCELの吹き出しを移動したり大きさを変えると、引き出し線の先端(矢印が指している位置)が変わるのって不便。
確かExcel 2007より前はテキストボックス部分だけ動いて先っちょは止まってたよね。
WEBで検索すると、同様の不便を感じている人は結構居る。
そして、旧来の指示先端部を固定したまま本体の移動・大きさ変更をする方法は見当たらない。
これって誰得?
つまり、

例えば「線吹き出し 2 (枠付き)」をマウスで掴んで、

ドラッグすると、

引き出し線(指示線)も一緒に動く。

さらに、幅のハンドルを掴んでドラッグすると、

幅が広がったのと同じ比率で引き出し線も反対側に拡がる。
ちなみに、PDF-XChange Editor(フリーソフト)の

コメントと呼ばれるオブジェクトに含まれる吹き出しツールで描いたものを

ドラッグしても、

矢印の先は元の位置に残っている。

例えば文字数が増えて拡大したくなったら(実は文字数が増えると自動的に大きくなるが)、

矢印の先を心配することなく拡大(縮小)できる。
フリーソフトにできることがどうしてできない?
アチラの国は訴訟天国なので、誰かが何らかの不利益を主張して変えさせたのか、なんて邪推してしまう。
ごまめの私が歯ぎしりしても仕方がないので…
そうなるとマクロ(VBA)のお世話になるしかないのか?
結論から先に言うと、どういう風にプログラムすればいいかの目途は立った。
結構面倒くさい処理になりそうなので、マクロはまだできていない。
はい、解散!
じゃなくて、本稿では調べて分かったことを報告しておきたい。
まずは、こんな感じで
エクセルのワークシートに全タイプの吹き出しを並べた。
これのオブジェクトをすべて選択した状態で、以下のマクロを実行した。
「For iii = 1 To Selection.ShapeRange.Count」で、選択したオブジェクトを順に処理する。
「MyResult = ""」で、出力用の文字列変数を空っぽにしてから、
処理回数(iii)、吹き出しの種類(Selection.ShapeRange.Item(iii).AutoShapeType)、オブジェクトの名前(Selection.ShapeRange.Item(iii).Name)、吹き出し内に書いたテキスト(Selection.ShapeRange.Item(iii).TextFrame.Characters.Text)、吹き出し本体の左・上の座標(Selection.ShapeRange.Item(iii).Left 、 Selection.ShapeRange.Item(iii).Top)、同 幅・高さ(Selection.ShapeRange.Item(iii).Width 、 Selection.ShapeRange.Item(iii).Height)、
そしてこれが肝なんだが、引き出し線に関する情報(Selection.ShapeRange.Item(iii).Adjustments.Item(jjj))を、改行(& vbCrLf)で区切りながら「MyResult」に代入して、最後にセルに書き出す(Cells(43 + iii, 1).Value = MyResult)。
結果一覧を以下に示す。
ここから分かるように、[Item(1)-(n)]=「Adjustments.Item(jjj)」の個数が吹き出しの種類ごとに異なる。
指示先が単純に1つのものは「Item」は2つ。
具体的には、本体の高さ・幅に対する指示先座標の比率だ。(逆だったかもしれん)
「角丸四角形吹き出し」の場合は角の丸さを定義するため「Item」が一つ増えて3つ。
「線吹き出し 1 (枠付き)」は引き出し線の始点と終点を定義するため、「Item」は4つ。
「線吹き出し 2 (枠付き)」は引き出し線に折れ点が増えるので「Item」は6つ。
という具合になっている。
上述の通り、「引き出し線の先端」は座標ではなく、吹き出し本体に対する比率で定義される。
Excel も Word も Office 2007 から XML でデータを保存するように変わったので、XML の仕様が原因で冒頭で述べた不便な状況が生じたのではないかと考えている。
尤も、Excelに読み込んだ時点で動かし方を変えることは、できない相談じゃない気がするんだが。
ついでに比較的有名な豆知識だが、拡張子が .xlsx 、 .docx などのバージョンは、拡張子を .zip に変えるだけで中身が見えて、フォルダ体系の中の「media」フォルダの中には、Excel/Wordに貼り付けた写真などの生画像データが入っていて、これを画像処理ソフトで弄くってから .zipに戻して拡張子を復元すると、Excel/Wordで開いたファイルに反映される、なんて小技がある。
失敗して開けなくなる可能性もあるので、元データは残してコピーで試すのがお勧め。
話を戻して、
上記のとおり下調べはできたので、
(1) オブジェクトが選択された状態で、マクロを起動すると
(2) その時点で上記各データから引き出し線先端の座標を比率に基づき算出して記憶し、
(3) InputBoxまたはMsgBoxで“吹き出しを移動・拡大縮小して「OK」をクリック”と表示、
注) InputBoxは関数ではなくメソッドで呼び出さないとオブジェクト操作できない
→ 参考(小さな書店の経営術さん)
(4) マクロに制御が戻ったら、オブジェクトの位置とサイズを再取得して、(2)の座標からItemで記述される様式の数値を逆算してセット
という流れで当初の目的は達成できるはず。
ただ、面倒くさいのわかるでしょ?
誰かマクロ作ってくれてもいいぞ。
←このボタンをクリックすると書いている人が喜びます(それだけです)
にほんブログ村
確かExcel 2007より前はテキストボックス部分だけ動いて先っちょは止まってたよね。
WEBで検索すると、同様の不便を感じている人は結構居る。
そして、旧来の指示先端部を固定したまま本体の移動・大きさ変更をする方法は見当たらない。
これって誰得?
つまり、

例えば「線吹き出し 2 (枠付き)」をマウスで掴んで、

ドラッグすると、

引き出し線(指示線)も一緒に動く。

さらに、幅のハンドルを掴んでドラッグすると、

幅が広がったのと同じ比率で引き出し線も反対側に拡がる。
ちなみに、PDF-XChange Editor(フリーソフト)の

コメントと呼ばれるオブジェクトに含まれる吹き出しツールで描いたものを

ドラッグしても、

矢印の先は元の位置に残っている。

例えば文字数が増えて拡大したくなったら(実は文字数が増えると自動的に大きくなるが)、

矢印の先を心配することなく拡大(縮小)できる。
フリーソフトにできることがどうしてできない?
アチラの国は訴訟天国なので、誰かが何らかの不利益を主張して変えさせたのか、なんて邪推してしまう。
ごまめの私が歯ぎしりしても仕方がないので…
そうなるとマクロ(VBA)のお世話になるしかないのか?
結論から先に言うと、どういう風にプログラムすればいいかの目途は立った。
結構面倒くさい処理になりそうなので、マクロはまだできていない。
はい、解散!
じゃなくて、本稿では調べて分かったことを報告しておきたい。
まずは、こんな感じで
![]() |
これのオブジェクトをすべて選択した状態で、以下のマクロを実行した。
Sub TextBoxTest() Dim MyResult As String If TypeName(Selection) = "Range" Then MsgBox "オートシェイプが選択されていません" Exit Sub End If For iii = 1 To Selection.ShapeRange.Count MyResult = "" MyResult = MyResult & "●No." & iii & " [Type]=" & Selection.ShapeRange.Item(iii).AutoShapeType MyResult = MyResult & " [Name]=" & Selection.ShapeRange.Item(iii).Name & " [Text]=" & Selection.ShapeRange.Item(iii).TextFrame.Characters.Text & vbCrLf MyResult = MyResult & "[Left] & [Top] =" & Selection.ShapeRange.Item(iii).Left & " " & Selection.ShapeRange.Item(iii).Top MyResult = MyResult & " [Width] & [Hight]=" & Selection.ShapeRange.Item(iii).Width & " " & Selection.ShapeRange.Item(iii).Height & vbCrLf MyResult = MyResult & "[Item(1)-(" & Selection.ShapeRange.Item(iii).Adjustments.Count & ")] =" For jjj = 1 To Selection.ShapeRange.Item(iii).Adjustments.Count MyResult = MyResult & " " & Selection.ShapeRange.Item(iii).Adjustments.Item(jjj) Next MyResult = MyResult & vbCrLf Cells(43 + iii, 1).Value = MyResult Next End Sub |
「For iii = 1 To Selection.ShapeRange.Count」で、選択したオブジェクトを順に処理する。
「MyResult = ""」で、出力用の文字列変数を空っぽにしてから、
処理回数(iii)、吹き出しの種類(Selection.ShapeRange.Item(iii).AutoShapeType)、オブジェクトの名前(Selection.ShapeRange.Item(iii).Name)、吹き出し内に書いたテキスト(Selection.ShapeRange.Item(iii).TextFrame.Characters.Text)、吹き出し本体の左・上の座標(Selection.ShapeRange.Item(iii).Left 、 Selection.ShapeRange.Item(iii).Top)、同 幅・高さ(Selection.ShapeRange.Item(iii).Width 、 Selection.ShapeRange.Item(iii).Height)、
そしてこれが肝なんだが、引き出し線に関する情報(Selection.ShapeRange.Item(iii).Adjustments.Item(jjj))を、改行(& vbCrLf)で区切りながら「MyResult」に代入して、最後にセルに書き出す(Cells(43 + iii, 1).Value = MyResult)。
結果一覧を以下に示す。
●No.1 [Type]=105 [Name]=Rectangular Callout 1 [Text]=四角形吹き出し [Left] & [Top] =47.25 43.12496 [Width] & [Hight]=107.25 76.5 [Item(1)-(2)] = -0.20833 0.625 |
●No.2 [Type]=106 [Name]=Rounded Rectangular Callout 2 [Text]=角丸四角形吹き出し [Left] & [Top] =190.5 43.12496 [Width] & [Hight]=126 76.5 [Item(1)-(3)] = -0.20833 0.625 0.16667 |
●No.3 [Type]=107 [Name]=Oval Callout 3 [Text]=円形吹き出し [Left] & [Top] =369.75 42 [Width] & [Hight]=126.75 78.75 [Item(1)-(2)] = -0.20833 0.625 |
●No.4 [Type]=108 [Name]=Cloud Callout 4 [Text]=雲形吹き出し [Left] & [Top] =547.5 40.12496 [Width] & [Hight]=142.5 82.5 [Item(1)-(2)] = -0.20833 0.625 |
●No.5 [Type]=109 [Name]=Line Callout 1 5 [Text]=線吹き出し 1 (枠付き) [Left] & [Top] =99.75 167.25 [Width] & [Hight]=105 64.5 [Item(1)-(4)] = 0.1875 -0.08333 1.125 -0.38333 |
●No.6 [Type]=111 [Name]=Line Callout 2 6 [Text]=線吹き出し 2 (枠付き) [Left] & [Top] =336 167.25 [Width] & [Hight]=99 72 [Item(1)-(6)] = 0.1875 -0.08333 0.1875 -0.16667 1.125 -0.46667 |
●No.7 [Type]=112 [Name]=Line Callout 3 7 [Text]=線吹き出し 3 (枠付き) [Left] & [Top] =557.25 167.25 [Width] & [Hight]=132.75 72 [Item(1)-(8)] = 0.1875 -0.08333 0.1875 -0.16667 1 -0.16667 1.12963 -0.08333 |
●No.8 [Type]=114 [Name]=Line Callout 1 (Accent Bar) 8 [Text]=強調線吹き出し 1 [Left] & [Top] =87 268.5 [Width] & [Hight]=117.75 54.75 [Item(1)-(4)] = 0.1875 -0.08333 1.125 -0.38333 |
●No.9 [Type]=115 [Name]=Line Callout 2 (Accent Bar) 9 [Text]=強調線吹き出し 2 [Left] & [Top] =324.75 268.5 [Width] & [Hight]=110.25 72.75 [Item(1)-(6)] = 0.1875 -0.08333 0.1875 -0.16667 1.125 -0.46667 |
●No.10 [Type]=116 [Name]=Line Callout 3 (Accent Bar) 10 [Text]=強調線吹き出し 3 [Left] & [Top] =560.25 268.5 [Width] & [Hight]=129.75 77.25 [Item(1)-(8)] = 0.1875 -0.08333 0.1875 -0.16667 1 -0.16667 1.12963 -0.08333 |
●No.11 [Type]=113 [Name]=Line Callout 1 (No Border) 11 [Text]=線吹き出し 1 [Left] & [Top] =87.75 376.5 [Width] & [Hight]=117 59.25 [Item(1)-(4)] = 0.1875 -0.08333 1.125 -0.38333 |
●No.12 [Type]=119 [Name]=Line Callout 2 (No Border) 12 [Text]=線吹き出し 2 [Left] & [Top] =344.25 376.5 [Width] & [Hight]=90.75 62.25 [Item(1)-(6)] = 0.1875 -0.08333 0.1875 -0.16667 1.125 -0.46667 |
●No.13 [Type]=120 [Name]=Line Callout 3 (No Border) 13 [Text]=線吹き出し 3 [Left] & [Top] =562.5 376.5 [Width] & [Hight]=127.5 63 [Item(1)-(8)] = 0.1875 -0.08333 0.1875 -0.16667 1 -0.16667 1.12963 -0.08333 |
●No.14 [Type]=122 [Name]=Line Callout 1 (Border and Accent Bar) 14 [Text]=強調線吹き出し 1 (枠付き) [Left] & [Top] =75 462 [Width] & [Hight]=129.75 76.5 [Item(1)-(4)] = 0.1875 -0.08333 1.125 -0.38333 |
●No.15 [Type]=123 [Name]=Line Callout 2 (Border and Accent Bar) 15 [Text]=強調線吹き出し 2 (枠付き) [Left] & [Top] =330 458.25 [Width] & [Hight]=105 80.25 [Item(1)-(6)] = 0.1875 -0.08333 0.1875 -0.16667 1.125 -0.46667 |
●No.16 [Type]=124 [Name]=Line Callout 3 (Border and Accent Bar) 16 [Text]=強調線吹き出し 3 (枠付き) [Left] & [Top] =558 466.5 [Width] & [Hight]=132 72 [Item(1)-(8)] = 0.1875 -0.08333 0.1875 -0.16667 1 -0.16667 1.12963 -0.08333 |
ここから分かるように、[Item(1)-(n)]=「Adjustments.Item(jjj)」の個数が吹き出しの種類ごとに異なる。
指示先が単純に1つのものは「Item」は2つ。
具体的には、本体の高さ・幅に対する指示先座標の比率だ。(逆だったかもしれん)
「角丸四角形吹き出し」の場合は角の丸さを定義するため「Item」が一つ増えて3つ。
「線吹き出し 1 (枠付き)」は引き出し線の始点と終点を定義するため、「Item」は4つ。
「線吹き出し 2 (枠付き)」は引き出し線に折れ点が増えるので「Item」は6つ。
という具合になっている。
上述の通り、「引き出し線の先端」は座標ではなく、吹き出し本体に対する比率で定義される。
Excel も Word も Office 2007 から XML でデータを保存するように変わったので、XML の仕様が原因で冒頭で述べた不便な状況が生じたのではないかと考えている。
尤も、Excelに読み込んだ時点で動かし方を変えることは、できない相談じゃない気がするんだが。
ついでに比較的有名な豆知識だが、拡張子が .xlsx 、 .docx などのバージョンは、拡張子を .zip に変えるだけで中身が見えて、フォルダ体系の中の「media」フォルダの中には、Excel/Wordに貼り付けた写真などの生画像データが入っていて、これを画像処理ソフトで弄くってから .zipに戻して拡張子を復元すると、Excel/Wordで開いたファイルに反映される、なんて小技がある。
失敗して開けなくなる可能性もあるので、元データは残してコピーで試すのがお勧め。
話を戻して、
上記のとおり下調べはできたので、
(1) オブジェクトが選択された状態で、マクロを起動すると
(2) その時点で上記各データから引き出し線先端の座標を比率に基づき算出して記憶し、
(3) InputBoxまたはMsgBoxで“吹き出しを移動・拡大縮小して「OK」をクリック”と表示、
注) InputBoxは関数ではなくメソッドで呼び出さないとオブジェクト操作できない
→ 参考(小さな書店の経営術さん)
(4) マクロに制御が戻ったら、オブジェクトの位置とサイズを再取得して、(2)の座標からItemで記述される様式の数値を逆算してセット
という流れで当初の目的は達成できるはず。
ただ、面倒くさいのわかるでしょ?
誰かマクロ作ってくれてもいいぞ。
- 関連記事
-
- エクスプローラー小技とフリーソフト「仕分ちゃん」 (2023/07/01)
- MS Excel:吹き出しの移動やサイズ変更で指示先の位置が変わる (2023/05/31)
- MS Outlook のアラームが役立たず (2023/05/11)
- LINEのポップアップスタンプをOFFにする (2023/04/12)
- 「Firefox Youtube 遅い」検索っ! (2023/02/14)
- デスクトップPCから異音がするので掃除した (2023/01/05)
- fc2ブログのページナビゲーションが分かり難い【と、思いません?】 (2022/12/27)
- 回復ドライブを作りましょう【パソコン】 (2022/11/28)
- ノートPC更新【家族のんやけどな】 (2022/11/23)
- Androidの写真整理 (2022/11/02)
- MS Outlookの連絡先グループをテキストファイルに書き出す (2022/10/31)
スポンサーサイト

にほんブログ村