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も見ています
-
字面がカッコいい英単語
あなたが思う「字面がカッコいい英単語」を教えてください。
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
エクセルでデータがある部分だけ罫線で囲いたいです。
Excel(エクセル)
-
Excelでデータのある範囲にのみ罫線を引きたい。
その他(Microsoft Office)
-
特定の値のセルに罫線を引くマクロ
Excel(エクセル)
-
-
4
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
5
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
6
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
7
VBAで文字列を数値に変換したい
Excel(エクセル)
-
8
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
9
条件付き書式で最終行に線を引きたい
Excel(エクセル)
-
10
VBAで重複するデータがあれば1個だけ残して他の重複セルを"(空白)にしたいのですが
Excel(エクセル)
-
11
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
12
表にフィルターをかけ、絞ったデータ(可視化セルのみ)を一次元配列として変数に入れるという動作を書きた
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの条件付き書式設定の太い...
-
Excelの外枠太罫線を2~3倍さ...
-
excel2003 罫線だけを保護したい
-
パワーポイントで、表の一部を...
-
エクセル
-
エクセルで文字を入力すると罫...
-
EXCELで、下線の太さを変...
-
エクセルのアンダーラインについて
-
罫線の色を薄くしたい
-
エクセルで罫線も一緒に並び替...
-
Excelでアンダーラインに文字が...
-
決まった罫線のなかで、文章入...
-
OpenOfficeのCalcで罫線の削除...
-
条件付き書式で自動で斜線の罫...
-
勝手に背景に色が付いて困っ...
-
罫線が引かれているセルの個数...
-
罫線の色をまとめて変更する
-
WordやExcelで作ってた帳票をAc...
-
【エクセル】謎の枠線の消し方
-
エクセル 入力されていない線...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの条件付き書式設定の太い...
-
Excelの外枠太罫線を2~3倍さ...
-
excel2003 罫線だけを保護したい
-
罫線の色を薄くしたい
-
EXCELで、下線の太さを変...
-
エクセルで罫線も一緒に並び替...
-
【エクセル】謎の枠線の消し方
-
エクセルで文字を入力すると罫...
-
パワーポイントで、表の一部を...
-
エクセルのアンダーラインについて
-
エクセル
-
エクセル 入力されていない線...
-
罫線が引かれているセルの個数...
-
決まった罫線のなかで、文章入...
-
EXCELのオートフィルタで罫線が...
-
エクセル の縦線
-
エクセル表の罫線(縦)が消せ...
-
条件付き書式で自動で斜線の罫...
-
エクセルExcel 「/」セルの斜...
-
Excelでアンダーラインに文字が...
おすすめ情報