• 締切済み

罫線を引く

Excelで表を作っているのですが、マクロで罫線を引きたいのです。しかし、マクロを実行して、データがない部分(データのない列)には罫線を引きたくないのです。range()で設定すると設定した範囲で罫線が引けるのはわかるのですが、データの量が毎回違うので、うまくいきません。 データがない列に、罫線を引かなくていいようにするには、どういう風にしたらよいのですか?VBAに詳しい方、教えて下さい。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

飛び飛びでも好いからデータの入っている、一番下行且つ一番右列まで(A1セルからのセル範囲)に(桝目状に)罫線を引きます。 式のセットされているセルも、データありと同じ扱いになります。 Range("A1").Select のところは、見だしや左余白の関係で、左上隅を指定するものですが、B2など適当に指定してください。 Set c = Selection.SpecialCells(xlCellTypeLastCell) のところも、合計欄などのために、1行下まで罫線を引きたいなら Set c = Selection.SpecialCells(xlCellTypeLastCell).Offset(1, 0) として下さい。 '---以下は桝目罫線を引くルーチンですがマクロの記録そのものの平板なものです。適当に色や太さなどしたいように変えてください。 この回答のポイントはSpecialCellsの利用です。 Sub test01() Dim c As Range Range("A1").Select Set c = Selection.SpecialCells(xlCellTypeLastCell) Range(Cells(1, "A"), c).Select '---- Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End Sub

  • emico
  • ベストアンサー率30% (39/129)
回答No.1

えっとぉ、まずはどんな風にデータが入っているのか教えてください。 たとえば・・・ (1)A1とA2:D15が基本でD15がD30になることもあるとか (2)A1:D1、A5:D7と、飛び飛びでデータが入っているのを1つの表として罫線を引きたい とかです。 とりあえず、これにお答えいただいたほうが適切な方法があるかも。。。

defineme
質問者

補足

はい。例えば、A1~G1はいつも固定で、データがA15~G15 時にはA17~G17、A25~G25と横に対しては固定で、縦に対しては一定ではないのです。ちょっと、説明の仕方がへたですいません。

関連するQ&A

  • エクセル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 =========================================================== もっと簡単な方法があればその方法でかまいません。 宜しくお願い致します。

  • 不思議な罫線

    会社の前任者が作成した表なんですけど、タテ罫線が全部の列に設定されているんですが、その罫線はセルにデータがはいっているところまでが印刷されるんです。 今まで新しいデータを追加する時は行コピーしてそこに入力するのが普通だと思っていたんですけど、これは既に 罫線が引かれているのでその必要がありません。 すごく便利なんですけど、この罫線って一体どうやって 作成したのでしょうか? エクセルの達人がいらっしゃったら是非教えて下さい!

  • VBA2010で罫線を引くマクロがエラー停止する

    エクセル2003で作成したマクロをエクセル2010で実行するとエラーで停止します。 解析を行ったのですが対応が分からず困っています。 是非対応方法を教えて頂き質問いたします。 状況: Subマクロとして罫線を引くマクロを作成しました。 罫線を引くサブマクロは、問題ないと考えいます。 (エラーになるまでに何回か使っていますが問題なく実行されいます。) このSubマクロがある特定の箇所にくるとエラーで停止しています。 エラーで停止したでマクロを一旦終了させて、選ばれた箇所で右クリック⇒”セルの書式設定”を試みましが時間を掛けて待っても罫線等の表示が出ません。 多分、この状態になっているのでエラー停止しいると考えられます。 試しにエラーになる箇所の前で右クリック⇒”セルの書式設定”を行うと罫線等の表示がされます。 よってこのマクロの実行すると”セルの書式設定”が出来なくなるようです。 下記に今回のマクロを記載します。 =======マクロ記載====== For 回数 = 1 To Gr数 開始行 = 2 + 4 * (回数 - 1) Call 太罫線(開始行, 2, 開始行 + 3, 終了列) Next 回数 Sub 太罫線(開始行, 開始列, 終了行, 終了列) Range(Cells(開始行, 開始列), Cells(終了行, 終了列)).Select Selection.Borders(xlEdgeLeft).Weight = xlThick Selection.Borders(xlEdgeTop).Weight = xlThick Selection.Borders(xlEdgeBottom).Weight = xlThick Selection.Borders(xlEdgeRight).Weight = xlThick End Sub ============================================== 再度エラーになる条件を記載します。 (1)回数=2のときにエラーで停止します。 (2)エラーで停止すると右クリック⇒”セルの書式設定”が出来なくなります。 (3)For分の前では、右クリック⇒”セルの書式設定”が出来ます。 (4)VBA2003では、問題なく動作していました。

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

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

  • VBAと罫線の作成

    こんにちは。 VBA勉強中で初心者です。 今、以下の上段画像のような表をエクセル2003 で作成しました。 下段画像はVBA実行後の表です。 表は 番号と氏名、合否の結果を入力した ものです。 今、行いたい処理なのですが (1) B列の氏名欄に対応する、連番を A列に表示したい。 (2) さらに、氏名欄が入っている部分を A列からD列まですべてを罫線(普通線) で囲みたい。 の2点です。 (1)はなんとかできたみたいのですが、 (2)で完全に手が止まってしまいました。 最終の行と列の取得が、すこしわからないので 教えていただければと思います。 よろしくお願いします。 Sub sample() 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 End Sub

  • アクセス97での罫線について

    教えてください。 ACCESS97で一つのテーブルをEXCELにエクスポートする処理をマクロ (ワークシート変換)で作成しました。 EXCELシート上にデータはちゃんと書き込まれています。 次に、エクスポートされたEXCELのシート上に(セルすべてを囲む)罫線をつけて 見やすく表示したいと考えているのですが... マクロでもVBAでも構いません。そのようなことはできるのでしょうか? また出来るとしたら、データの中のある項目(フィールド)が変更したら、その下の罫線は太くするといったことは可能でしょうか? 参考HPでも構いません。宜しくお願い致します。

  • Excel VBAの罫線描画マクロをOpenOfficeCulcで実行。罫線が描画されない。

    Excel VBAで作成したマクロをOpenOffice.orgのCulcに単純移行して 実行してみたのですが、コードは実行されるのに罫線が描画されない 現象が発生しています。 罫線描画はCulcとExcelで互換が遅れている部分だと聞いていますが、 Culc独自のマクロで作成するしか回避方法はないのでしょうか? マクロは下記のような構成になっています。 REM ***** BASIC ***** Option VBASupport 1 Sub draw_line() With Worksheets("drawline") .Range("B2:E8").Borders(xlEdgeLeft).LineStyle = xlContinuous .Range("B2:E8").Borders(xlEdgeTop).LineStyle = xlContinuous .Range("B2:E8").Borders(xlEdgeBottom).LineStyle = xlContinuous .Range("B2:E8").Borders(xlEdgeRight).LineStyle = xlContinuous .Range("B2:E8").Borders(xlInsideVertical).LineStyle = xlContinuous .Range("B2:E8").Borders(xlInsideHorizontal).LineStyle = xlContinuous End With End Sub

  • エクセルの罫線が印刷されない

    エクセル2000で表を作って罫線をいれましたが、一部分だけ線が印刷されません。メニュー→書式→セル→罫線で確認しても確かに罫線は入っているのです。 印刷範囲ギリギリで表を作成していると一番外枠の部分で時々このような事があります。でも印刷範囲内なのです。 どうしたらきれいに印刷できるでしょうか?教えて下さい。

  • 【Excel】マクロで印刷範囲の設定

    Excel2003を使用しています。 マクロで印刷範囲を設定するコードを書きました。ページを追加するマクロを実行したときに一緒に実行するようにしているのですが、コードで指定している範囲外にデータがあるせいか、その列まで印刷範囲に設定されてしまいます。このデータは印刷範囲には入れたくないのですが、どうしたらいいでしょうか? ちなみに、印刷範囲部分のコードは  .PageSetup.PrintArea = Range(Cells(1, 1), Cells(j, 24)) Y1セルとZ1セルにデータが入力されています。マクロを実行すると、印刷範囲がA1:Zjに設定されます。印刷範囲はX列までに設定したいのですが、可能でしょうか?よろしくお願いします。

  • エクセルのフォームについて教えてください。(マクロ記録)

     エクセルにレコードを入力するのにフォーム機能を使用し、その手順をマクロに記録したいのですが、うまくいきません。(エクセル2000使用)  シートの一部分(表自体はA列からQ列まであるのですが、入力部分はI列まで)にレコードを入力するので入力部分を範囲指定し、フォーム機能を使用したいのです。  マクロに登録しなければフォーム画面に入力したい項目が全て表示されるのですが、それをマクロに登録して、それを実行すると、入力項目がA列の部分しか表示されません。入力するたび範囲指定するのが面倒なのでマクロに記録させたいのですが・・・。  マクロの内容はこんな風になってたんですけど。どなたか教えてください。お願いします。 「 Range("A1:I149").Select  ActiveSheet.ShowDataForm 」