
数字が「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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
IIF関数の使い方
-
EXCEL VBA 条件に合致しない行...
-
B列の最終行までA列をオート...
-
VBAのFind関数で結合セルを検索...
-
Cellsのかっこの中はどっちが行...
-
rowsとcolsの意味
-
エクセルVBA intersect colu...
-
VBAの初心者なのですが、「並び...
-
期限を超えた日付に警告のメッ...
-
エラーコード1004
-
Changeイベントでの複数セルの...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
Excel VBA でテキストボックス...
-
エクセルでフォームのチェック...
-
vba 2つの条件が一致したら...
-
VBA 何かしら文字が入っていたら
-
VBA初心者です 検索した数字の...
-
エクセルVBAで複数の条件を満た...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
B列の最終行までA列をオート...
-
IIF関数の使い方
-
URLのリンク切れをマクロを使っ...
-
VBAを使って検索したセルをコピ...
-
DataGridViewに空白がある場合...
-
VBA 何かしら文字が入っていたら
-
VBAのFind関数で結合セルを検索...
-
複数の列の値を結合して別の列...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
VBAで指定範囲内の空白セルを左...
-
rowsとcolsの意味
-
【Excel VBA】 B列に特定の文字...
-
VBAで、特定の文字より後を削除...
-
エクセル 2つの表の並べ替え
おすすめ情報