- ベストアンサー
EXCELマクロ 印刷範囲A1~Q列の最終行の罫線無視
EXCELマクロで教えてください。 印刷範囲はA1~Q列の最終行です。 罫線は67行まで引いていますが、印刷時には無視します。 なので、Q列のデータが10行までしかなかったら、 印刷範囲は、A1~Q10 Q列のデータが67行まであったら、 印刷範囲は、A1~Q67 です、よろしく教えてください。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
方法1.細い線しか設定できませんが「書式」「条件付き書式」で罫線を引く 方法2.「データ」「フィルタ」「オートフィルタ」を設定しておき 印刷時に「空白以外」で印刷しない範囲を非表示にする。
その他の回答 (9)
- Wendy02
- ベストアンサー率57% (3570/6232)
tabtab9さま misatoannaさま こんにちは。 ここのスレッドをお借りして、 >―― こんにち"は" が正しいのでしょうが、つい "わ" を使ってしまいます。 Excel2003のオートコレクトのデフォルト設定に、 「こんにちわ」 → 「こんにちは」 と入っていますね。何か、とってもヘンな感じです。どっちかというと、Excelのよけいなお世話の延長かしら?^^; >列全体に罫線を設定しておきますと、行を削除しても、最終行は罫線が設定された状態で >追加されますね。(これは今回気づきました) そうだったのですね。私は、マクロ中心なので、知りませんでした。何か、活用できそうな気がします。ありがとうございます。 本題に戻ると、最終行を採る方法として、他に考えてみましたが、 With ActiveSheet.UsedRange .Cells(.Count).Select End With 'これって、危ないコードで、これは使えませんね。 これも、 ActiveCell.SpecialCells(xlLastCell).Select 何か、データのないところを指していました。 私は、このご質問主のtabtab9さんとは、現在、計11回目の回答を付けていますが、気になって、以前の質問と私の回答を読み直してみました。それで、その内容が見えました。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2028046 ( http://okwave.jp/kotaeru.php3?q=2028046 ) >説明不足だったのですがQ列は、O列とP列とQ列のセルを結合させています。 というのでは、Q列では採れませんね。この場合は、O列ですね。 #1さんのところで、すでに解答が出ていますが、それをわたし流のマクロで、表現してみました。 '------------------------------------------------------ Sub getLineMaking() Dim r As Range Dim AcSht As Worksheet Set AcSht = ActiveSheet Application.ScreenUpdating = False LineArranging AcSht.UsedRange, xlNone '罫線削除 With AcSht.Range("A1").CurrentRegion .AutoFilter _ Field:=.Columns.Count, _ Criteria1:="<>0" 'Columns.Count は、列数を指定することも可能 Set r = AcSht.AutoFilter.Range .AutoFilter 'r.Select '←選択範囲 End With LineArranging r, xlContinuous Set r = Nothing Set AcSht = Nothing Application.ScreenUpdating = True End Sub '------------------------------------------------------ Sub LineArranging(ByVal rng As Range, ByVal myStyle As Integer) '罫線引き/消しサブルーチン Dim Bds As Variant Dim i As Variant '罫線の種類 Bds = Array(7, 8, 9, 10, 11, 12) For Each i In Bds With rng.Borders(i) .LineStyle = myStyle If myStyle <> xlNone Then .Weight = xlThin .ColorIndex = 1 'Black End If End With Next End Sub '------------------------------------------------------ 果たして、CurrentRegion で良いのかは分かりません。罫線は、確実に消去できるはずですが、罫線を引くほうの確保はされません。A1にデータがあって、Q列まで、連結セルはあっても空いた列がないという条件です。 この最終行の採り方は、とても違和感があって、思い出せませんでした。
お礼
今回は、大発見という体験をさせていただきました。 ありがとうございました。 せっかくのマクロですので、動作の確認をさせていただきましたが、処理的には、フィルタを使ったマクロで解決いたしました。 P.S.説明不足でご迷惑をおかけしました。 いろいろあってお礼が遅れて申し訳ありませんでした。
補足
すみません。 ちょっと、熱を出して休息中です。 質問依頼で、申し訳ないです。 必ず、試行します。 お許しください。
- misatoanna
- ベストアンサー率58% (528/896)
tabtab9さま、Wendy02さま、こんにちわ。 ―― こんにち"は" が正しいのでしょうが、つい "わ" を使ってしまいます。 > その範囲をクリアする方法は、シートをそのままの状態からでは、保存 以外に方法が > ないようです。行の削除すれば、罫線が消えてしまいますから。 列全体に罫線を設定しておきますと、行を削除しても、最終行は罫線が設定された状態で 追加されますね。(これは今回気づきました) でも、行削除してもデータ最終位置は記憶されていて、やはり保存操作をしないとクリア されないようです。 マクロの ActiveCell.SpecialCells(xlLastCell).Select みたいですね。 #7 を訂正します。 > 同じように、A~Q列の列全体を選択して罫線(格子)を設定し、次のように名前を定義 > します。(対象シートの名前が "Sheet1" だとして) と書きましたが、ここは A1:Q67 の範囲だけに罫線を設定すればいいですね。
補足
結構ハイレベルな内容ということが、だんだんわかってきました。 ちょっと、熱がでてフラフラなので、改めてお礼もうしあげます。
- Wendy02
- ベストアンサー率57% (3570/6232)
tabtab9 様 misatoanna 様 こんばんは、Wendy02です。 >その後、セル C30 だけに何か入力してから印刷プレビューしてみてください。 >Excel2000では、罫線は A1:C30 の範囲にしか表示されません。 おっしゃることは、XL2003でも、可能です。確認しました。 そういう現象があることは知りませんでした。 >A1:Q65536(シート最終行)の範囲すべてに罫線を引いてしまいます。 たぶん、行全体、列全体ですと、範囲を認識しなくなるからでしょうね。 その範囲は、マクロのUsedRange とも違う、セルの痕跡のようなものなのですね。 確か、Ctrl+ Shift + End と同じ範囲かな。 その範囲をクリアする方法は、シートをそのままの状態からでは、「保存」以外、方法がないようです。行の削除すれば、罫線が消えてしまいますから。 p.s. なお、私は、前回の回答は、ご質問を読み違えたようです。罫線を全部無視する、と読んでいましたから。 マクロの場合は、その最終行のとる場所を何にするか、どこにするか、どのようにするか、だけだと思います。暗黙的な取り方よりも、よりはっきりと確実なほうがよいのですが、レイアウトなどの情報が少ないと、お互いの思惑が違い、そのまま解決をみません。(どちらかというと、アタリハズレですね。) 一般的には、左端に日付などが入っているので、以下のようにして範囲を取ります。今は、何を基準してよいのか分かりません。 一例: Set r = .Range("A1", Range("A65536").End(xlUp)).Resize(, 17)
- misatoanna
- ベストアンサー率58% (528/896)
再び#5です。 > やっぱり罫線は表示されます。ヴァージョンは同じ2000です。 理由がわかりました。 > 説明不足だったのですが、Q列は、O列とP列とQ列のセルを結合させています。 > また、フッターにも文字入力をしていました。 結合セルがあったのですね。 残念です。フッターの有無は関係ないのですが、結合セルあるとできません。(-_-;) A列のデータが文字列の場合でしたら、印刷範囲を自動的に拡張するために名前を定義 する方法もあります。 先頭から「A列の入力済み最終行」のQ列までを印刷範囲とする場合です。 同じように、A~Q列の列全体を選択して罫線(格子)を設定し、次のように名前を定義 します。(対象シートの名前が "Sheet1" だとして) ・名 前: Print_Area (必ずこの名前にしてください) ・参照範囲: =Sheet1!$A$1:INDIRECT(ADDRESS(MATCH("",Sheet1!$A:$A,-1),17)) 印刷したい最終行のA列が空白の場合は、その行のA列のセルにスペースを入れます。 もし、A列が数値データの場合は、MATCH("",Sheet1!$A:$A,-1) の $A:$A の部分は、 B:Q列の中で文字列データが入っている列をひとつ選び、その列記号に書き換えて ください。 また、印刷したい最終行のその列が空白の場合は、そのセルにやはりスペースを入れて ください。 印刷範囲を示す破線が自動的に表示されるので、わかりやすいと思います。 。
- misatoanna
- ベストアンサー率58% (528/896)
#5です。 > 少し飲み込めないのですが。 私の説明が舌足らずだったかも知れません。 > 不要な罫線も印刷対象になってしまいます。 バージョン違いで機能が異なるのでしたら、ごめんなさい。(私は Excel2000) 試しに、新規にExcelを開いてA~Gくらいまでの列全体を選択し、罫線(格子)を 指定してください。 その後、セル C30 だけに何か入力してから印刷プレビューしてみてください。 Excel2000では、罫線は A1:C30 の範囲にしか表示されません。 それ以外の範囲にも罫線は表示されていますか? 表示されていましたら、回答は無視してください。バージョン違いによる機能差 なのでしょう。 A1:C30 の範囲にだけ表示されているのでしたらOKです。 次に、C30 のデータを削除し E10 に何かを入力してから印刷プレビューを見ると、 やはり A1:C30 の範囲に罫線が表示されますね。 ここでブックを保存し、そのまま改めて印刷プレビューを表示しますと、A1:E10 に だけ罫線が表示されます。 ――ということです。
補足
やぱっぱり罫線は表示されます。 ヴァージョンは同じ2000です。 理解力が足りない・・・うーーー・・・・すみません。
- misatoanna
- ベストアンサー率58% (528/896)
マクロを使わない簡単な方法です。 > 罫線は67行まで引いていますが印刷時には無視します。 67行目以下にはデータが何も入力されていないという前提です。 67行目以下にも別な表がある場合は、この回答は無視してください。 A1:Q65536(シート最終行)の範囲すべてに罫線を引いてしまいます。 こうしておくと、罫線も、データが入った最終行までしか印刷されません。 注)例えば50行目までデータを入力した後で20行目以下をクリアすると、 そのままでは50行目まで印刷されてしまいますので、いったん保存して から印刷してください。(ブックを閉じる必要はありません)
お礼
すみません。 少し飲み込めないのですが・・・ 不要な罫線も印刷対象になってしまいます。 それと、申し訳ないです。フッターに文字を入れている状態です。 お手数をおかけします。
- NCU
- ベストアンサー率10% (32/318)
Sub 最下行までを印刷範囲に設定() With Columns("A:Q") ActiveSheet.PageSetup.PrintArea = .Resize(.Find("*", _ , xlFormulas, , xlByRows, xlPrevious).Row).Address End With End Sub A~Q列のうちデータの存在する(ブランクでない)最下行を取得し、当該行までを印刷範囲に設定。 すぐでなくても結構ですから、回答のあった数だけは今後回答するようにして下さい。
お礼
すみません。 お礼、遅くなりました。 ありがとうございました。 説明不足だったのですがQ列は、O列とP列とQ列 のセルを結合させています。 また、フッターにも文字入力をしていました。 どうもすみませんでした。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 以下のような、With の二重入れ子は、コードとして芳しくないのですが、まあ、とりあえず、こんな風にしてみました。罫線をなくしてしまうマクロというのもあるのですが、今回は、印刷の簡易モードを利用しました。なお、印刷する場合は、.PrintOut Preview:= False にしてください。 後は、記録マクロと見比べながら、アレンジしてみてください。微調整が必要かもしれません。 Sub PrintPreparing() Dim r As Range With ActiveSheet Set r = .Range("A1", Range("Q65536").End(xlUp)) With .PageSetup If r.Rows.Count > 1 Then '2行以上だったら印刷 .PrintArea = r.Address End If '本来は、PaperSizeなどのプロパティを入れるとなおよい .Draft = True '罫線などは省略するモード End With .PrintOut Preview:=True '実際にプリントするようになれば、False .PageSetup.Draft = False 'ドラフトモードは、戻しておく End With Set r = Nothing End Sub
お礼
ありがとうございました。 説明不足でした。 Q列は、O列P列Q列のセルを結合させたものです。 勉強にもなりますのでアレンジして活用させていただきます。 お手数をお掛けしました。
- zap35
- ベストアンサー率44% (1383/3079)
以下の行をマクロで印刷する前の行に追加したら期待に添いませんか? ActiveSheet.PageSetup.PrintArea = "$A$1:$Q$" _ & Range("Q65536").end(xlup).row
お礼
説明不足ですみませんでした。 空白行に影響されたみたいです。 どうもすみませんでした。
お礼
方法2.をマクロで実行してみました。 期待どおりの印刷ができました。 ありがとうございました。