• ベストアンサー

Excel VBA 空白セル以外のセルを罫線で囲む

Excel VBA 空白セル以外のセルを罫線で囲む ここの質問箱をよく利用させて頂いている者ですが、また質問させていただきます。 あるシート(例:”Sheet1”)の全セル内のうち、ランダムな文字が全セル内のどこかに記入されています。 また、記入される位置は常に変化します。 つまり、ある時は「A1」に入力されていても、次ははそうでないということです。 この様な場合、文字が入力されているセルのみに罫線を引く処理を行いたいのですが、実現は可能でしょうか? また、可能であれば、どの様なコードになるのでしょうか。教えてください。

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

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

まず、シートの全セルを対象に、データが入力されているかどうか検索して入力されていれば罫線で囲むという処理は実用的ではないと思う。普通にやったら時間がかかりすぎる。ある範囲に限定はできないのですか。 また、入力位置が変化して、その都度罫線を書き直すというなら、イベント処理になる。 入力は手動かどうかで、イベントも変わるが。 次のコードは、手動でデータを入力することにして、changeイベントを使い、セル範囲は100行100列までとした例です。Sheet1などのコードモジュールにおきます。 Private Sub Worksheet_Change(ByVal Target As Range) Application.ScreenUpdating = False If Target.Row <= 100 And Target.Column <= 100 Then Range(Cells(1, 1), Cells(100, 100)).Select End If With Selection .Borders(xlEdgeLeft).LineStyle = xlNone .Borders(xlEdgeTop).LineStyle = xlNone .Borders(xlEdgeBottom).LineStyle = xlNone .Borders(xlEdgeRight).LineStyle = xlNone .Borders(xlInsideVertical).LineStyle = xlNone .Borders(xlInsideHorizontal).LineStyle = xlNone End With For Each c In Selection If c.Value <> "" Then With c.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With c.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With c.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With With c.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With End If Next Target.Select Application.ScreenUpdating = True End Sub

その他の回答 (4)

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

イベントを用いるかどうか、質問からは判断できません。 ただ、入力時にマクロ(VBA)が走るイベントが楽だということで使います。 条件付き書式は、書式という種類の設定ですから、物理的なファイルサイズを大きくさせてしまいますので、不用意に巨大な範囲には使えません。しかし、シートの隅から隅までということは常識的にありませんから、一定の範囲であるなら、そちらのほうが楽に動くかもしれません。 また、シート全セルから探すことも、別に大した問題ではありません。  On Error Resume Next '定数が無い場合は、エラーを出さないようにする  Set r = Me.UsedRange.SpecialCells(xlCellTypeConstants)  On Error GoTo 0  If r Is Nothing Then Exit Sub という方法もあります。 なお、罫線は、以下のようにまとめて書くと良いと思います。単に、参考までです。 '//シートモジュール Private Sub Worksheet_Change(ByVal Target As Range)  Dim c As Variant  Dim n As Variant  Application.ScreenUpdating = False  On Error Resume Next  For Each c In Target   If c.Value <> "" Then     With c.Borders      .LineStyle = xlContinuous      .Weight = xlMedium      .ColorIndex = xlAutomatic     End With   Else    c.Borders.LineStyle = xlNone   End If  Next c  On Error GoTo 0  Application.ScreenUpdating = True End Sub なお、ループ内のWith ステートメントの範囲をどこまでにするかは、迷いますが、今回は、短めに置きました。

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.4

>空白セル以外のセルを罫線で囲む  「Excel VBA」ではなくて、[条件付き書式] を設定すればよいのでは? 1)対象範囲を選択します。 2)[条件付き書式の設定] ダイアログ を開きます(Excel2003 以前なら [書式(O)] - [条件付き書式(D)...])。 3)[条件1(1)] を「セルの値が」・「次の値に等しくない」・「=""」にし、[書式(F)] - [罫線] タブ - [外枠(O)] - [OK] として、セル内の値が「""」つまり「空白」でないときに「セルを罫線で囲」みます。 4)[OK] で [条件付き書式の設定] ダイアログ を閉じます。 5)以上で、セルに何かが入っているときには、「セルを罫線で囲」みます。   ただし、Excel2007 以降の機能は存じませんが、Excel2003 以前なら罫線の太さを変えることはできません。

  • mar00
  • ベストアンサー率36% (158/430)
回答No.2

Sub Macro1() For INP1 = 1 To ActiveCell.SpecialCells(xlLastCell).Row For INP2 = 1 To ActiveCell.SpecialCells(xlLastCell).Column If Cells(INP1, INP2) <> "" Then Cells(INP1, INP2).Borders(xlEdgeLeft).LineStyle = xlContinuous Cells(INP1, INP2).Borders(xlEdgeTop).LineStyle = xlContinuous Cells(INP1, INP2).Borders(xlEdgeBottom).LineStyle = xlContinuous Cells(INP1, INP2).Borders(xlEdgeRight).LineStyle = xlContinuous End If Next INP2 Next INP1 End Sub でどうでしょうか。

  • Tip3000
  • ベストアンサー率9% (5/55)
回答No.1

Dim C As Range For Each C In Selection If C.Value="" Then  ’やりたいこと  End If Next Selection は選択した範囲です 自分で範囲を指定してください

関連するQ&A