• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルでデータがある部分だけ範囲内の空白も込みで罫線で囲いたいです。)

エクセルでデータがある部分だけ範囲内の空白も込みで罫線で囲いたいです。

このQ&Aのポイント
  • エクセルでデータがある部分だけ、範囲内の空白も込みで罫線で囲みたいです。
  • エクセルのファイルを開いて、データのある部分だけを罫線で囲みたいです。空白の行や列も含めて対応したいです。
  • エクセルのデータの範囲を自動で判別して、空白も含めて罫線で囲む方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.4

  ----------------------------------  With ActiveSheet.UsedRange.Borders   .LineStyle = xlContinuous   .Weight = xlThin   .ColorIndex = xlAutomatic End With ---------------------------------- 実際は、行、列の最終を調べてやるべきです。  

gx9wx
質問者

お礼

ありがとうございます。 完璧に動作しました。 記述も短くて最高です。

gx9wx
質問者

補足

>実際は、行、列の最終を調べてやるべきです。 コマンドボタンを押すと、別ファイルのエクセルを開き いろいろな編集を行い、最後に罫線を引いて ファイル名をシステム日付で付けて登録マクロを引きつかず 別ファイルで保存までする という プロシージャーの中に組み込ませたいのです。 よって開いて編集した最終を調べる事ができないのです。 申し訳ありません。

その他の回答 (3)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

Sub test() Dim r, c As Long r = ActiveSheet.UsedRange.Rows.Count c = ActiveSheet.UsedRange.Columns.Count With Range(Cells(1, 1), Cells(r, c)) .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideHorizontal).LineStyle = xlContinuous End With End Sub forでまわさないだけ速いでしょう。 すでにあるプロシージャとくつけるのなら, #1のお礼でエラーになるのは,Dim i,jで,iが前で宣言されているからでしょう。Dim jとすれば解消されるのではないですか。 これも,同様r,cが前に宣言されていれば,エラーになるので,Dimからはずす。

gx9wx
質問者

お礼

>すでにあるプロシージャとくつけるのなら, >#1のお礼でエラーになるのは,Dim i,jで,iが前で宣言されているからでしょう。Dim jとすれば解消>されるのではないですか。 >これも,同様r,cが前に宣言されていれば,エラーになるので,Dimからはずす。 はい。iが前で宣言されていました。 この教えていただいたのはr,cが前に宣言されておらず エラーにならずに実行できました。 あと、すごく速かったです。 5,000行ありますが、すでにあるプロシージャーの動作終了後 1秒以内で罫線引き終わりました。 ありがようございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

再びお邪魔します。 補足にある問題点について、こちらでデータを削除、行挿入・列挿入・行削除・列削除の後 前回のコードのマクロを実行してみましたが、問題なくA1セルから最終行・最終列まで罫線が表示されました。 というわけで補足にある原因についてはちょっと判りかねます。(ごめんなさい) それからエラーに関してですが、 (同じ適用範囲内で宣言が重複しています。)というエラーが出たのであればその通りに二重に宣言しているのだと思います。 コードをよくよく見返してみると同じ宣言をしている行がありませんか? そして、最後にコードの長さについてですが、ちゃんと正常に作動するのであれば問題ないと思いますよ。 コードの記述は人それぞれですので、「これでないといけない!」ということはありません。 考え方・方法によってコードの記述は十人十色ですので、あまり気にしなくて良いと思います。 (コードの記述をみると個性はあるみたいですが・・・それはそれで良いのでは? 私個人的には FOR~NEXTステートメントはよく使いたがる方です。) 重要なのは思った通りに動いてくれるかどうか?ということだと思います。 この程度ですが ごめんなさいね。m(__)m

gx9wx
質問者

お礼

連結するプロシージャー内の一部に以下の記述がありました。 'A列とB列の数値データーを名称に変更 Dim i As Long Dim Ar1 As Variant, Ar2 As Variant Dim LastRow As Long Ar1 = Array("", "入庫", "出庫", "返品") Ar2 = Array("", "社内製品", "社外製品", "受入検査") Application.ScreenUpdating = False LastRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To LastRow If IsNumeric(Cells(i, 1).Value) Then If Cells(i, 1).Value > 0 And Cells(i, 1).Value < 4 Then Cells(i, 1).Value = Ar1(Cells(i, 1).Value) End If End If Next 'A列の値とB列の値から11,12,13列目に履歴表を作成 For i = 1 To LastRow If IsNumeric(Cells(i, 2).Value) Then If Cells(i, 2).Value > 0 And Cells(i, 2).Value < 3 Then Cells(i, 2).Value = Ar2(Cells(i, 2).Value) ElseIf Cells(i, 2).Value = 3 Then Cells(i, 2).Value = Ar2(Cells(i, 2).Value) Cells(i, 1).Value = Cells(i, 2).Value End If End If If Cells(i, 11).Value <> "" Then If Cells(i, 1).Value Like "入庫" Or Cells(i, 1).Value Like "返品" Then Cells(i, 12).Value = Cells(i, 11).Value: Cells(i, 11).ClearContents ElseIf Cells(i, 1).Value Like "出庫" Then Cells(i, 13).Value = Cells(i, 11).Value: Cells(i, 11).ClearContents End If End If Next Application.ScreenUpdating = False

gx9wx
質問者

補足

補足にある問題点について すいません。誤解を与えました。 これは教えてもらった内容を行う前に、独自で行った記述を 再チャレンジとして書きました。 でそれはそれで思ったように動作したのですが 根拠がなかったので、補足に書いてみました。 申し訳有りません。 教えていただいた内容では >こちらでデータを削除、行挿入・列挿入・行削除・列削除の後 >前回のコードのマクロを実行してみましたが、 >問題なくA1セルから最終行・最終列まで罫線が表示されました。 そのとうりで、ぜんぜん問題ありません。 ありがとうございました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! こんな感じでも良いのですかね? 色々方法はあるかと思いますが、一例です。 A1セルは必ず何かが入力されているものとします。 Sub test() Dim i, j As Long For i = 1 To ActiveSheet.UsedRange.Rows.Count For j = 1 To ActiveSheet.UsedRange.Columns.Count With Cells(i, j) .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous End With Next j Next i End Sub 参考になればよいのですが 的外れならごめんなさいね。m(__)m

gx9wx
質問者

お礼

ありがとうございます。単独なら動きました。 ですがすでに作成済みの他の編集マクロの記述の後に貼り付けてマクロを起動したら Dim i, j As Long のiに黄色が付いてコンパイルエラー (同じ適用範囲内で宣言が重複しています。) となります。 原因がわかりません。 作成済みのマクロ単独ではOK。 作成済みマクロ起動前に教えていただいたマクロを起動ではOK。 作成済みのマクロ起動で編集終了後に 教えていただいたマクロを起動でもOK。 ですが作成済みのマクロとこの教えていただいた物を 連結させると駄目です。 ですが作成済みのマクロ文の最後に Callで教えていただいたマクロを呼び出すと正常動作です。 なぜでしょうか?

gx9wx
質問者

補足

再チャレンジです。 Sub Macro3() Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).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 これなら全シートは選択されません。 でも本当にこれでいいのか不安です。 記述も長いし。 これはマクロの記録で セルA1を選択して、Ctrl+End を押して、罫線で格子を選んで終了です。 A1からM100までデータがあって 10列目に行挿入をして空白にして C列に列挿入してN列まで増やして A1からN101までに増えて、 セルN101をDELETEしましたが A1からN101まで囲まれました。 DELETEや行挿入や列挿入したら 目には見えないけどデータがあると判断したのでしょうか。 Ctrl+Aだと空白がある所のA1からC9までしか選択しませんので いいのでしょうか?

関連するQ&A

専門家に質問してみよう