- ベストアンサー
EXCEL2000 VBA レコードの入っているセルにのみ罫線
EXCEL2000です。 CSVファイルを取り込んでエクセルシートに貼り付け(値だけを貼り付け)、罫線を受けて書式を整えるマクロを記録したいと思っています。 が、読み込むファイルのレコード数が毎日違う(10から100件程度)ので、取り込んだエクセルシートのセルに罫線がうまくつけられません。先に200程度セルに罫線をつけておく事も考えたのですが、そうすると印刷時にレコードのない部分まで印刷されてしまいます。一枚の紙に15件ほどしか入らないので、10の時に200だと何もレコードの入っていない紙が13枚ほど出てきてしまうのです。 レコードは横もちなのですが、ところどころ虫食いもあります。ただ、必ずB列だけはレコードがあります。 いくつかロジックを考えてみました。 1)Bのセルがnullでなければ、その横A1-D1までに罫線を引く。Bのセルがnullになったら罫線は引かない。それぞれセルごとに罫線が要ります。 2)Bのセルがnullでないセルまでを選ぶ方法。印刷のオプションに選択した範囲を印刷、というのがあるので、レコードが入っている範囲を選択する方法があればそれでもできるかなと。 どなたか教えていただければ幸いです。また、他に案があればよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
下記の要領で。 Public Sub MakeLine() With Application.ActiveSheet.UsedRange .Borders(xlDiagonalDown).LineStyle = xlNone .Borders(xlDiagonalUp).LineStyle = xlNone .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideHorizontal).LineStyle = xlContinuous End With End Sub
その他の回答 (2)
- happypoint
- ベストアンサー率36% (521/1422)
罫線を引く前に、データのある範囲だけを、範囲選択ができればいいわけですよね? 以下は、そのサンプルです。 罫線を引くコードの前にこのコードを貼り付けてみてください。 Sub Sample() Dim myRow As Long Const myCol As Long = 4 'データ全体の列数(D列までデータがあるなら、4) Const myKey As Long = 2 '必ずデータがある列の番号(たとえばB列なら、2) myRow = ActiveSheet.Rows.Count myRow = Cells(myRow, myKey).End(xlUp).Row 'データ項目数を取得 Range(Cells(1, 1), Cells(myRow, myCol)).Select End Sub
お礼
ありがとうございました。締め切るほとんど寸前にご回答いただいたようで、評価の対象にはいれさせていただく余裕がなかったのですが。 http://www.okweb.ne.jp/kotaeru.php3?q=564131 再度こちらで質問しているのですが、#3さんのコードも参考にしてみます。このコードでレンジした範囲のセルの高さを80にするコードを書いてみようと思います。 ありがつございました。
1でいくなら、罫線の引き方はマクロの記録でやっていただくとして Dim lngRow As Long Do Until IsEmpty(Cells(lngRow, 2) 罫線を引く Loop と、ちょっと改造してあげれば、できると思います。
お礼
回答ありがとうございました。 もうちょっと試行錯誤してがんばってみます。
補足
罫線を引く、というマクロをマクロの記録で作りました。 Sub 罫線を引く() ' ' Range("A1:D1").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 End Sub これで、ご回答いただいたコードはどこにどう記述すればいいのでしょうか。Loop関数の使い方もいまいちわからないので、もしもお時間があるようでしたら教えてください。
お礼
ご回答ありがとうございました。 こちらの方法で出来た、と思って回答を締め切らせていただいた直後、この方法は、セルに書式設定がしてある範囲もレコードが入っていると認識することがわかりました。 書式設定がなければこの方法でいけました。ありがとうございます。 http://www.okweb.ne.jp/kotaeru.php3?q=564131 こちらに再度質問させていただきましたが、もしもおわかりになるようでしたら、教えていただけますと幸いです。