• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAについて)

Excel VBAで指定範囲の外枠に四角形を描くマクロを作成したが、数値を変えると以前の四角形が残ってしまう問題について

このQ&Aのポイント
  • Excel VBAを使用して、指定したセル範囲の外枠に罫線を引き四角形を作成するマクロを作成しました。しかし、数値を変えてマクロを実行すると、以前に描いた四角形が残ってしまいます。新たな四角形を作成するためにはどうすればよいでしょうか。
  • ExcelのVBAを使って、指定した範囲のセルに外枠を引き四角形を描くマクロを作成しましたが、数値を変えてマクロを実行すると以前の四角形が残ってしまいます。以前の四角形を消して新たに四角形を描く方法を教えてください。
  • ExcelのVBAで、指定したセル範囲の外枠に四角形を描くマクロを作成しました。しかし、数値を変えてマクロを実行すると、以前の四角形が残ってしまいます。新たに四角形を描くためにはどうすればいいでしょうか。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

I26から最終列の35行目までの罫線を一旦削除したらいかがでしょう? B1セルが2未満なら何もしなくていいんですね? 一例です。 Public Sub Main_Code02()   Dim a As Integer, i As Integer   With ThisWorkbook.Worksheets("Sheet1")     .Range("I26", .Cells(35, Columns.Count)).Borders.LineStyle = xlNone     a = .Range("B1").Value     If a = 2 Then       .Range("I26:K35").BorderAround Weight:=xlMedium     ElseIf a > 2 Then       For i = 3 To a         .Range("I26:K35").BorderAround Weight:=xlMedium         .Range("I26:K35").Copy Cells(26, 3 * i + 3)       Next i     End If   End With End Sub

tyloo
質問者

お礼

どうもありがとうございます。おかげで助かりました。

その他の回答 (2)

  • emaxemax
  • ベストアンサー率35% (44/124)
回答No.3

> B1の数字を変えていくと四角形を横に描いていくというマクロ B1セルに数字を手で入力したらマクロが作動するようにしたいのでしょうか? それならば標準モジュールではなく、そのようにしたいシートのシートタブをクリックし、「コードの表示」で出てくるシートモジュールに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$B$1" Then Exit Sub Dim a As Integer, i As Integer a = Range("B1").Value Range("I26", Cells(35, Columns.Count)).Borders.LineStyle = xlNone If a = 2 Then Range("I26:K35").BorderAround Weight:=xlMedium ElseIf a > 2 Then For i = 3 To a Range("I26:K35").BorderAround Weight:=xlMedium Range("I26:K35").Copy Cells(26, 3 * i + 3) Next i End If End Sub としてみてください。

tyloo
質問者

お礼

ありがとうございます。このような方法もあるのですね。参考になります。

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

こんなのは、良い方法があると思いやすいが、聞くまでも無く、良い方法はない。 元の状態を消去しなければ仕様が無い。このことは議論の余地は無い。 シート全部の書式を消して良いなら、1行ですむが、其れで良いのか、注記的に質問に書くべきだ。 それでは困る場合、この前の状態を次に備えて保存するのは一般には大変であるとおもう。 またシートの状態から、抹消する状態をプログラムで割り出すのは一般には大変難しい(多数行のコードを書く必要がある)と思う。 1つのセル範囲の罫線なら、次のイベントに引き継ぐのもやや簡単と思う。(質問の場合はイベントでなく同モジュール の実行だが) 例 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Static rng As Range Static fst fst = fst + 1 If fst <> 1 Then rng.Borders.LineStyle = xlNone MsgBox rng.Address '確認用 End If Set rng = Range(Cells(1, Target), Cells(1, Target + 1)) rng.Borders.LineStyle = xlContinuous rng.Borders.Weight = xlThick rng.Borders.ColorIndex = 3 End If End Sub ーー これをChangeイベントに入れてやってください(A1セルの値を変える。(2-列数限度-1まで) 例えば、A1に3と入れたら、C1:D1のセル範囲を囲むお遊び。 上記の方法も、初回には抹消をしないためのコードを入れているが、すっきりしない。私も良い方法を教わりたい。 もちろん上記はエクセルを閉じると、再度このエクセルブックを開くタ時、閉じたときの残った罫線は消せないが。 外にPUBLIC変数などで、引き継ぐ手もあるかも。 多分質問者はそこまで行ってないレベルでしょうから、難しい例をやろうとしていると思う。イベントやモジュール間のデーや引継ぎというのも簡単なようで難しい。

tyloo
質問者

お礼

ありがとうございます。VBAは始めたばかりなので勉強したいと思います。

関連するQ&A