『Delete後のセル範囲について』(ささみ)
特定のセル範囲をDeleteした後にUsedRangeで範囲を確認すると
ゴミが残っているのかDeleteしたはずの範囲を含んでしまいます
一応セル範囲.Formula=セル範囲.Formulaと上書き保存とClearも試しましたが
変わらずの状態です
他に対処法があれば教えていただけますか?
< 使用 Excel:Microsoft365、使用 OS:Windows11 >
(隠居Z) 2025/05/02(金) 11:01:26
Dim i As Long Dim v DEntry With Worksheets("Sheet1") .UsedRange.Delete MsgBox .UsedRange.Address End With End Sub Private Sub DEntry() With Worksheets("Sheet1") .Range("A1:D11").Value = "EXCEL" MsgBox .UsedRange.Address End With End Sub ↑ だと どうなりますでせうか? m(__)m (隠居Z) 2025/05/02(金) 11:03:58
削除したいのはUsedRange全てではないので丸ごとDeleteは望ましくないんですよね…
対象シートはデータ表なのですが、印刷もするので1ページ25行×6列の表として ページごと追加・削除を行おうとしています 動作確認で2ページ目(A26:F50)に罫線など表の形式を反映させてから2ページ目を Deleteした後UsedRangeの行数を確認したら50行になっていたんです (ささみ) 2025/05/02(金) 11:29:48
With ActiveWorkbook.Worksheets.Add .Range("A1:G16").Borders.LineStyle = True .Range("B1:F16").Delete Shift:=xlUp MsgBox .UsedRange.Address End With
こんなことが起きているのではと予想
(豆右衛門) 2025/05/02(金) 11:49:47
Range("A26:F50")のデータは削除(Delete)したけど、罫線は残っているってこと? だとすれば、UsedRangeはそのままですよ。 罫線や書式設定なども、ユーザが使用している(Used)ってことになるので。 (ん?) 2025/05/02(金) 12:00:25
>豆右衛門さん 行数と列数はModule先頭に定数で宣言して利用しているので削除範囲が ずれることはないと思うんです 改ページプレビュー上だとちゃんと1ページのみ(A1:F25)にはなっているのですよね…
>ん?さん 罫線も削除されています (ささみ) 2025/05/02(金) 12:03:08
(隠居Z) 2025/05/02(金) 12:07:00
>特定のセル範囲をDeleteした後にUsedRangeで範囲を確認すると >ゴミが残っているのかDeleteしたはずの範囲を含んでしまいます >一応セル範囲.Formula=セル範囲.Formulaと上書き保存とClearも試しましたが >変わらずの状態です
言葉で言ってないで、 (そちらでトラブルになる)再現コードを提示してもらえませんか?
(半平太) 2025/05/02(金) 12:12:33
>半平太さん 失礼しました
*下記コード中のWSはActivesheetです
Public Const ColCnt As Long = 6 Public Const RowCnt As Long = 25
Sub Delete_Page(ByVal WS As Worksheet)
With WS Dim PageCnt As Long PageCnt = WorksheetFunction.RoundUp(.UsedRange.Rows.Count / RowCnt, 0)
If PageCnt = 1 Then Exit Sub
Dim startRow As Long startRow = RowCnt * (PageCnt - 1) + 1
.Cells(startRow, 1).Resize(RowCnt, ColCnt).Delete
If .Shapes.Count > 0 Then Dim shp As Shape For Each shp In .Shapes If shp.Top > .Cells(startRow, 1).Top Then shp.Delete Next shp End If
If .HPageBreaks.Count > PageCnt - 1 Then .HPageBreaks(.HPageBreaks.Count).Delete End If
If .Cells(startRow - 1, 1).Resize(1, ColCnt).Borders(xlEdgeBottom).LineStyle <> xlContinuous Then .Cells(startRow - 1, 1).Resize(1, ColCnt).Borders(xlEdgeBottom).LineStyle = xlContinuous End If
Application.Goto reference:=.Cells(startRow - RowCnt, 1), Scroll:=True
End With
End Sub
念のため、ページ追加のコードも追記します
Sub Add_Page(ByVal WS As Worksheet)
With WS Dim PageCnt As Long, startRow As Long PageCnt = WorksheetFunction.RoundUp(.UsedRange.Rows.Count / RowCnt, 0) startRow = RowCnt * PageCnt + 1 If .HPageBreaks.Count < PageCnt Then .HPageBreaks.Add .Cells(startRow, 1).Resize(1, ColCnt)
Dim タイトルRange As Range Set タイトルRange = Set_タイトルRange(WS,1)
.Cells(startRow, 1).Resize(タイトルRange.Item(タイトルRange.Count).Row, ColCnt).Value(xlRangeValueXMLSpreadsheet) _ = Range(.Cells(1, 1), タイトルRange.Item(タイトルRange.Count)).Value(xlRangeValueXMLSpreadsheet)
Dim varRow As Variant varRow = Application.Match("預り金", ThisWorkbook.Worksheets(1).Columns(1), 0) If IsError(varRow) Then varRow = 6
Dim bufRow As Long bufRow = startRow + タイトルRange.Item(タイトルRange.Count).Row
.Cells(bufRow, 1).Resize(7, ColCnt).Value(xlRangeValueXMLSpreadsheet) _ = ThisWorkbook.Worksheets(1).Cells(varRow, 1).Resize(7, ColCnt).Value(xlRangeValueXMLSpreadsheet)
Call Set_形式Format(WS, PageCnt + 1)
Application.Goto reference:=.Cells(startRow, 1), Scroll:=True End With
End Sub
(ささみ) 2025/05/02(金) 12:40:22
Sub Delete_Page(ByVal WS As Worksheet) のコードにおいてですが、 どこで、Delete後のUsedRangeを使っている(確認している)のですか?
もしくは、
Deleteしたはずの範囲が含まれていることについて、何を以て確認できたのですか? ※Delete前の最終行番号と Delete後の最終行番号を書き出すコードを追加してみれば ささみさんの主張が正しいかどうか誰にも明らかになると思いますけども。
(半平太) 2025/05/02(金) 13:47:58
Dim msg As String Dim s As Shape For Each s In ActiveSheet.Shapes If s.BottomRightCell.Column > 6 Then msg = msg & s.Name & " :BottomRightAddress 【" & s.BottomRightCell.Address(0, 0) & "】" & vbCrLf End If Next MsgBox msg
これで何か見つかるかも?
(豆右衛門) 2025/05/02(金) 13:58:50
自己解決?しました 新規Sheetで改めて表を作り直し、上記のページ追加・削除ののちに 表形式を整えるSub(上記Add_Page内記載のSet_形式Format)を行ったところ UsedRangeの範囲が望んだものになりました 試していたSheetに何らかの問題があったようです 結局原因が不明なのでいまいちスッキリしませんがとりあえず解決したと考えます
>半平太さん Delete_Pageを行った後で再度Add_Pageを行ったらエラーが出たので そこでちゃんと削除されていないことが分かりました その後Delete_Pageを試すたびにDebug.Printでセル範囲を確認していたのですが どうにも変わらなかったのでこちらに相談することにしました
>豆右衛門さん 問題のSheetで試してみましたが何も出ませんでした…
(ささみ) 2025/05/02(金) 14:07:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.