• 締切済み

エクセルのマクロで罫線を引くには

http://okwave.jp/qa4965370.htmlで質問させていただいた内容の発展です A列にデータが入っているとします たとえばA8:A50までとします(変動します) A列の最終行50行目を取得したら、 S~U列8行目から、S~U列の、A列で取得した最終行目まで罫線を引きたいのです (開始が8行目は決定しています) 罫線の設定はこちらで組めるので、そこまでの例を出していただきたいのですが…… S列のみだと、offsetで簡単にできたのですが、複数列にわたるとむずかしいでしょうか? 暇な時にでも回答お願いします

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.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はほかにも書き方があるが、これが判りやすいと思うが、こういうことができると言うのも。他人のコードを見て、学んだことだ。要は経験のみ。

lucvbnm
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.4

#1です。 A列のA8~A最終行と同行、且つS~U列と交差する範囲と言う事で、 Intersect(Range("A8", Cells(Rows.Count, 1).End(xlUp)).EntireRow, Range("S:U")).Select と言う方法もありました。 ご参考程度に。

lucvbnm
質問者

お礼

ありがとうございました

すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 >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言語に映すことが可能です。こんなコードは通常ありえないのですが、もし、きんちと言葉がまとめられるなら、短くすることが可能だとは思います。

lucvbnm
質問者

お礼

ありがとうございました

すると、全ての回答が全文表示されます。
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

いろんな方法があると思いますがたとえば、 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

lucvbnm
質問者

お礼

ありがとうございました

すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>offsetで簡単にできたのですが、複数列にわたるとむずかしいでしょうか? Resizeすればいいのでは。 Range("A8", Cells(Rows.Count, 1).End(xlUp)).Offset(, 18).Resize(1 , 3).Select と言う事ではないかと。

lucvbnm
質問者

お礼

ありがとうございました

すると、全ての回答が全文表示されます。

関連するQ&A