プロが教える店舗&オフィスのセキュリティ対策術

数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunctionが定義されていませんとなります。どこを直したらよいか教えてください。
Sub 数字がゼロの列を一括削除()
Dim i As Long
Dim j As Long
Dim LastRow As Long
Dim LastClm As Long
'最終列
LastClm = Range("C2").End(xlToRight).Column
'最終行
LastRow = Cells(Rows.Count, 3).End(xlUp).Row
'行をループ
For i = LastRow To 1 Step -1
'列をループ
For j = 2 To LastClm
'値が0だったら
If Cells(i, j) = "0" Then
'最終列まで0だったら
If j = LastClm Then
'列削除
Column(j).Delete
End If
Else
'値に0以外があったら、次の行へ
Exit For
End If
Next j
Next i
End Sub

「数字が「0」の列を削除するため、下記のコ」の質問画像

A 回答 (3件)

文章が変でした


>問題がありそうなコード行は
問題がありそうなコード行の添削例
    • good
    • 0
この回答へのお礼

丁寧な順を追った説明に感謝します。今回のご回答は私の中の保存版ですよ!ありがとうどざいました。

お礼日時:2022/12/04 11:41

>コンパイルエラーSubまたはFunctionが定義されていませんとなります。

どこを直したらよいか教えてください。
ご質問とは関係ないですが、多分上手くいかないのでは無いかと・・

列を削除するため・・
検証セルの行と列が逆になっているような・・
ループを確認してみては・・
一番右の列で最後の行まで調べて 最終行までForを抜けなければ
列を削除・・・かな それを右の列に移動する

問題がありそうなコード行は
LastClm = Cells(3, Columns.Count).End(xlToLeft).Column
For j = LastClm To 3 Step -1
'行をループ
For i = 3 To LastRow
If i = LastRow Then
Next i
Next j
かな?


検証セルを総当たりでなく関数でやる方法もあります
オブジェクト型の変数を使用します(Range セル範囲を格納する変数)
オブジェクト型の変数の決まりは 代入時 Set を使う

Sub test()
Dim j As Long
Dim rng As Range
For j = Cells(3, Columns.Count).End(xlToLeft).Column To 3 Step -1
Set rng = Range(Cells(3, j), Cells(Rows.Count, j).End(xlUp))
rng.Select
Next j
End Sub

先ずはF8キーで上記プロシージャを実行してシート上の選択範囲の変化を確認してみましょう

オブジェクト型の変数を調べ理解すれば
Unionを使ってまとめて削除する事も出来ますよ(調べてください)

範囲を変数に代入できるので よく使うシート関数CountIfで
0の数と範囲のセルの数を比較して同じ(全部0)なら削除する
・・なんてアイデアも出て来ます

Sub test0()
Dim j As Long
Dim rng As Range
For j = Cells(3, Columns.Count).End(xlToLeft).Column To 3 Step -1
Set rng = Range(Cells(3, j), Cells(Rows.Count, j).End(xlUp))
If Application.WorksheetFunction.CountIf(rng, 0) = rng.Count Then
rng.EntireColumn.Delete
End If
Next j
End Sub

オブジェクト.EntireColumnはオブジェクトを含む列全体
今回のオブジェクトはrng 対象範囲です

EntireRow含む行全体も使う事が多いです
    • good
    • 0

Column(j).Delete


Columns(j).Delete
かな
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!