http://okwave.jp/qa4965370.htmlで質問させていただいた内容の発展です

A列にデータが入っているとします
たとえばA8:A50までとします(変動します)
A列の最終行50行目を取得したら、
S~U列8行目から、S~U列の、A列で取得した最終行目まで罫線を引きたいのです
(開始が8行目は決定しています)
罫線の設定はこちらで組めるので、そこまでの例を出していただきたいのですが……

S列のみだと、offsetで簡単にできたのですが、複数列にわたるとむずかしいでしょうか?

暇な時にでも回答お願いします

このQ&Aに関連する最新のQ&A

A 回答 (5件)

マクロの記録をとれば判ることを、繰り返し聞かないで、自分で考えること。

内容自体も難しいことは無い。
個々に質問する前に、もうすこし、勉強を広げて、一通りのVBAの勉強が必要と思う。VBAの解説書やその逆引き解説書を読んでから
考えるべきで、今の段階で何かやろうとすると、質問ばかりになるとおもう。
ーーー
罫線の引き様を、田の字型で良いとすると(このことも質問に書いてないが)
例えば、S2:U12を選択して(操作で)罫線を書く。マクロの記録をとると、
Range("S2:U10").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
・・
以下長いので略
このうちA列の最下行の行番号によって
Range("S2:U10").Select
のU10の10の部分が変わることは判るだろう。
そして(A列)データ最下行を捉えるのは(他にも方法が有るが)
Sub test01()
d = Range("A65536").End(xlUp).Row
MsgBox d
End Sub
を実行して納得すること。この手法は定石で、ここの回答に頻繁に出てくる。
ForNexrを使って、ある列のセル全部に対し繰り返し処理をしたいとき必ず必要になる。
だから、最終形は
Sub test01()
d = Range("A65536").End(xlUp).Row
MsgBox d
Range("S2:U" & d).Select
Macro1
End Sub
Macro1はマクロの記録(最初はMacro1と言う名になる)をとったコードの、始めのほうの
Range("S2:U10").Select
の行だけを削除したもの(を指す。それを1行だけ削除してそのまま使う)。
Range("S2:U" & d).Selectはほかにも書き方があるが、これが判りやすいと思うが、こういうことができると言うのも。他人のコードを見て、学んだことだ。要は経験のみ。
    • good
    • 0
この回答へのお礼

ありがとうございました
すみません、質問が曖昧で、異なる結果が出ました

お礼日時:2009/05/29 05:16

#1です。



A列のA8~A最終行と同行、且つS~U列と交差する範囲と言う事で、

Intersect(Range("A8", Cells(Rows.Count, 1).End(xlUp)).EntireRow, Range("S:U")).Select

と言う方法もありました。
ご参考程度に。
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2009/05/29 05:13

こんにちは。



>S~U列8行目から、
ここに曖昧な表現がありますから、はっきりしませんが、なるべく忠実に表そうとすれば、こういうことだと思います。

Sub Test1()
Dim A As Range
Dim B As Range
Set A = Range("S8:U8")
Set B = Range("A65536").End(xlUp)
If B.Row > 8 Then
  Range(A, B).Select
End If
Set A = Nothing
Set B = Nothing
End Sub

>S~U列8行目から、
ここが、もしも確定していないのなら、

Sub Test2()
  Dim A As Range
  Dim B As Range
  Set A = Range("IV8").End(xlToLeft)
  If A.Column > 18 Then 'S以降
    If A.Column > 21 Then 'V以前
      Set A = Range("U8")
    End If
  Else
    GoTo EndLine
  End If
   Set B = Range("A65536").End(xlUp)
  If B.Row < 8 Then '8行以前
    GoTo EndLine
  End If
  Range(A, B).Select
EndLine:
  Set A = Nothing
  Set B = Nothing
End Sub

VBAもひとつの言語ですから、作業をVBA言語に映すことが可能です。こんなコードは通常ありえないのですが、もし、きんちと言葉がまとめられるなら、短くすることが可能だとは思います。
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2009/05/29 05:12

いろんな方法があると思いますがたとえば、



Sub test01()
Range("A8", Cells(Rows.Count, 1).End(xlUp)).Offset(, 18).Resize(, 3).Select
End Sub

Sub test02()
x = Cells(Rows.Count, 1).End(xlUp).Row
Range("S8:U" & x).Select
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2009/05/29 05:12

>offsetで簡単にできたのですが、複数列にわたるとむずかしいでしょうか?


Resizeすればいいのでは。

Range("A8", Cells(Rows.Count, 1).End(xlUp)).Offset(, 18).Resize(1 , 3).Select

と言う事ではないかと。
    • good
    • 0
この回答へのお礼

ありがとうございました

お礼日時:2009/05/29 05:11

このQ&Aに関連する人気のQ&A

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


人気Q&Aランキング