• ベストアンサー

エクセルVBAでLineの一括処理

ワークシート上に配置した複数のオートシェープの線(Lines)に対し、一括して太さと色を変えるにはどのようなコードになるのでしょうか? 勿論以下のTEST01のように名前で指定すれば可能なのですが、TEST02のような全てのLineということはできないのでしょうか? Sub Test01() With ActiveSheet.Shapes.Range(Array("Line 259", "Line 260")) .line.Weight = 1.75 .line.ForeColor.SchemeColor = 13 End With End Sub ↓実行時エラーとなる Sub Test02() With ActiveSheet.Lines .line.Weight = 2.5 .line.ForeColor.SchemeColor = 10 End With End Sub

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 「実行時エラー'1004'アプリケーション定義またはオブジェクト定義エラーです」 ということですね。 今、XL2000, XL200両方試してみましたが、エラーは出ず、そのまま実行できます。また、OSもWin98で試してみたり、モジュールを変えてみたりしましたが、エラーが再現できません。何か、別の要因が働いているようです。 >数が多いので、出来ればループは避けたいのです。 ってありましたが、もしかして、実際は、もう描いたり・消したりを数多く繰り返していませんか? 新規のシートにすればできるものでも、あまり数多く、オートシェイプを入れだししていると、調子が悪くなることがあります。そうなると、そのままでは直しようがないような気がしますね。 With ActiveSheet.Lines '←ここまでは、確保できるのでしょうか?  With .ShapeRange '←ここは?

merlionXX
質問者

お礼

有難うございます。 今、自宅の2003で、あたらしいBOOKでやったらOKでした。 多分、他の原因だったのでしょうね。 うまく行きました。 いつもいつもお世話になります。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 With ActiveSheet.Lines    ↓ With ActiveSheet.Lines.ShapeRange としたらいかがですか?

merlionXX
質問者

お礼

ありがとうございました。 Sub Test04() With ActiveSheet.Lines.ShapeRange .line.Weight = 2.5 .line.ForeColor.SchemeColor = 10 End With End Sub としてみましたが、実行時エラーで 定義エラーとでました。 With ActiveSheet.Lines.ShapeRangeが反転します。

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

取り合えずループでどうでしょう。 Sub Test03() Dim sh As Shape For Each sh In ActiveSheet.Shapes  If sh.Type = msoLine Then    sh.Line.Weight = 2.5    sh.Line.ForeColor.SchemeColor = 10 End If Next sh End Sub

merlionXX
質問者

お礼

ありがとうございます。 数が多いので、出来ればループは避けたいのです。

関連するQ&A

  • エクセルVBAのWith~End With構文

    Win2000エクセル2000です。 下記のMacro11はTEST11のようにWith~End Withでくくれると思うのですがエラーになります。 どこがおかしいのでしょうか? Sub Macro11() ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120).Select Selection.ShapeRange.Line.Weight = 0.75 Selection.ShapeRange.Line.ForeColor.SchemeColor = 64 Selection.ShapeRange.Fill.ForeColor.SchemeColor = 10 Selection.ShapeRange.Fill.OneColorGradient msoGradientFromCorner, 1, 0.59 Selection.ShapeRange.Adjustments.Item(1) = 0.3016 Selection.ShapeRange.ThreeD.SetThreeDFormat msoThreeD7 Selection.ShapeRange.ThreeD.PresetMaterial = msoMaterialMetal Selection.ShapeRange.ThreeD.Depth = 144# End Sub Sub TEST11() With ActiveSheet.Shapes.AddShape(msoShapeSun, 450, 150, 120, 120) .ShapeRange.Line.Weight = 0.75 .ShapeRange.Line.ForeColor.SchemeColor = 64 .ShapeRange.Fill.ForeColor.SchemeColor = 10 .ShapeRange.Fill.OneColorGradient msoGradientFromCorner, 1, 0.59 .ShapeRange.Adjustments.Item(1) = 0.3016 .ShapeRange.ThreeD.SetThreeDFormat msoThreeD7 .ShapeRange.ThreeD.PresetMaterial = msoMaterialMetal .ShapeRange.ThreeD.Depth = 144# End With End Sub

  • エクセルVBAでShapeRangeについて

    すみません、教えてください。 以下のマクロは正常に動きます。 Sub TEST() With ActiveSheet For Each s In .Shapes If s.AutoShapeType = msoShape5pointStar Then s.Delete Next .Cells.Interior.ColorIndex = 1 Set AA = .Shapes.AddShape(msoShape5pointStar, 55, 22, 25#, 25#) AA.Fill.Visible = msoTrue AA.Fill.Solid AA.Fill.ForeColor.SchemeColor = 13 AA.Fill.Transparency = 0# AA.line.Weight = 0.75 AA.line.DashStyle = msoLineSolid AA.line.Style = msoLineSingle AA.line.Transparency = 0# AA.line.Visible = msoTrue AA.line.ForeColor.SchemeColor = 64 ' AA.Copy '(1) ' .Paste '(1) ' Set AB = Selection '(1) ' .Range("A1").Select'(1) Set AB = AA.Duplicate '(2) AB.Top = 44 AB.Left = 110 ' AB.ShapeRange.Fill.ForeColor.SchemeColor = 10'(1)の2 AB.Fill.ForeColor.SchemeColor = 10 '(2)の2 End With End Sub ところが、 Set AB = AA.Duplicate '(2)の部分を、コメントアウトしている '(1)の記述に変えると、 AB.Fill.ForeColor.SchemeColor = 10 '(2)の2 の部分も ' AB.ShapeRange.Fill.ForeColor.SchemeColor = 10'(1)の2 に変えないとエラーになります。 ' AA.Copy '(1) ' .Paste '(1) ' Set AB = Selection '(1) も Set AB = AA.Duplicate '(2) も、同じことのように思えるのですが、この違いで、ShapeRangeというのを入れたり消したりしなければならないのはどうしてでしょうか? エクセルは2000です。

  • エクセルVBAでオートシェープを円く動かしたい。

    星型をシート上で回転しながらぐるっと円周のように動かそうと、ためしに下記のマクロを書きましたが、やはり方向転換がぎこちなく、スムーズな丸い動きにはなりません。 かと言って、上下左右以外に動かす方法はないでしょうし、何かいいやり方はないでしょうか? Sub Star() With ActiveSheet.Shapes.AddShape(msoShape5pointStar, 273#, 43#, 50#, 50#) .Fill.ForeColor.SchemeColor = 13 .Line.Weight = 0.75 .Line.ForeColor.SchemeColor = 64 For i = 1 To 180 a = 1 b = 1 If i > 90 Then a = -1 If i < 45 Or i > 135 Then b = -1 .IncrementRotation 2 .IncrementTop 2 * a .IncrementLeft -2 * b DoEvents Next End With End Sub

  • エクセルで、最背面に移動と塗りつぶしなし

    先ほど、最背面に移動を Dim sp As Shape Set sp = ActiveSheet.Shapes.AddShape(msoShapeOval, 340, 140, 73, 52) With sp With .Line .Weight = xlThin .ForeColor.SchemeColor = 10 End With .ZOrder msoSendToBack End With の様に教えていただきました。しかし、併せてオートシェイプの書式設定で塗りつぶしの色の「塗りつぶしなし」を設定したいのです。 自動記録に試して見ましたが,エラーが出て上手くいきません。よろしくお願いします。

  • Excelの罫線に関するマクロ

    Excelの罫線に関するマクロ 罫線を引き、それを赤くするマクロを作ったのですが、赤罫線の下にもうひとつ罫線が表示されてしまいます。どこを削除すればよいのでしょうか。 ご教示お願いいたします。 Sub 罫線() Dim T1 As Single, L1 As Single Dim T2 As Single, L2 As Single Dim myShp As Shape With Range("c15") T1 = .Top L1 = .Left End With With Range("d14") T2 = .Offset(1, 1).Top L2 = .Offset(1, 1).Left End With Set myShp = ActiveSheet.Shapes.AddLine(L1, T1, L2, T2) ActiveSheet.Shapes.AddLine(L1, T1, L2, T2).Select With Selection.ShapeRange.Line .Visible = msoTrue .Style = msoLineSolid .Weight = 5# .ForeColor.SchemeColor = 10 End With End Sub よろしくお願いします。

  • Excelのセル内にある図形を削除したいのです。

    皆様おはこんばんちわ。 セル(Ex.B2,B3,B4)をダブルクリックする度に、そのセル内にオートシェイプを描画/削除したいのです。 描画は下記(で良いのかですが)で出来たのですが、削除がどうしてもわかりません。 ------------------------------------------------------------------------- Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("B2:B4")) Is Nothing Then Exit Sub With ActiveCell With ActiveSheet.Shapes.AddShape _ (msoShapeOval, .Left, .Top, .Width, .Height) .Fill.Visible = msoFalse .Line.Weight = 1.75 .Line.ForeColor.SchemeColor = 0 End With End With End Sub ------------------------------------------------------------------------- 既に図形があるセルをダブルクリックで削除するにはどの様な方法があるのでしょうか。 バージョンはExcel2007です。 皆様よろしくご教示ください。

  • エクセルVBAでの複数のオートシェイプの色塗り方法

    ネットから下記のコードを見つけたのですが、1つのシートに複数のオートシェイプの色塗りを変更する方法を教えてください。 例えばセル"A1"には数値の1と"A2"には数値2を入力したら、 オートシェイプAにはセル"A1"に対応した色塗り『赤色』を オートシェイプBにはセル"A2"に対応した色塗り『黄色』といった感じです。 下記のコードをいくつも繋げれば、複数のオートシェイプの色塗りが出来ると思ったのですが、コードを繋げる方法がわかりません。その他に何か良い方法がありましたら教えてください。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) <> "A1" Then Exit Sub With ActiveSheet.Shapes("ABC").Fill.ForeColor Select Case Target.Value Case Is = "赤" .SchemeColor = 2 Case Is = "黄" .SchemeColor = 5 Case Is = "緑" .SchemeColor = 3 Case Is = "青" .SchemeColor = 4 Case Else .SchemeColor = 1 End Select End With End Sub

  • エクセルVBAでオートシェープの連番はいくつまで使えますか?

    シート上にオートシェープを配置すると、自動で名前と番号が振られます。(直線 125 とか 図 126とか) この番号は連番になっており、配置したオートシェープを全て削除してファイルを保存しても、次回はオートシェープが何もないにもかかわらず、次の番号から採番されます。 この番号はいったい幾つまで続くのでしょうか? 下記VBAを試してますが、現在7万番台でもまだ有効に採番されます。 ある番号になったらそれ以上オートシェープが作れなくなるという話も聞きましたので質問します。 Sub test01() Randomize With ActiveSheet .Cells.Interior.ColorIndex = 1 CL = Int((50 * Rnd) + 1) L1 = Int((700 * Rnd) + 20) H1 = Int((450 * Rnd) + 20) Set SA = .Shapes.AddShape(msoShape5pointStar, L1, H1, 25, 25) SA.Name = "Merlion_" & SA.Name SA.Fill.ForeColor.SchemeColor = CL For n = 1 To 100 CL = Int((50 * Rnd) + 1) L2 = Int((600 * Rnd) + 20) H2 = Int((300 * Rnd) + 20) SA.Top = H2 - SA.Width / 2 SA.Left = L2 - SA.Height / 2 SA.Fill.ForeColor.SchemeColor = CL Set SL = .Shapes.AddLine(L1, H1, L2, H2) SL.Name = "Merlion_" & SL.Name Application.StatusBar = SL.Name SL.line.Weight = 0.75 SL.line.ForeColor.SchemeColor = CL L1 = L2 H1 = H2 Next SA.ZOrder msoBringToFront SA.line.Visible = True SA.line.ForeColor.SchemeColor = CL For i = 1 To 800 Step 60 SA.Rotation = i / 10 SA.line.Weight = i DoEvents Next For Each s In .Shapes If s.Name Like "Merlion_*" Then s.Delete Next .Cells.Interior.ColorIndex = xlNone End With End Sub

  • エクセルVBAでフォームの無効化

    エクセル2000です。 ワークシート上に配置した、フォームのDropDown (コンボボックス)を一定の条件下で無効にしようと思い、下記のTEST1のようにやってみました。 Sub TEST1() ActiveSheet.Shapes.Range(Array("Drop Down 7", "Drop Down 8", "Drop Down 9")).Select Selection.Enabled = False End Sub うまくいきました。そこで Sub TEST2() ActiveSheet.Shapes.Range(Array("Drop Down 7", "Drop Down 8", "Drop Down 9")).Enabled = False End Sub のように書き換えたところ実行時エラーがでました。 下記のようにばらせばうまくいきますが、どうしてTEST2ではダメなのかわかりません。 ご教示ください。 Sub TEST3() With ActiveSheet .DropDowns("Drop Down 7").Enabled = False .DropDowns("Drop Down 8").Enabled = False .DropDowns("Drop Down 9").Enabled = False End With End Sub

  • EXCEL VBA これであっていますか?

    エクセルに地図を貼り付け、その中のある地点Aから半径1キロ、2キロ、3キロといった具合に円を描いています。ある地点B、Cも同様に円があります。セルに“A” と入力した際に該当する地点の円(1キロ、2キロ、3キロの3種類)を赤く表示し、終了すると円が消える(線なしに変わる)ようにするために以下のようなVBAを組みました。が、円が2つしか赤くならなかったり、 ばあいによっては「インデックスが境界を超えています」とエラーが出たりします。 どうしたら良いか教えてください。 Sub iro() Dim i As Variant i = InputBox("表示する地点を指定してください", "地点指定") If i = "A" Then ActiveSheet.Shapes(1).Select ActiveSheet.Shapes(2).Select ActiveSheet.Shapes(3).Select Replace:=False hyoji MsgBox "表示を終了してよろしいですか", vbOKOnly ActiveSheet.Shapes(1).Select ActiveSheet.Shapes(2).Select ActiveSheet.Shapes(3).Select Replace:=False modosu ElseIf i = "B" Then ActiveSheet.Shapes(4).Select ActiveSheet.Shapes(5).Select ActiveSheet.Shapes(6).Select Replace:=False hyoji MsgBox "表示を終了してよろしいですか", vbOKOnly ActiveSheet.Shapes(4).Select ActiveSheet.Shapes(5).Select ActiveSheet.Shapes(6).Select Replace:=False Else MsgBox "指定した地点がありません", vbOKOnly End If End Sub Sub hyoji() Selection.ShapeRange.Line.Visible = msoTrue '「線なし」に設定されている場合、線を表示 Selection.ShapeRange.Line.ForeColor.SchemeColor = 10 Range("A1").Select End Sub Sub modosu() Selection.ShapeRange.Line.Visible = msoFalse '「線なし」に設定 Range("A1").Select End Sub

専門家に質問してみよう