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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) エクセル表作成について 5 2023/03/12 13:25
- Excel(エクセル) Excel VBA 空白行があるセル範囲に色を付ける 3 2022/06/13 15:58
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) vba セルの罫線について教えてください 2 2022/12/28 17:14
- Excel(エクセル) Excel 関数 数式 について 2 2022/09/02 21:45
- Excel(エクセル) 罫線の横棒の隣に文字を書きたい 5 2022/11/28 17:31
- Excel(エクセル) VBA 特定の列に入っているテキストをコピペ 2 2023/06/14 11:24
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
エクセルでデータがある部分だけ罫線で囲いたいです。
Excel(エクセル)
-
特定の値のセルに罫線を引くマクロ
Excel(エクセル)
-
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
-
4
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
5
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
6
Excelでデータのある範囲にのみ罫線を引きたい。
その他(Microsoft Office)
-
7
VBAで最終行まで罫線を掛ける方法
Excel(エクセル)
-
8
VBA データ(特定値)のある最終行を取得したい
Excel(エクセル)
-
9
セルの値が空白じゃないなら色を付ける
Excel(エクセル)
-
10
VBA Cのセルが空白でなかったら、Aのセルに順番に数値を入力
Visual Basic(VBA)
-
11
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
12
VBAで特定の文字を探して隣のセルに色を付けたい
Excel(エクセル)
-
13
表にフィルターをかけ、絞ったデータ(可視化セルのみ)を一次元配列として変数に入れるという動作を書きた
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの条件付き書式設定の太い...
-
excel2003 罫線だけを保護したい
-
Excelの外枠太罫線を2~3倍さ...
-
パワーポイントで、表の一部を...
-
EXCELで、下線の太さを変...
-
エクセルで罫線も一緒に並び替...
-
【エクセル】謎の枠線の消し方
-
エクセルで文字を入力すると罫...
-
エクセルのアンダーラインについて
-
勝手に背景に色が付いて困っ...
-
EXCELのオートフィルタで罫線が...
-
エクセル
-
Excelでアンダーラインに文字が...
-
決まった罫線のなかで、文章入...
-
エクセルの罫線を固定させる方...
-
罫線の色を薄くしたい
-
罫線が引かれているセルの個数...
-
罫線の色をまとめて変更する
-
Wordで表のセル幅を超えたら次...
-
エクセルでセルに入力している...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの条件付き書式設定の太い...
-
Excelの外枠太罫線を2~3倍さ...
-
excel2003 罫線だけを保護したい
-
EXCELで、下線の太さを変...
-
罫線の色を薄くしたい
-
【エクセル】謎の枠線の消し方
-
エクセルで文字を入力すると罫...
-
エクセルのアンダーラインについて
-
エクセル
-
決まった罫線のなかで、文章入...
-
エクセルで罫線も一緒に並び替...
-
パワーポイントで、表の一部を...
-
エクセル 罫線入りの文字 文...
-
勝手に背景に色が付いて困っ...
-
罫線が引かれているセルの個数...
-
EXCELのオートフィルタで罫線が...
-
エクセル 入力されていない線...
-
罫線の色をまとめて変更する
-
エクセル表の罫線(縦)が消せ...
-
Excelでアンダーラインに文字が...
おすすめ情報