Microsoft ExcelでVBAを使用して削除行と列
Excelのforループのファイルから空白の行または列を削除しなければならない場合があります。vbaマクロ/コードを記述します。使用する必要のあるコードは、状況によって異なります。 1つの行または列を削除する必要がある場合もあれば、行または列の範囲全体を削除する必要がある場合もあれば、1つ以上の条件に基づいて行/列を削除する必要がある場合もあります。
1つ以上の特定の行または列のみを削除する必要がある場合は、VBA Excel forループを使用し、次のコードを使用できます-_Option Explicit Sub macro1()
Application.DisplayAlerts = False With Worksheets(“ Sheet1”)
Application.DisplayAlerts = False
表示アラートをfalseに設定し、必要なファイル名でファイルを保存します。次に、EndSubの直前で表示アラートをtrueに設定します。
With Worksheets(“ Sheet1”)は、EndWithで終わるWithループです。
これをforループVBAExcelで使用する場合、このオブジェクトを使用するこのループ内のすべてのステートメントは、「Worksheets( “Sheet1″)」で始まる必要はありません。代わりに、ドット(。)だけで直接開始できます。
_.Rows(“ 5:6”)。Delete_は、行5と6のみを削除します。
この場合、指定された行/列のみが削除されます。
ただし、特定の条件に基づいて行/列を削除しなければならない場合があります。例:ヘッダーとして「Test」を含むファイル内のすべての列を削除するとします。この場合、ある列から別の列にチェックするループが必要であり、基準が満たされると、列が削除されます。
このようなコードを使用できます。一人一人が自分が快適な方法でコードを準備することに注意してください。これは、これをコーディングできる方法の1つにすぎず、唯一の方法ではありません。
_Option Explicit Sub macro2()
Dim i As Long、lcol As Long Application.DisplayAlerts = False With Worksheets(“ Sheet1”)
lcol = .Range(“ A1”)。End(xlToRight).Column For i = lcol to1ステップ-1If .Cells(1、i).Value =“” Then Exit For If .Cells(1、i)。 value =“ Test” Then .Columns(i).Delete Next i End With Application.DisplayAlerts = True End Sub_次の図のように、モジュール1に保存されているコードを参照してください
ここで、lcolは、データが含まれているシートの最後の列です。空のファイルでこのコードをテストした場合、lcolの値は16384になるか、Excelのバージョンに応じて最後の列の列番号になります。次に、最後の列から最初の列にループし、毎回1ステップ後退します。最後の行または最後の列から削除を開始した場合にのみ削除コードが正常に機能するため、後方に移動しています。 1 ^ st ^行/列から開始すると、コードがエラーになる傾向があります。
空のファイルでマクロを実行する場合に備えて、1 ^ st ^ if条件が入力されます。 Excelでは、マクロは最後の列(この場合は16384)から列1までループし、これにはかなり長い時間がかかる可能性があります。したがって、コードが空白の列を見つけた場合、exitForステートメントを介してループをすぐに終了します。 2 ^ nd ^ if条件は、値が「Test」であるかどうかをチェックし、「Test」が見つかった場合は列を削除します。
列ではなく行を削除する場合、コードは次のように変更されます– _Option Explicit Sub macro3()
Dim i As Long、lrow As Long Application.DisplayAlerts = False With Worksheets(“ Sheet1”)
lrow = .range(“ A”&。Rows.Count).End(xlUp).Row For i = lrow to 2 Step -1 If .Cells(i、1).Value =“” Then Exit For If .Cells( i、1).Value =“ Test” Then .Rows(i).Delete Next i End With Application.DisplayAlerts = True EndSub_以下のコードを参照してください-
上記のコードでは、。Cells(1、i).value_が.Cells(i、1).value_に変更されていることがわかります。これは、最初のコードでは列を削除していたため、変数「i」が列をループする必要があったのに対し、2 ^ nd ^コードでは行をループする必要があるために発生します。ここでは、最後の行から2 ^ nd ^行にループします。これは、1 ^ st ^行に保持する必要のあるヘッダーが含まれているためです。
コード要件に従って、行の削除と列の削除の両方のコードを1つのコードにマージすることもできます。行/列を削除する条件に基づいて、複数の条件を設定することもできます。 1 ^ st ^列にTestやDummyなどのテキストが含まれているすべての行を削除したい場合、コードは次のようになります– _Option Explicit Sub macro4()
Dim i As Long、lrow As Long Application.DisplayAlerts = False With Worksheets(“ Sheet1”)
lrow = .range(“ A”&。Rows.Count).End(xlUp).Row For i = lrow to 2 Step -1 If .Cells(i、1).Value =“” Then Exit For If .Cells( i、1).Value =“ Test”または.Cells(i、1).Value =“ Dummy” Then .Rows(i).Delete Next i End With Application.DisplayAlerts = True End Sub_
同様に、このコードまたは要件に基づいて使用しているコードに追加できます。行、さらには列に複数の条件を追加できます。