• ベストアンサー

エクセル VBA 四角形吹き出しの吹き出し先端の位置を数値で指定する方

エクセル VBA 四角形吹き出しの吹き出し先端の位置を数値で指定する方法を教えて下さい エクセルVBAで四角形吹き出し(msoShapeRectangularCallout)を挿入しています。 ActiveSheet.Shapes.AddShape(msoShapeRectangularCallout, left, top, width, height) で全体の導入X位置、Y位置、四角形部の幅、高さは指定可能ですが、吹き出し先端のxy位置も数値で指定したく、どなたか御教示下さい。

質問者が選んだベストアンサー

  • ベストアンサー
noname#144013
noname#144013
回答No.1

こんにちは。 こういう場合は、「マクロの記録」により、手動で「吹き出し」を作成したとき の操作をマクロ化してみて、そのマクロコードを解析してみるのが手っ取り 早いと思います。 こちらでマクロの記録を採ったところ、Shapeオブジェクト内の以下の2点の プロパティにより、吹き出しの先端位置を設定できるようです。   Adjustments.Item(1) ・・・ 吹き出し先端の相対幅   Adjustments.Item(2) ・・・ 吹き出し先端の相対高さ   Item(1)は、吹き出し本体の幅(AddShapeで吹き出しを作成する際の   指定幅)を基準に、その相対幅で横位置(X方向)を指定するようです。   <例>    Item(1) = 0.5 とした場合は、吹き出し本体の左端位置(X方向)に、    【吹き出し本体の幅の0.5倍(半分)の長さ】を足した分の位置が、    先端の横位置(X方向)となるようです。    この値にマイナス値を指定すると、吹き出し本体の左端位置より    左側(マイナス方向)の相対位置に設定されるようです。   Item(2)は、吹き出し本体の高さ(AddShapeで吹き出しを作成する際の   指定高さ)を基準に、その相対高さで縦位置(Y方向)を指定するよう   です。   <例>    Item(2) = 1.5 とした場合は、吹き出し本体の上端位置(Y方向)に、    【吹き出し本体の高さの1.5倍の長さ】を足した分の位置が、先端の    縦位置(Y方向)となるようです。    この値にマイナス値を指定すると、吹き出し本体の上端位置より    上側(マイナス方向)の相対位置に設定されるようです。 以下は、吹き出しを作成するサンプルマクロです。(※リンク先参照) 宜しければ試してみて下さい。 ※当方は、Excel2000で試してみました。 ■サンプルマクロ http://ideone.com/ydaky 添付画像は、上記マクロ実行後のシート画面です。 ※貼れていなかったり、見辛かった場合はすみません。 以上です。

Def67890
質問者

お礼

回答ありがとうございます! 無事変更することができました!! Adjustments.Item()は吹き出し以外のオートシェイプにも使えるようですね。 大変助かりました!!!

関連するQ&A

  • vbaで.top/.leftで指定する数値と列の幅/行の高さで指定する数値の関係

    エクセルでシートの枠線を方眼紙代わりにし、シート上に図形を並べてさまざまなことをしたいと思っています。 図形の位置をvbaで操作していきたいのですが、枠線の位置ときっちりあわせたいと思います。 そこでお尋ねしたいのですが、vbaで.top/.leftで指定する数値と、列の幅/行の高さで指定する数値の関係はどうなっているのでしょうか。 画面のサイズとも関係があるのでしょうか。

  • VBA 画像貼り付けのオプション指定法

    VBA初心者です。MS Office 201で,Excelに画像を貼り付けるとき,アスペクト比を保って幅を指定,位置をセルの位置で指定,名前を付けたいので,ネットを参考にして,以下の通りにしました。 Range("A6").Select 'A6の位置を指定 ActiveSheet.Pictures.Insert(myFile).Select 'myFileはあらかじめ設定 With ActiveSheet.Shapes(3) .LockAspectRatio = True .Width = 160 .Name = "Pict01" '名前はPict01 End With ここで,Shapes(3)の3は,画像やボタンがこのシートで3番目だからです。しかし,マクロ実行前に,ボタン等を増やすと変わってきてしまいます。この(3)の様な指定なしにできませんでしょうか。

  • EXCELのVBAで画像ファイルを呼び出し

    EXCELのVBAでセルに入力されているファイル名の画像ファイルを呼び出して、 トリミング、縮小→一旦切り取り、メタファイルで貼り付け→セルの真ん中に配置ということを行いたいです。 このようなVBAを組みましたが、bw = .Width でエラーが起こってしまいます。 一旦切り取りして貼り付けするコードを加えたらエラーになりました。 どのようにしたらきちんと希望の形ではりつけることができるでしょうか? よろしくお願いします。 Sub photocalltest() 'セルの値を取得して画像を貼り付け ' ' Dim i As Long For i = 2 To 5 ActiveSheet.Pictures.Insert ("C:\Documents and Settings\temp\" & Cells(7, i).Value & ".jpg") With ActiveSheet.Shapes(ActiveSheet.Shapes.Count) 'トリミング .PictureFormat.CropBottom = 95 .PictureFormat.CropRight = 57.78 .PictureFormat.CropLeft = 59.28 .PictureFormat.CropTop = 100 '縮小 .Height = 197.25 .Width = 162# .Cut 'Cells(7, i).Select ActiveSheet.PasteSpecial Format:="図 (拡張メタファイル)" '貼り付け位置指定 aw = Cells(7, i).Width bw = .Width //ここでオブジェクトが必要ですエラー x = (aw - bw) / 2 .Left = Cells(7, i).Left + x ah = Cells(7, i).Height bh = .Height y = (ah - bh) / 2 .Top = Cells(7, i).Top + y End With Next i End Sub

  • Excelで指定のセル上に図を配置したい

    Excel VBAで、シート上に図(四角形)を配置しようと思ってます。 イメージ的には、ALTキーを押しながらセルとぴったりフィットする図形(四角形)を作成したいのですが、マクロで生成したコードを見ると下記のように座標での指定になってます。 ActiveSheet.Shapes.AddShape(msoShapeRectangle, 102#, 210#, 76.5, 15#).Select もしこれをセルで指定する方法がありましたら教えて下さい。宜しくお願いします。

  • #の意味

    エクセルでオートシェイフ゜のマクロの記録をとったときに Sub Macro2() ActiveSheet.Shapes.AddShape(msoShapeFlowchartConnector, 100, 100#, 100, 100).Select End Sub のように TOPの後にシャーフ゜が入ります。 (expression.AddShape(Type, Left, Top, Width, Height)) これはどういう意味でしょうか? シャーフ゜があってもなくても新規のオートシェイフ゜が挿入できます。

  • Excel  VBAで 図形を描いてその中に文字を。

    教えて下さい。 エクセル2007 VBAで オートシェイプでフローチャートの三角形を描いて、 その中に「検索」などの文字を表示させることが必要になってきました。 どのように記述すればいいのですか? >ActiveSheet.Shapes.AddShape msoShapeIsoscelesTriangle, 560, 60, 70, 80 これで三角形は描画できますが、その中に文字を記入させるにはどうすればいいのかを教えて下さい。よろしくお願いします。

  • Excel VBAで、B列の幅を、既存のグラフの幅に設定したい。

    VBA初心者です。 ワークシート上にグラフを作成した後(例えば「グラフ1」とします)、B列の幅を作成したグラフの幅と同じに設定するには、どのように記述すればよいのしょうか? Columns("B").ColumnWidth = ActiveSheet.Shapes("グラフ1").Width Columns("B").Width = ActiveSheet.Shapes("グラフ1").Width Columns("B").ColumnWidth = ActiveSheet.Shapes("グラフ1").ColumnWidth どれもうまくいきませんでした。よろしくお願いします。

  • Excelでセル上の画像を別のセルにコピーするには

    いつも楽しく勉強させていただいております。 つぎのような処理をしたいのですが、うまくいきません。 1.セル1の上にある画像をセル2の上にコピーする。 2.コピーした画像をセル2の高さと幅にフィットさせる。 まず、このようなマクロを考えてみました。 Range("A1").CopyPicture Range("C1").Select ActiveSheet.Paste ActiveSheet.Shapes(Selection.Name).LockAspectRatio = msoFalse ActiveSheet.Shapes(Selection.Name).Top = Range("C1").Top ActiveSheet.Shapes(Selection.Name).Left = Range("C1").Left ActiveSheet.Shapes(Selection.Name).Height = Range("C1").Height ActiveSheet.Shapes(Selection.Name).Width = Range("C1").Width これですと元の画像がA1のセルより小さい場合、周囲に余白がある形でコピーされてしまいます。 C1にコピーしたら余白はなしでC1の大きさいっぱいに画像を引き延ばしたい(あるいは縮小したい)のです。 そこで次のように変更してみました。 (上のプログラムと一番上の行のみが違います)。 ActiveSheet.Shapes("図 6").Copy Range("C1").Select ActiveSheet.Paste ActiveSheet.Shapes(Selection.Name).LockAspectRatio = msoFalse ActiveSheet.Shapes(Selection.Name).Top = Range("C1").Top ActiveSheet.Shapes(Selection.Name).Left = Range("C1").Left ActiveSheet.Shapes(Selection.Name).Height = Range("C1").Height ActiveSheet.Shapes(Selection.Name).Width = Range("C1").Width これもうまくいきません。 A1にある元の"図 6"は動かしたくないのに、勝手にB1の位置に移動してしまいます。 というのは、"図 6"という画像をコピーすると、同じ名前で画像ができちゃうんですね。 コピー元とコピー先の両方の画像に対して位置や高さを設定することになるようです。 ということで、 1.セル1の上にある画像をセル2の上にコピーする。 2.コピーした画像をセル2の高さと幅にフィットさせる。 これを実現させるにはどうしたらいいでしょう。

  • エクセルVBA オートシェイプを操作したいです

    エクセルでセルの入力内容によって楕円をオートシェイプで出現させたいと思います。 http://oshiete1.goo.ne.jp/qa809742.htmlで見つかったものを参考にし、 Private Sub worksheet_Activate() Dim Shp As Shape Set P11 = Range("P11") If P11 Is Nothing Then Exit Sub If P11.Value = 1 Then For Each Shp In ActiveSheet.Shapes If Not Application.Intersect(Shp.TopLeftCell, _ Range("N14:N15")) Is Nothing Then Shp.Delete End If Next Shp With ActiveSheet.Range("N14:N15") ActiveSheet.Shapes.AddShape(Type:=msoShapeOval, _ Left:=.Left,TOP:=.TOP,Width:=.Width,Height:=.Height).Select Selection.ShapeRange.Fill.Visible = msoFalse End With Range("N14").Select Else For Each Shp In ActiveSheet.Shapes If Not Application.Intersect(Shp.TopLeftCell, _ Range("N14:N15")) Is Nothing Then Shp.Delete End If Next Shp End If If P11.Value = 2 Then For Each Shp In ActiveSheet.Shapes If Not Application.Intersect(Shp.TopLeftCell, _ Range("N16")) Is Nothing Then Shp.Delete End If Next Shp With ActiveSheet.Range("N16") ActiveSheet.Shapes.AddShape(Type:=msoShapeOval, _ Left:=.Left, TOP:=.TOP, Width:=.Width, Height:=.Height).Select Selection.ShapeRange.Fill.Visible = msoFalse End With Range("N16").Select Else For Each Shp In ActiveSheet.Shapes If Not Application.Intersect(Shp.TopLeftCell, _ Range("N16")) Is Nothing Then Shp.Delete End If Next Shp End If End Sub とつなげて見ました。 動くには動くのですが、データ元のセルがP11からT30と100セルあり、さらにP11に入力されるデータが1,2,3,4の4種類、AQ11に5,6,7,8,9の5種類などと、ばらばらです。 P11に1が入力されるとN14:N15(結合されています)に円が入り、2が入力されるとN16に円が入る。 Q11に5が入力されるとR13に円が入り、6が入力されるとR14:R15に円が入る・・・・のようにしたいのです。 一生懸命、セルNo.を打ち込んでいたら、 「コンパイルエラー:プロシージャが大きすぎます」とエラーが出てしまいました。 ループさせればよいのだろうと試してみたのですが、元のセルの指定方法や、オートシェイプの出現させるせるの指定方法がわかりません。 どのようにすれば、データー元の範囲を指定して、それに対応したセルにオートシェイプを出現させる事が出来るようになるでしょうか。 お知恵を貸していただけないでしょうか。よろしくお願い致します。

  • パワーポイントVBAでグラフのサイズ・位置を統一

    パワーポイントVBAに貼付けた複数のグラフサイズを統一したいと思っています。 1~20枚目のスライドに、それぞれ2つのグラフが貼付けてあります。 全てのグラフサイズ・位置を統一したいと思い、以下の様なVBAを書いてみました。 ---------- Sub 表サイズの統一() Dim myTop1, myLft1, myHgt1, myWdt1, cnt, i, myTop2, myLft2, myHgt2, myWdt2 With ActivePresentation.Slides(1).Shapes(1) myTop1 = .Top myLft1 = .Left myHgt1 = .Height myWdt1 = .Width End With With ActivePresentation.Slides(1).Shapes(2) myTop2 = .Top myLft2 = .Left myHgt2 = .Height myWdt2 = .Width End With cnt = ActivePresentation.Slides.Count For i = 2 To cnt With ActivePresentation.Slides(i).Shapes(1) .Top = myTop1 .Left = myLft1 .Height = myHgt1 .Width = myWdt1 End With Next For i = 2 To cnt With ActivePresentation.Slides(i).Shapes(2) .Top = myTop2 .Left = myLft2 .Height = myHgt2 .Width = myWdt2 End With Next End Sub ---------- 各スライドにある1つ目のグラフのサイズは統一出来たのですが、2枚目のグラフは何の変化もおきません。 どこが悪いのか、どなたかご教示頂ければ幸いです。 どうぞよろしくお願い致します。