
数字が「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

No.2
- 回答日時:
>コンパイルエラー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含む行全体も使う事が多いです
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) Sub 分けてソートして貼り付ける() Dim srcSheet As Worksheet Dim 6 2023/08/04 19:57
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) ワークシート内を検索 1 2022/12/19 23:46
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
IIF関数の使い方
-
Cellsのかっこの中はどっちが行...
-
Changeイベントでの複数セルの...
-
vba 2つの条件が一致したら...
-
【VBA】複数行あるカンマ区切り...
-
SpecialCells(xlCellTypeConsta...
-
VBAを使って検索したセルをコピ...
-
VBAで、離れた複数の列に対して...
-
VBA 何かしら文字が入っていたら
-
オートフィルタをマクロで作成...
-
VBAコンボボックスで選択した値...
-
データグリッドビューの一番最...
-
VBAで、特定の文字より後を削除...
-
【VBA】2つのシートの値を比較...
-
マクロについて。S列の途中から...
-
VBA 列が空白なら別のマクロへ...
-
重複データをまとめて合計を合...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
vba 2つの条件が一致したら...
-
B列の最終行までA列をオート...
-
IIF関数の使い方
-
Cellsのかっこの中はどっちが行...
-
【VBA】2つのシートの値を比較...
-
VBAのFind関数で結合セルを検索...
-
URLのリンク切れをマクロを使っ...
-
文字列の結合を空白行まで実行
-
VBA 何かしら文字が入っていたら
-
VBAを使って検索したセルをコピ...
-
【Excel VBA】 B列に特定の文字...
-
VBAで指定範囲内の空白セルを左...
-
Changeイベントでの複数セルの...
-
VBAで、離れた複数の列に対して...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
rowsとcolsの意味
-
DataGridViewに空白がある場合...
おすすめ情報