• ベストアンサー

エクセルマクロに詳しい方

いつもご質問ばかりで申し訳ございません。 エクセルのマクロで質問なんですが、ある列のある範囲(例えばG列の3~20)の各セルの間(G3とG4、G4とG5といった感じです)にオートシェイプの矢印マークを書き込む マクロって可能なのでしょうか?矢印の向きは左向きで、長さは矢印のみぐらいの長さで、矢印の角度はなしです。 もしこんなマクロが可能なら教えて下さい。 よろしくお願い致します。          以  上

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.6

#5です。補足に関して Sub test02() For i = 3 To 9 t = Cells(i, "G").Top l = Cells(i, "G").Left w = Cells(i, "G").Width h = Cells(i, "G").Height ActiveSheet.Shapes.AddLine(l + w / 5, t + h / 2, l - w / 5, t + h / 2).Select Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle Selection.ShapeRange.Line.EndArrowheadLength = msoArrowheadLengthMedium Selection.ShapeRange.Line.EndArrowheadWidth = msoArrowheadWidthMedium Next i End Sub で良いですか。

GACHAMAN
質問者

お礼

ありがとうございました。 返事が遅れて申し訳ありません。 病に倒れておりました。 今のままですと 各行の中心になりますが、これを行と行の間にするにはどうしたらよいでしょうか?

その他の回答 (5)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

隣接セルの間に下向き矢印を引く、で良いですね。 G列セルの真中にセル高の1/3の高さの長さで矢印を書きました。第2行から9行までにしてます。 Sub test02() For i = 3 To 9 t = Cells(i, "G").Top l = Cells(i, "G").Left w = Cells(i, "G").Width h = Cells(i, "G").Height ActiveSheet.Shapes.AddLine(l + w / 2, t - h / 3, l + w / 2, t + h / 3).Select Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle Selection.ShapeRange.Line.EndArrowheadLength = msoArrowheadLengthMedium Selection.ShapeRange.Line.EndArrowheadWidth = msoArrowheadWidthMedium Next i End Sub

GACHAMAN
質問者

補足

ありがとうございます。 質問の仕方がわるかったですかね。^^ ただ早速試してみました。 このマクロにおいていまの矢印の向きを下向きではなく左向きにし なおかつ、 矢印の先頭を列と列の間(F列とG列の間)になるようにするにはマクロをどのように変更すればよいのでしょうか?

  • WWolf
  • ベストアンサー率26% (51/192)
回答No.4

汎用性を考慮して下記を参考にしてください。 宣言など省いてます Sub test() For i = 1 To 6 'A to H列幅合計 a = Worksheets(1).Cells(1, i).Width b = b + a Next c = b d = Worksheets(1).Cells(1, 7).Width 'G列幅 e = InputBox("何行目から?") f = InputBox("何行目まで?") If Val(e) < Val(f) Then For i = 1 To e g = ActiveCell.Height p = h + g Next For i = e To f Worksheets(1).Cells(i, 7).Select p = p + ActiveCell.Height ActiveSheet.Shapes.AddLine(c, p, c + d, p).Select Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle Next End If End Sub

  • jurarumin
  • ベストアンサー率34% (190/544)
回答No.3

先ほどの引数説明の修正です。 引数の順番は、「x軸:開始位置、y軸:開始位置、x軸:長さ、y軸:長さ」となります。 また、 矢印の向きは、 左:msoShapeLeftArrow 右:msoShapeRightArrow 上:msoShapeUpArrow 下:msoShapeDownArrow 線の矢印の場合 ActiveSheet.Shapes.AddLine(10, 100, 100, 100).Select Selection.ShapeRange.Line.EndArrowheadStyle = msoArrowheadTriangle Selection.ShapeRange.Line.EndArrowheadLength = msoArrowheadLengthMedium Selection.ShapeRange.Line.EndArrowheadWidth = msoArrowheadWidthMedium Selection.ShapeRange.Flip msoFlipHorizontal として引数の2番目と4番目を変更していけば良いと思います。 ※2番目と4番目の引数は、同じ値にすると左向きの矢印となります。

GACHAMAN
質問者

お礼

ありがとうございました。

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

マクロの記録機能で試してみれば一発ですが。 ActiveSheet.Shapes.AddShape msoShapeLeftArrow, 300, 100, 100, 100 数字を適当に変えて整えて下さい。 左から順に「文書の左上隅を基準として」 オートシェイプの左端と上端の位置、 オートシェイプの幅と高さです。 問題は列の幅や削除をしてしまうと位置も同じように調整する必要があるということです。

  • jurarumin
  • ベストアンサー率34% (190/544)
回答No.1

可能です。 例としては以下のようにすると左向き矢印が作成されます。 Dim i As Integer For i = 0 To 2 ActiveSheet.Shapes.AddShape(msoShapeLeftArrow, 100, 10 + (20 * i), 100, 10).Select '引数説明 y軸:開始座標、x軸:長さ、y軸:長さ Next i

関連するQ&A