- ベストアンサー
VBAと罫線の作成
- VBA勉強中の初心者が、エクセル2003で表を作成し、行いたい処理について質問しています。
- B列の氏名欄に対応する連番をA列に表示し、氏名欄が入っている部分をA列からD列まですべてを罫線で囲みたいという処理を行いたいという問題があります。
- 最終行と列の取得方法についてわからず、教えて欲しいとお願いしています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
merlionXXです。 > Range("A2:D" & i). > 上記の構文がよくわかりません おや、i は i = Range("B4").End(xlDown).Row '最終行の取得 で、求めた最終行ですよね。 かりに最終行が10行目だとしたら変数 i には10が代入されてますから Range("A2:D" & i).は Range("A2:D10") ということです。
その他の回答 (2)
- merlionXX
- ベストアンサー率48% (1930/4007)
そこまで出来てたらあと一息でしたね。 一例です。 Sub sample2() Dim num As Integer '行変数を設定 Dim num2 As Integer '番号変数を設定 Dim i As Long num = 4 'B列4行目から調べる num2 = 1 '連番は「1」からスタート Range("A:A").Clear 'A列のデータをいったんクリアにする Do Until Cells(num, 2) = "" 'B列の氏名欄が空白なるまで処理を繰り返す Cells(num, 1) = num2 '連番「1」をB4にまず、代入する num = num + 1 '行を1行分下げる num2 = num2 + 1 '番号変数に1をプラスする Loop i = Range("B4").End(xlDown).Row '最終行の取得 With Range("A2:D" & i).Borders '罫線設定 .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End Sub なお、連番を振る方の質問 http://okwave.jp/qa/q6445931.html は、解決したら締め切りましょう。
補足
ありがとうございます。 勉強中で、ひとつ追加で質問なのですが Range("A2:D" & i). 上記の構文がよくわかりません。 最初に列範囲が来て、後に最終行の 値が来て、結合?しているのでしょうか。 お手数かけ、申し訳ありません。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! ↓のコードではどうでしょうか? 個人的には For~Nxxt を使いたがる人間です。 一例です。 データは4行目から入るものとします。 Sub test() Columns(1).Clear Dim i, j As Long j = Cells(2, Columns.Count).End(xlToLeft).Column Columns(1).Clear Range(Columns(1), Columns(j)).Borders.LineStyle = xlNone For i = 4 To Cells(Rows.Count, 2).End(xlUp).Row If Cells(i, 2) <> "" Then Cells(i, 1) = Cells(i, 1).Row - 3 '←4行目からのデータの場合です With Range(Cells(i, 1), Cells(i, j)) .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlInsideVertical).LineStyle = xlContinuous End With End If Next i End Sub 的外れならごめんなさいね。m(__)m
補足
なるほど、そうでした。 うまくいきそうです。 ありがとうございます。