データのあるセル範囲を取得して(CurrentRegionを使うと簡単)
そのセル範囲を For Each で Rows と Columns をループ処理
データがあるかどうかは Count関数で件数を数えで0件ならデータ無しと判断
データ無しの行または列を削除
というロジックで組んでみました。
vba
1Public Sub DelBlankRowCol()
2
3 Dim rng As Range
4 Set rng = Range("A1").CurrentRegion
5 Set rng = Intersect(rng, rng.Offset(1, 1))
6
7 Dim i As Long
8 For i = rng.Rows.Count To 1 Step -1
9 If WorksheetFunction.Count(rng.Rows(i)) = 0 Then
10 rng.Rows(i).EntireRow.Delete
11 End If
12 Next
13 For i = rng.Columns.Count To 1 Step -1
14 If WorksheetFunction.Count(rng.Columns(i)) = 0 Then
15 rng.Columns(i).EntireColumn.Delete
16 End If
17 Next
18End Sub
データが数値だけなの場合はこれでいいですが、文字もあるなら、CountA関数に変更してください。
追記
最終行、最終列にデータがある場合のコードは下記で。
vba
1Public Sub DelBlankRowCol()
2
3 Dim rng As Range
4 With Range("A1").CurrentRegion
5 Set rng = .Offset(1, 1).Resize(.Rows.Count - 2, .Columns.Count - 2)
6 End With
7
8 Dim i As Long
9 For i = rng.Rows.Count To 1 Step -1
10 If WorksheetFunction.Count(rng.Rows(i)) = 0 Then
11 rng.Rows(i).EntireRow.Delete
12 End If
13 Next
14 For i = rng.Columns.Count To 1 Step -1
15 If WorksheetFunction.Count(rng.Columns(i)) = 0 Then
16 rng.Columns(i).EntireColumn.Delete
17 End If
18 Next
19End Sub
2020/12/10 07:20
2020/12/14 02:52