
Excel VBA 空白セル以外のセルを罫線で囲む
ここの質問箱をよく利用させて頂いている者ですが、また質問させていただきます。
あるシート(例:”Sheet1”)の全セル内のうち、ランダムな文字が全セル内のどこかに記入されています。
また、記入される位置は常に変化します。
つまり、ある時は「A1」に入力されていても、次ははそうでないということです。
この様な場合、文字が入力されているセルのみに罫線を引く処理を行いたいのですが、実現は可能でしょうか?
また、可能であれば、どの様なコードになるのでしょうか。教えてください。
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
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 ステートメントの範囲をどこまでにするかは、迷いますが、今回は、短めに置きました。
No.4
- 回答日時:
>空白セル以外のセルを罫線で囲む
「Excel VBA」ではなくて、[条件付き書式] を設定すればよいのでは?
1)対象範囲を選択します。
2)[条件付き書式の設定] ダイアログ を開きます(Excel2003 以前なら [書式(O)] - [条件付き書式(D)...])。
3)[条件1(1)] を「セルの値が」・「次の値に等しくない」・「=""」にし、[書式(F)] - [罫線] タブ - [外枠(O)] - [OK] として、セル内の値が「""」つまり「空白」でないときに「セルを罫線で囲」みます。
4)[OK] で [条件付き書式の設定] ダイアログ を閉じます。
5)以上で、セルに何かが入っているときには、「セルを罫線で囲」みます。
ただし、Excel2007 以降の機能は存じませんが、Excel2003 以前なら罫線の太さを変えることはできません。
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
でどうでしょうか。
No.1
- 回答日時:
Dim C As Range
For Each C In Selection
If C.Value="" Then
’やりたいこと
End If
Next
Selection は選択した範囲です
自分で範囲を指定してください
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルでデータがある部分だけ罫線で囲いたいです。
Excel(エクセル)
-
VBAで最終行まで罫線を掛ける方法
Excel(エクセル)
-
Excelでデータのある範囲にのみ罫線を引きたい。
その他(Microsoft Office)
-
-
4
特定の値のセルに罫線を引くマクロ
Excel(エクセル)
-
5
Excel・・・表の何も記入のない部分だけ罫線が表示されない方法
Excel(エクセル)
-
6
エクセル 結合セル内に空白なら斜線を引くマクロ
Excel(エクセル)
-
7
VBAで重複する項目を1つにまとめて金額を合計したい
Excel(エクセル)
-
8
重複行を削除して数値を合算したい(合算列が多い)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル 入力されていない線...
-
罫線の色を薄くしたい
-
【エクセル】謎の枠線の消し方
-
Excelの条件付き書式設定の太い...
-
excel2003 罫線だけを保護したい
-
Excelの外枠太罫線を2~3倍さ...
-
エクセル表の罫線(縦)が消せ...
-
エクセルで文字を入力すると罫...
-
エクセル
-
図形の挿入でコネクタ:カギ線...
-
EXCELのオートフィルタで罫線が...
-
EXCELで、下線の太さを変...
-
罫線が引かれているセルの個数...
-
エクセルのアンダーラインについて
-
エクセル の縦線
-
エクセルで罫線も一緒に並び替...
-
勝手に背景に色が付いて困っ...
-
Wordで表のセル幅を超えたら次...
-
Vba セルの4辺について罫線が有...
-
条件付き書式で自動で斜線の罫...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの条件付き書式設定の太い...
-
【エクセル】謎の枠線の消し方
-
Excelの外枠太罫線を2~3倍さ...
-
excel2003 罫線だけを保護したい
-
EXCELで、下線の太さを変...
-
エクセルで文字を入力すると罫...
-
罫線の色を薄くしたい
-
エクセル の縦線
-
エクセル 入力されていない線...
-
エクセルで罫線も一緒に並び替...
-
EXCELのオートフィルタで罫線が...
-
エクセルのアンダーラインについて
-
エクセル表の罫線(縦)が消せ...
-
エクセル
-
罫線が引かれているセルの個数...
-
決まった罫線のなかで、文章入...
-
Vba セルの4辺について罫線が有...
-
パワーポイントで、表の一部を...
-
図形の挿入でコネクタ:カギ線...
-
Wordで表のセル幅を超えたら次...
おすすめ情報