• 締切済み

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

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

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • マクロで最終行を取得した列とは別の列の書式設定をしたい

    エクセルのマクロの組み方を教えて下さい A列にデータが入っているとします たとえばA8:A50までとします(変動します) A列の最終行50行目を取得したら、 S列8行目から、S列の、A列で取得した最終行目まで罫線を引きたいのです (開始が8行目は決定しています) どうしてもS列すべてに罫線が引かれてしまい、困っています 罫線の設定はこちらで組めるので、そこまでの例を出していただきたいのですが…… 今日昼まで仕上げなければならないので、回答よろしくお願いします

  • エクセルマクロ 罫線の引き方について

    マクロの自動記録を使用して罫線を引きたいと考えています。 A1からD17の表があるとして、そこに罫線を引きたいのですが、最終行が17とは限りません。最終行がD150ということも考えられます。(列はDで固定) この場合どのようにしたらよいのでしょうか?? まだマクロの自動記録しか使用したこがない初心者ですが、教えていただけたらと思います。

  • エクセルの罫線について

    エクセルを使用してある文字列を読み込んで表を作成し、印刷時に最終行に罫線を入れてます。 毎回この作業がわずらわしいのですが、読み込んだ文字列の最終行に罫線を入れる方法ってあるのでしょうか?

  • Excelマクロで罫線をひきたい。

    Access2000からエクスポートした結果のExcel2000のワークシートに、線をひきたいんです。 一番最初のセルはa1と決まっているけど、一番最後のセルは毎回変わってしまうのですが、 このセルを取得するためにはどんなマクロボタンを作成すればいいでしょうか? ただ本来の希望としては、マクロボタンひとつで、並べ替え>セルの変更>罫線、としたいのですけれど。 「セルの変更」というのは、エクスポートしたデータで「ランク」という項目があり、 これに「特・A・B」という項目があります。 Access上はひとつのフィールドにまとまっているのですが、Excel上では、それぞれ「特・A・B」という列を作成し、データがあったら、「○」を入れるというようにしたいのです。 (列が増えることになります。) また「備考1・備考2」がAccess上にあり、これは別フィールドとなっていますが、 今度はExcel上で「備考」としてひとつの列にしたいのです。 (列の減少) 別シートを作成してもかまいません。 このようなことはできるのでしょうか? せめて罫線だけでもひければ、と思います。 よろしくお願いします。

  • Excel2003のマクロで複数の罫線を引きたい

    Excel2003のマクロで複数の罫線を引きたい 本日(3月2日)の午前中に罫線のVBAに関する質問をして解決したのですが、今度は複数のセルにわたる罫線を複数引きたいのですが、ご教示お願いいたします。 Sub 罫線() Dim T1 As Single, L1 As Single Dim T2 As Single, L2 As Single Dim myShp As Shape With Range("c15") T1 = .Top L1 = .Left End With With Range("d14") T2 = .Offset(1, 1).Top L2 = .Offset(1, 1).Left End With Set myShp = ActiveSheet.Shapes.AddLine(L1, T1, L2, T2) ActiveSheet.Shapes.AddLine(L1, T1, L2, T2).Select With Selection.ShapeRange.Line .Visible = msoTrue .Style = msoLineSolid .Weight = 5# .ForeColor.SchemeColor = 10 End With End Sub このコードで(14行目と15行目の間、C列からD列)に赤の太線が表示されるようになりました。 さらにこれに加えて一度で、この罫線プラスA列の10行目からC列の14行目に引く罫線を加えたいのですが 上記コードにどのように書きくわえれば良いのでしょうか。 たびたびですみませんが、ご教示よろしくお願いいたします。

  • マクロで指定の行に罫線を引く方法

    エクセル2003です。 やりたいことはタイトルにあるように指定行に罫線を引くなのですが 具体的には、 A列の10行目から80行までランダムに1から3までの数字が入っていて、"1"が入ってるセルの上側でその行のA~AC列まで二重罫線を引きたいという状況です。 条件付けで1を探してそのセルの範囲で罫線を引かせるってのは、For Nextで探しつつって感じなんでしょうか? よろしくお願いします。

  • エクセル97の罫線について

    EXCEL97の罫線について教えてください。 マクロで、単純にデータのあるセルに罫線を引きたいと考えています。 ACCESSのデータをEXCELにエクスポートしてからEXCELのシートを開くので、 シートの列(横幅)はどれだけあるかわかりません。ちなみに行のマックス行の取得の仕方はわかっています。 現在、下のようなコードで5枚のシートに罫線を引いているのですが、すべてのシートが一枚目のシートの列行と同じだけ罫線が引かれてしまいます。 ========================================================== Public Sub get_keisen(sheet As String)  ←シート名が引数 Set ws1 = Worksheets(sheet) '罫線を引くシート Dim maxRow As Long '最大行 Dim I As Integer Application.ScreenUpdating = False ws1.Activate 'シートの最大行を得る ws1.Activate: maxRow = ws1.Range("A65536").End(xlUp).Row 'シートの横幅を得る I = 1 'デ-タ1行目設定 Do Until Cells(1, I) = ""   I = I + 1 Loop '罫線を引く範囲(全体)を選択 ws1.Activate: Range("A1:I" & maxRow).Select   ~ 罫線を引く処理文 ~ end sub =========================================================== もっと簡単な方法があればその方法でかまいません。 宜しくお願い致します。

  • EXCELマクロ 印刷範囲A1~Q列の最終行の罫線無視

    EXCELマクロで教えてください。 印刷範囲はA1~Q列の最終行です。 罫線は67行まで引いていますが、印刷時には無視します。 なので、Q列のデータが10行までしかなかったら、 印刷範囲は、A1~Q10 Q列のデータが67行まであったら、 印刷範囲は、A1~Q67 です、よろしく教えてください。

  • エクセル VBA

    最近マクロの勉強を始めたばかりの初心者で、どうしても Loop 処理の構文が理解出来ません。 S列 T列 U列  0  0  0 10  5  8  0  4  0   ・  ・   ・   ・  ・   ・ 上記のようにS列(3行目)からU列(最終行変動)に0~20000位の値が入っていて、データの並び替えでS列(昇順)で並べ替えをした後、S列の値が0の場合のみS~T列をDelete Shift:=xlUP したいです。 もしくはS列が0の場合のみT列まで選択 Range("S3:U...") とし、S列が0の行をまとめて Delete Shift:=xlUp したいです。 並べ替えまでマクロすぐ出来たのですが、Loop For Next など構文が理解できません。 どなたかお知恵をお貸し下さい。

  • エクセル2010 条件付き書式の罫線について

    エクセル2003でうまく動作していた条件付き書式の罫線が、 2010で違う動きをしてうまく表示されません・・・。 以下の条件付き書式で下罫線、右罫線を引くように設定しています。 <下罫線の条件>  =MOD(ROW(),30)=6 適用先:  =R1:T5,R7:T65536(←見づらいので$ははずしました) <下罫線+右罫線の条件> =MOD(ROW(),30)=6 適用先:  =U1:U5,U7:U65536 1~6行目を印刷タイトル行として設定しています。 ページ数は可変なので目安として65536行目あたりまで設定しています。 要は、改ページされる位置の右下部分のセル、R36~T36に下線、U36に下線+右線 を設定したいのです。 その他の罫線は元々の普通の罫線です。 この設定で、エクセル2003では問題なく表示されていましたが、 エクセル2010で表示すると、画像のように セルQ36 の右罫線が消えてしまいます。 セルR36 の条件付き書式の設定が優先されて、 消えてしまっているのかと思われますが、 セルQ36 の元々普通の罫線で設定している右罫線(太線)を表示させたいのです。 ※※ 画像ではわかりやすいように改ページの位置をずらしていますが、 本来は、U列、36行目で1ページ目が改ページされます。 方法があったら教えてください・・・!! よろしくお願いいたします。

専門家に質問してみよう