- ベストアンサー
オートシェープ吹き出しの引き出し位置
エクセルにオートシェープで吹き出しを挿入しています。 書式設定で自動サイズ調整にチェックを入れたまま 後で、吹き出し内に追加入力を行うと 引き出し線(?)の指示している場所も動いてしまいます。 大量修正を行うときは結構手間に感じてしまうのですが、 自動サイズ調整を聞かせたまま、これを固定することは可能でしょうか。 ご存知の方いらっしゃれば、よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
自動サイズ調整モードで吹出し先の位置を固定する設定はできないようですね。 マクロの自動記録で調べてみると、吹出し先の位置は次のような指数で決定され ているようです。 起点(常に本体矩形域の左上端)と吹出しの先端のそれぞれのXY位置を比較し、 ・本体矩形域の幅を1として、X値で(横方向に)どれだけ離れているか。 ・本体矩形域の高さを1として、Y値で(縦方向に)どれだけ離れているか。 このため、自動サイズ調整モードで矩形の縦の長さが2倍になると、吹出しの先 も2倍に伸びてしまいます。ここが問題なんですよね。 ※サイズ変更を手動で行なうと、自動サイズ調整のチェックが自動的に外れ、 吹出し先の位置は固定されますが、このへんの挙動はよくわかりません。 いずれにしましても一般機能では設定できないため、次のようなマクロを組んで みました。 Public i, shps, WD(), HT(), XPos(), YPos(), xWD(), xHT() Sub RecPos() '吹出し先端の位置を記録 shps = ActiveSheet.Shapes.Count ReDim WD(shps), HT(shps), XPos(shps), YPos(shps) For i = 1 To shps With ActiveSheet.Shapes(i) WD(i) = .Width HT(i) = .Height XPos(i) = .Left + WD(i) * .Adjustments.Item(1) YPos(i) = .Top + HT(i) * .Adjustments.Item(2) End With Next End Sub Sub MentPos() 'テキスト修正により移動した先端の位置を修正 ReDim xWD(shps), xHT(shps) For i = 1 To shps xWD(i) = ActiveSheet.Shapes(i).Width xHT(i) = ActiveSheet.Shapes(i).Height With ActiveSheet.Shapes(i) .Adjustments.Item(1) = (XPos(i) - .Left) / xWD(i) .Adjustments.Item(2) = (YPos(i) - .Top) / xHT(i) End With Next End Sub RecPos ・各吹出しのテキストを修正する前に実行します。 ・初期テキストの入った複数の吹出しの先端の位置を一括記録します。 MentPos ・先端のずれを気にしないで各吹出しのテキストを修正した後に実行します。 ・吹出し先端の位置を一括して元します。 元の位置と修正後の位置とが若干異なる場合もあるかも知れませんし使用頻度も 少ないのであまり有用ではないと思ってテストもお座なりですが、一応のご参考 まで。
その他の回答 (1)
これはそういう仕様なのではないかと思います。たとえば引き出し位置が固定のまま、吹き出しが下へ拡大していくと、そのうち引き出し位置を覆い隠してしまいます。そうならないようになっているのだと思います。
お礼
やっぱり仕様で仕方がないのですか。。。 自動とはいえ、入力は手動しているのだから隠れたら自分で 動かすということで、動かない仕様の方がよさそうに思っています。 吹き出しは指す位置が大切なんですから。
お礼
なるほど、そういう解析方法があるんですね。 あとマクロができるようになると、これくらいちゃちゃっと組めるのですね。すごいです。。。 すでに手動で全部修正してしまい、当分使用機会はないかも知れませんが、いい勉強に鳴りました。ありがとうございます。