プロが教える店舗&オフィスのセキュリティ対策術

VBA 罫線について

B列3行目から21行毎にデータがはいります。
データがはいったらデータが入った場所に罫線が入るようになっているのですが、B列にデータがはいったら下に17行ずつ罫線をいれたいです。どのように変えたらよいのでしょうか。
ご教示お願いいたします。


Option Explicit
Sub RuleSet1()
Dim I As Long
For I = 1 To Cells(Rows.Count, 2).End(xlUp).Row
If Cells(I, 2) <> "" Then
Range(Cells(I, 2), Cells(I, 3)). _
Borders(xlEdgeBottom).LineStyle = xlContinuous
End If
Next I
End Sub

A 回答 (6件)

!格子ではなく 下罫線でしたね


Dim I As Long
For I = 1 To Cells(Rows.Count, 2).End(xlUp).Row
If Cells(I, 2) <> "" Then
Cells(I, 2).Resize(18).Borders(xlEdgeBottom).LineStyle = xlContinuous
Cells(I, 2).Resize(18).Borders(xlInsideHorizontal).LineStyle = xlContinuous
End If
Next I


Cells(I, 2).Resize(19).Borders(xlInsideHorizontal).LineStyle = xlContin
だけでも良いですかね・・・
    • good
    • 1
この回答へのお礼

ありがとうございます。
無事できました。線の種類も調べてみました。
少しずつ理解できるように頑張ります!!

お礼日時:2022/11/29 00:11

No3です。



>「このセルにデータがあった場合に、下17行分に罫線を引く」
>といったことが条件付書式できるのかまた調べてみます。
できるであろうと考えたから、回答しています。


例えば、
「当該セルよりも(自身も含めて)上に17個のセルに何らかの値があれば、下罫線を引く」
という条件で良ければ、

B:C列を選択し、B1セルがアクティブな状態で、
1)「条件付き書式」-「新しいルール」から「数式を使用して~~」を選択
2)下部の数式欄に以下の式を入力
=COUNTA(OFFSET($B$1,MAX(ROW()-17,0),,MIN(ROW(),17)))>0
3)「書式」で下側の罫線を設定し、「OK」を押下げ

で、できると思います。

※ 設定条件が違う場合は、当然、設定する式も変わります。
    • good
    • 1
この回答へのお礼

ありがとうございます。
こんなこともできるんですね…実際にやってみて、驚きました…。条件付書式でできるのは知らなかったのでとても勉強になりました。

お礼日時:2022/11/29 00:05

>B列の3行目にデータがあった場合、B3〜B20の17行分に下罫線をいれたいです。

ご教示お願いいたします。
と言う事はRange(Cells(I, 2), Cells(I, 3))では無いですね

要件仕様に不明な点がありますが

Resizeを使って
Dim I As Long
For I = 1 To Cells(Rows.Count, 2).End(xlUp).Row
If Cells(I, 2) <> "" Then
Cells(I, 2).Resize(18).Borders.LineStyle = True
End If
Next I
で実現可能と存じます
ただ、#3様がご指摘されている
不要罫線の削除や実行トリガーなどが課題として残りますね

罫線の種類やResize、Offsetなどについて調べる事をお勧めします

Borders.LineStyle = True 範囲の格子罫線です
    • good
    • 0

こんばんは



直接の回答ではありませんけれど・・・

どのような使い方をなさるのかわかりませんけれど、ご提示のコードだと罫線を記入するだけで、消すことはしていないので、仮にセルの値を削除しても罫線は残ったままになりますね。
また、マクロだと実行しない限り罫線は反映されません。

思い付き的で申し訳ありませんけれど、
当該シートに「条件付き書式」で罫線を記すように設定しておけば良いのではないでしょうか?
こちらの方法であれば、セルに値を入力すると罫線も即時に反映されますし、マクロを実行する必要もありませんので。
    • good
    • 1
この回答へのお礼

ありがとうございます!!

条件付書式は検索結果に色をつけるといったようなことでしか使用したことがなかったので、思い付かなかったです。
「このセルにデータがあった場合に、下17行分に罫線を引く」といったことが条件付書式できるのかまた調べてみます。

お礼日時:2022/11/16 12:36

#1です


ついでなのですが、たぶんOffsetで設定するのが好ましいと思います
Offsetで考えると 下記のような考え方が出来、良いように思います

Sub RuleSet_01()
Dim I As Long
Dim r As Range
For I = 1 To Cells(Rows.Count, 2).End(xlUp).Row
If Cells(I, 2) <> "" Then
If r Is Nothing Then
Set r = Range(Cells(I, 2), Cells(I, 3)).Offset(17)
Else
Set r = Union(r, Range(Cells(I, 2), Cells(I, 3)).Offset(17))
End If
End If
Next I
r.Borders(xlEdgeBottom).LineStyle = xlContinuous
End Sub

Unionについては、お調べください
    • good
    • 1
この回答へのお礼

ありがとうございます!!

教えていただいたものですと、17行目(B20)のみに罫線がひかれます。説明不足で申し訳ありません。B列の3行目にデータがあった場合、B3〜B20の17行分に下罫線をいれたいです。ご教示お願いいたします。

お礼日時:2022/11/16 12:24

こんばんは


読解力が無く申し訳ないのですが、こういう事?

xlEdgeBottomなので

If Cells(I, 2) <> "" Then
Cells(I, 2).Resize(18, 2). _
Borders(xlEdgeBottom).LineStyle = xlContinuous
End If

または
If Cells(I, 2) <> "" Then
Range(Cells(I, 2), Cells(I, 3)).Offset(17). _
Borders(xlEdgeBottom).LineStyle = xlContinuous
End If
Next I

2つの処理コードは、大分意味は違うけれど同じ結果が出ると思います
意味の違いについては
_
Borders(xlEdgeBottom).LineStyle = xlContinuous をselectに変えると
分かると思います
    • good
    • 1
この回答へのお礼

ありがとうございます!!

わかりにくく申し訳ありません。
いろんな方法があるのですね。教えていただいた方法で確認してみます。

お礼日時:2022/11/16 12:39

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!