[解決済み] エクセルVBAで行を削除する
質問
私は、リストからアイテムのExcel行を見つけ、リストからアイテムを削除するコードのこの部分を持っています。私が欲しいのは...同様にExcelの行を削除することです。
コードはこちら
Private Sub imperecheaza_Click()
Dim ws As Worksheet
Dim Rand As Long
Set ws = Worksheets("BD_IR")
Rand = 3
Do While ws.Cells(Rand, 4).Value <> "" And Rand < 65000
If ws.Cells(Rand, 4).Value = gksluri.Value * 1 And ws.Cells(Rand, 5).Value = gksluri.List(gksluri.ListIndex, 1) * 1 Then
ws.Range(Rand, 1).EntireRow.Delete '(here I want to delete the entire row that meets the criteria from the If statement)
gksluri.RemoveItem gksluri.ListIndex
Exit Do
End If
Rand = Rand + 1
Loop
End Sub
ws.Range(Rand,1).EntireRow.Delete を追加したところは、行全体を削除したいのですが、どうすればいいのでしょうか。もし、あるセルで同じ値が見つかったら、リストボックスの項目と行全体を削除できるようにしたいのですが。リストボックスから項目を削除するために動作しますが、私は同様に行を削除する方法がわかりません。
解決方法を教えてください。
Chris Nielsenの解決策はシンプルでうまくいくでしょう。もう少し短い選択肢は...
ws.Rows(Rand).Delete
...行を削除する際に Shift を指定する必要がないことに注意してください。なぜなら、定義上、左にシフトすることはできないからです。
ちなみに、私が好んで使っている行削除の方法は...
ws.Rows(Rand) = ""
...最初のループで。その後、ソート関数を使って、これらの行をデータの一番下に押し出しています。この主な理由は、1行の削除に非常に時間がかかるからです(>100行を削除する場合)。また、Robert Ilbrink氏のコメントにあるように、見落としがないようにするためでもあります。
ソートのコードは、マクロを記録して、次のようにコードを縮小することで学ぶことができます。 エキスパートExcelビデオ . 私は、最も巧妙な方法(Range("A1:Z10").Sort Key1:=Range("A1"), Order1:=xlSortAscending/Descending, Header:=xlYes/No) は2007以前のバージョンのみで発見できるのではないかという疑念を持っていますが、2007/2010相当のコードをいつでも縮小できるのですから......。
もし、リストがまだ列でソートされておらず、順番を保持したい場合は、各行の右側にある予備の列に行番号「Rand」を貼り付けてループさせることができます。そうすると、そのコメントでソートされ、コメントが削除されます。
データ行に書式が含まれている場合、新しいデータ範囲の終端を探し、先にクリアした行を削除するとよいでしょう。それは、ファイルサイズを小さくするためです。プロシージャの最後に大きな削除を一つ入れても、単一の行を削除するのと同じようにコードのパフォーマンスを損なうことはないことに注意してください
関連
-
[解決済み] Excel/VB関数でエラーになる。"定数式が必要です"
-
[解決済み] VBAやマクロを使わずにExcelでループさせる方法とは?
-
[解決済み] VLOOKUP 最初の結果の下の行に値があるにもかかわらず、0を返す
-
[解決済み] 2つのデータセットに対する積み重ねられたカラムチャート - Excel
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] Microsoft Excelで正規表現(Regex)をセル内とループの両方で使用する方法
-
[解決済み] Excel VBA Projectのパスワードを解読する方法はありますか?
-
[解決済み] エクセル文書のMIMEタイプ設定
-
[解決済み】Excel VBAでSelectを使用しないようにする方法
-
[解決済み] VBAで現在のワークシートのパスを取得する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] XLSMをCSVで保存しようとすると、「オブジェクト_workbookのメソッドsaveasに失敗しました」エラーが発生する
-
[解決済み] ExcelでのIF - ELSE IF - ELSE構造
-
[解決済み] エクセルVBAで行を削除する
-
[解決済み] Excel - 複数列の SUMIFS
-
[解決済み] VBAでRangeクラスのSelectメソッドに失敗する
-
[解決済み】.text、.value、.value2の違いは何ですか?
-
[解決済み] エクセルで、ある変数を一定に保ち、他の変数を行によって変化させる方法
-
[解決済み] Microsoft Excelは.csvファイルのダイアクリティクスを混乱させますか?
-
[解決済み] VBAで現在のワークシートのパスを取得する方法は?
-
[解決済み] 列番号から文字に変換する関数?