Excel2003マクロで複数の罫線を引きたい

このQ&Aのポイント
  • Excel2003のマクロで複数のセルにわたる罫線を引く方法を教えてください。
  • 既に一部のセルに赤の太線を表示するマクロを作成しましたが、A列の10行目からC列の14行目にも罫線を追加したいです。どのように書き加えれば良いでしょうか?
  • お手数ですが、ご教示よろしくお願いします。
回答を見る
  • ベストアンサー

Excel2003のマクロで複数の罫線を引きたい

Excel2003のマクロで複数の罫線を引きたい 本日(3月2日)の午前中に罫線のVBAに関する質問をして解決したのですが、今度は複数のセルにわたる罫線を複数引きたいのですが、ご教示お願いいたします。 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 このコードで(14行目と15行目の間、C列からD列)に赤の太線が表示されるようになりました。 さらにこれに加えて一度で、この罫線プラスA列の10行目からC列の14行目に引く罫線を加えたいのですが 上記コードにどのように書きくわえれば良いのでしょうか。 たびたびですみませんが、ご教示よろしくお願いいたします。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

前の質問に回答した、myRangeです。 >Set myShp = ActiveSheet.Shapes.AddLine(L1, T1, L2, T2) これ、削除するんじゃなかった????(^^;;; >このコードで(14行目と15行目の間、C列からD列)に赤の太線が表示されるようになりました。 これでは、14行目と15行目の間ではなくて、15行目の枠線上に引かれますよね。 >さらにこれに加えて一度で、この罫線プラスA列の10行目からC列の14行目に引く罫線を加えたいのですが 情報が不足です。 (1)セルA10の上端から、セルC14の上端へ引く (2)セルA10の上端から、セルC14の下端へ引く (3)セルA10の下端から、セルC14の上端へ引く (4)セルA10の下端から、セルC14の下端へ引く さて、どれでしょうか。 恐らく、最初の線に繋げるのでしょうね。 '--------------------------- With Range("A10")   T1 = .Top   L1 = .Left End With With Range("C15")   T2 = .Top   L2 = .Left End With ActiveSheet.Shapes.AddLine(L1, T1, L2, T2).Select With Selection.ShapeRange.Line   .Visible = msoTrue   .Style = msoLineSolid   .Weight = 5#   .ForeColor.SchemeColor = 10 End With '----------------------------------------- 上記の線と違ったらどこを変えればいいかわかりますね。 以上です。  

raunder
質問者

お礼

どうにか複数の罫線を同時に表示させることができました。 またまた、ありがとうございました。 感謝しています。では。

raunder
質問者

補足

>Set myShp = ActiveSheet.Shapes.AddLine(L1, T1, L2, T2) これ、削除するんじゃなかった????(^^;;; すみません最初に質問したコードを貼り付けてしまったもので。 >14行目と15行目の間ではなくて、15行目の枠線上に引かれますよね。 そのとおりです。 この罫線と(1)セルA10の上端から、セルC14の上端へ引く の計2本の罫線を同時に引きたいという内容でした。 言葉足らずで申し訳ありませんでした。

関連するQ&A

  • 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のinputboxでのエラーについて

    線を引く構文を作り動作はするのですが、inputboxでウインドウの「×」や「キャンセル」ボタンを押すとエラーになるのを回避したいのですが、判りません。ご教示お願いいたします。 Sub 赤太線引き() Dim i As String i = Application.InputBox("線を伸縮できます" + Chr(13) + "数値を増してください", "オプション", 1, Type:=1) Dim T1 As Single, L1 As Single Dim T2 As Single, L2 As Single Dim myShp As Shape With Range("ah61") T1 = .Top L1 = .Left End With With Range("cg60") T2 = .Offset(1, 1).Top L2 = .Offset(1, 1).Left End With ActiveSheet.Shapes.AddLine(L1 + i, T1, L2, T2).Select With Selection.ShapeRange.Line .Visible = msoTrue .Style = msoLineSolid .Weight = 15# .ForeColor.SchemeColor = 10 Selection.ShapeRange.ZOrder msoSendToBack End With Range("bq56").Select End Sub VBAの素人ですが、×やキャンセルでは「i」が返せないのだと思います。よろしくお願い致します。 inputboxは関数でもメソッドでもどちらでもいいのですが。

  • エクセルのマクロについて

    エクセル2010を使用しています。 工程表を作成するため、以下のマクロを組もうと苦戦しています。 任意のセルを選択し、マクロを実行すると選択したセルに線を引き 線の上部にテキストボックスで文字を入力できるようにするマクロを 作成しようとしています。 また、テキストボックスは文字入力後、大きさの自動調整をかけようと しています。 線を引くところまでは、うまくいったのですがテキストボックスの挿入→入力待機 →入力後、大きさの自動調整(幅)までのマクロがよくわかりません。 可能であれば、任意の選択したセルの中央に配置をしたいです。 お知恵をお貸しください。よろしくお願いします。 koutei() Dim SentakuTop As Single Dim SentakuLeft As Single Dim SentakuWidth As Single Dim SentakuHeight As Single Dim SentakuAddress As String Dim X0, Y0, X1, Y1 As Variant SentakuAddress = Selection.Address(ColumnAbsolute:=False, RowAbsolute:=False) With ActiveSheet.Range(SentakuAddress) SentakuTop = .Top SentakuLeft = .Left SentakuWidth = .Width SentakuHeight = .Height End With X0 = SentakuLeft Y0 = SentakuTop + SentakuHeight / 2 X1 = SentakuLeft + SentakuWidth Y1 = Y0 With ActiveSheet.Shapes.AddLine(X0, Y0, X1, Y1).Line .ForeColor.RGB = RGB(0, 0, 0) .Weight = 1 .BeginArrowheadStyle = msoArrowheadOval .EndArrowheadStyle = msoArrowheadOval End With End Sub

  • 複数のエクセルシートをまとめるマクロ

    下は複数のエクセルファイルを一つにするマクロですが、100万件を超えるためcsvで保存するようにするにはどこを変更したらよいでしょうか。 よろしくお願いします。 Sub Sample() Dim t As Single Dim strPath As String Dim strFileName As String Dim WB1 As Workbook Dim WS1 As Worksheet Dim WS2 As Worksheet Dim lngRowCount As Long 'A列に値が入っているデータ数 t = Timer 'まとめたいシート Set WS2 = ThisWorkbook.Worksheets(1) strPath = ThisWorkbook.Path strFileName = Dir(strPath & "\*.xls*") Do While strFileName <> "" If strFileName <> ThisWorkbook.Name Then Set WB1 = Workbooks.Open(strPath & "\" & strFileName) Set WS1 = WB1.Worksheets(1) With WS1.Range("A1") lngRowCount = .Worksheet.Cells(.Worksheet.Rows.Count, .Column).End(xlUp).Row - .Row If lngRowCount >= 1 Then With .Resize(lngRowCount, 14).Offset(1) .Copy WS2.Range("A" & WS2.Rows.Count).End(xlUp).Offset(1) End With End If End With WB1.Close False End If strFileName = Dir Loop MsgBox "まとめ処理をしました。処理時間 " & Format((Timer - t) / 60 / 60 / 24, "h:mm:ss") End Sub

  • Excelマクロ 任意の複数範囲で同じ処理

    お世話になります。 まだ自力ではコードをろくに書けないような初心者です。 dim 行番号 as integer dim ws as worksheet for each ws in worksheet for 行番号 = 10 to 46 with ws.cells(行番号,8)  .value = .offset(0,-4).value - .offset(0,-1).value end with next 行番号 next ws この計算を、H列だけでなく、H列からAV列までで5列おきに行ないたく、コードを足しました。 ---------- dim 行番号 as integer  dim 列番号 as integer dim ws as worksheet for each ws in worksheet for 行番号 = 10 to 46 for 列番号 = 8 to 48 step 5  with ws.cells(行番号,列番号)  .value = .offset(0,-4).value - .offset(0,-1).value end with next 行番号 next 列番号 next ws ---------- 自分なりに考えて作ったのですが、実行すると「実行時エラー'13' 型が一致しません」と出ます。 8枚目くらいのシートで処理は止まっています。 黄色くなるのは .value = .offset(0,-4).value - .offset(0,-1).value ですが、 with ws.cells(行番号,列番号)の「列番号」に数字を入れるとエラーにならないので、計算ではなく範囲指定がまずいんだと思います。 (そもそも元のコードは別の質問でご教示いただいたものなので、そこが間違っているとは思えません。) ヘルプを見ても難しく、理解できませんでした。 どのように修正すれば良いのか、教えていただけませんでしょうか。 現状、自分で思いつくのは列番号を変えて繰り返し記述することだけです。 なるべくシンプルに書く方法を知りたいので、ここで質問させていただきます。 ヒントだけでも結構です。 よろしくお願い致します。

  • マクロで線に色をつけるには

    WINDOWS XP EXCELL2003です。 現在、下記のマクロがあります。 それに追加として「赤の線の色」を追加したいのです。(.ColorIndex = 3) いろいろトライを試みましたがうまくいきません。 恐れ入りますがご指導いただけませんでしょうか。 よろしく御願いします。 Sub yokosen_chuuou() Dim yokohaba As Single, tatehaba As Single Dim yoko As Double, takasa As Double Dim shita As Double, migi As Double Dim futosa As Single, mannaka As Double On Error GoTo trap futosa = Val(InputBox("太さを指定してください?", "整数入力", 1)) tatehaba = Selection.Height takasa = ActiveCell.Top shita = takasa + tatehaba yoko = ActiveCell.Left yokohaba = Selection.Width migi = yoko + yokohaba mannaka = (shita - takasa) / 2 + takasa ActiveSheet.Shapes.AddLine(yoko, mannaka, migi, mannaka).Select With Selection .ShapeRange.Line.Weight = futosa .Placement = xlMoveAndSize End With trap: End Sub

  • マクロdictionaryオブジェクト書き換え

    ここで教えていただいたマクロを   シート1のF列を検索値として   シート2のA列を検索しヒットしたら   シート2の該当行のD列をシート1のAE列に転記。   データの2列目から行う。ヒットしない場合は 無 と転記。 と変更したくて記述を書き換えたらシート1が壊れてしまいました。 正しい記述を教えてください。 ↓教えていただいた書き換え前の正常動作する記述↓ Sub 検索() 'dictionaryオブジェクトを使用 'シート1のA列を検索値として 'シート2のA列を検索しヒットしたら 'シート2の該当行のE列をシート1のC列に転記 'データの2行目から行う。ヒットしない場合は無しと転記 Dim dic As Object Dim i As Long Dim v, w Dim t As Single t = Timer With Sheets("Sheet2") '返す値を指定E列 With .Range("E2", .Cells(.Rows.Count, 1).End(xlUp)) '検索する列指定 (1)=A列 v = .Columns(1).Value '返す値のある列指定 (5)=E列 w = .Columns(5).Value End With End With Set dic = CreateObject("scripting.dictionary") For i = 1 To UBound(v) dic(v(i, 1)) = i Next With Sheets("Sheet1") '検索値のある列指定 A列 With .Range("A2", .Cells(.Rows.Count, 1).End(xlUp)) v = .Value For i = 1 To UBound(v) If dic.exists(v(i, 1)) Then v(i, 1) = w(dic(v(i, 1)), 1) Else v(i, 1) = "無" End If Next '転記する列を指定 Offset(, 2)=検索値のA列より右2つ→C列 With .Offset(, 2) .ClearContents .Value = v End With End With End With Set dic = Nothing Debug.Print Timer - t End Sub ---- ↓書き換えておかしな動きになった物 ●の部分を変更しました↓ Sub 検索02() 'dictionaryオブジェクトを使用 'シート1のF列を検索値として 'シート2のA列を検索しヒットしたら 'シート2の該当行のD列をシート1のAE列に転記 'データの2行目から行う。ヒットしない場合は無しと転記 Dim dic As Object Dim i As Long Dim v, w Dim t As Single t = Timer With Sheets("Sheet2") '返す値を指定D列● With .Range("D2", .Cells(.Rows.Count, 1).End(xlUp)) '検索する列指定 (1)=A列 v = .Columns(1).Value '返す値のある列指定 (4)=D列● w = .Columns(4).Value End With End With Set dic = CreateObject("scripting.dictionary") For i = 1 To UBound(v) dic(v(i, 1)) = i Next With Sheets("Sheet1") '検索値のある列指定 F列● With .Range("F2", .Cells(.Rows.Count, 1).End(xlUp)) v = .Value For i = 1 To UBound(v) If dic.exists(v(i, 1)) Then v(i, 1) = w(dic(v(i, 1)), 1) Else v(i, 1) = "無" End If Next '転記する列を指定  'Offset(, 25)=検索値のA列より右25個→AE列● With .Offset(, 25) .ClearContents .Value = v End With End With End With Set dic = Nothing Debug.Print Timer - t End Sub

  • 最終セルまでデータを反映させるマクロ

    あるサイトからの利用コードです。 それをアレンジしようとしましたが、つまずきました。 マクロコードをご教示ください。 あるフォルダに複数のエクセルファイルがあります。 構成が同じシート(名前は同じ。仮に "各シート")を、 別ブック(仮に "まとめ")の一つのシートに纏めます。 その時、複数ファイルの D4のデータだけは "まとめ"ブックのL列に反映させたいのですが、 下記コードを使用すると、どこにどのようなコードを入れたら良いのでしょうか? 因みに複数ファイルの8行目からコピーされ、 複数ファイルのCからM列は まとめブックのAからK列に反映されるようになってます。 (まとめブックの1行目は見出し) Dim i As Integer Dim strPath As String Dim strFileName As String Dim WB1 As Workbook Dim WS1 As Worksheet Dim WS2 As Worksheet Dim lngRowCount As Long Set WS2 = Sheets("まとめ") strPath = ThisWorkbook.Path strFileName = Dir(strPath & "\*.xls*") Do While strFileName <> "" If strFileName <> ThisWorkbook.Name Then Set WB1 = Workbooks.Open(strPath & "\" & strFileName) Set WS1 = WB1.Sheets("各シート") With WS1.Range("C7") lngRowCount = .Worksheet.Cells(.Worksheet.Rows.Count, .Column).End(xlUp).Row - .Row If lngRowCount >= 1 Then With .Resize(lngRowCount, 11).Offset(1) .Copy WS2.Range("A" & WS2.Rows.Count).End(xlUp).Offset(1) End With End If End With _____ここで つまずく_____    With WS1.Range("D4")     .Copy WS2.Range("L" & WS2.Rows.Count).End(xlUp).Offset(1)     WS2.Range("L" & WS2.Rows.Count).End(xlUp).AutoFill Destination = Range("E1048576").End(xlUp).Row _____ここまで つまずく_____ WB1.Close False End If strFileName = Dir Loop End Sub エクセル2013です。 宜しくお願い致します。

  • エクセルのマクロについて

    下記は、A列3行の7文字目~10文字と B列5行~文字のある最後の行までの範囲の左から1文字目~4文字 に相違がある場合 MsgBox i & “行目” を出す。 というマクロなのですが、『B列5行~文字のある最後の行までの範囲』の中でも『空白のセルに関してはMsgBox不要』というふうに付加えたいのですがどのようにすればよいでしょうか。 Sub Macro1() Dim i As Long Dim sOrgText As String Dim ltotal As Long With ActiveSheet sOrgText = Mid(.Cells(3, 1), 7, 4) ltotal = .Cells(65536, 2).End(xlUp).Row For i = 5 To ltotal If Not Mid(.Cells(i, 2), 1, 4) = sOrgText Then MsgBox i & "行目" End If Next i End With End Sub

  • マクロが実行しない

     二行三列を一枡として月の勤務割表を作成しています。マクロで同じ事を しているのにMacro1の方が実行しません。お教え願えませんでしょうか。 (尚、図形を枠線上にコピペしています。) Sub Macro1()実行しません。 Dim i As Integer Dim j As Integer For i = 10 To 43 Step 2 For j = 10 To 103 Step 3 Select Case Cells(i, j).Value Case 1: ActiveSheet.Shapes("四角形1").Select Selection.Copy Cells(i + 1, j + 1).Select ActiveSheet.Paste End Select Next Next End Sub Sub Macro2()実行します。 ActiveSheet.Shapes.Range(Array("四角形1")).Select Selection.Copy Range("J11:K11").Select ActiveSheet.Paste End Sub

専門家に質問してみよう