FALSEの行を削除したい
office365
データベースから抽出したデータでフラグがFALSEの行を削除したい。
行数は2万行くらいある状態。
データの状態は
A列に親となる番号のコード
B列に順番と品番が結合されたコード
C列にフラグのコード
で、具体的なデータのイメージは下記状態
A列 B列 C列
A0001 1code1 TRUE
A0001 2code1 TRUE
A0001 2code1 FALSE
A0001 3code1 TRUE
A0001 4code1
A0001 5code1 TRUE
A0001 6code1 TRUE
A0001 7code1 TRUE
A0001 8code1 TRUE
A0001 9code1 TRUE
A0001 10code1 TRUE
A0001 11code1 TRUE
A0001 12code1 TRUE
A0002 1code2 TRUE
A0002 2code2 TRUE
A0002 3code2 TRUE
A0002 4code2 TRUE
A0002 5code2 TRUE
A0002 6code2 TRUE
A0002 7code2 TRUE
A0002 8code2 TRUE
A0003 1code3 TRUE
A0003 2code3 TRUE
A0003 3code3 TRUE
A0003 3code3 FALSE
この状態でC列がFALSEとなっている行を削除したい。
C列がNULLの行はそのまま残す。
これを実現するマクロを下記の様にしました。
C列NULLのセルをいったんTRUEに置換、
sub macro1()
Dim LASTROW1 As Long 'シートのmax行数
LASTROW1 = Worksheets("sheet1").Cells(Rows.count, 1).End(xlUp).Row
Range("C2: C" & LASTROW1).Select
Selection.Replace What:="", Replacement:="TRUE", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula
end sub
C列で並び替えてTRUEの行を別シート(work)へコピー
sub macro2()
ThisWorkbook.Worksheets("sheet1").Select
Dim t As Long
t = 2
Dim LASTROW As Long
LASTROW = Worksheets("sheet1").Cells(Rows.count, 1).End(xlUp).Row
Range("A:C").Select
Selection.AutoFilter
ActiveSheet.Range(Cells(1, 1), Cells(LASTROW, 3)).AutoFilter Field:=3, Criteria1:="TRUE"
Rows(t & ":" & LASTROW).Select
Selection.Copy
Sheets("work").Select
Range("A1").Select
ActiveSheet.Paste
end sub
実行結果
A0001 1code1 TRUE
A0001 2code1 TRUE
A0001 3code1 TRUE
A0001 4code1
A0001 5code1 TRUE
A0001 6code1 TRUE
A0001 7code1 TRUE
A0001 8code1 TRUE
A0001 9code1 TRUE
A0001 10code1 TRUE
A0001 11code1 TRUE
A0001 12code1 TRUE
A0002 1code2 TRUE
A0002 2code2 TRUE
A0002 3code2 TRUE
A0002 4code2 TRUE
A0002 5code2 TRUE
A0002 6code2 TRUE
A0002 7code2 TRUE
A0002 8code2 TRUE
A0003 1code3 TRUE
A0003 2code3 TRUE
A0003 3code3 TRUE
となる様にしたいのです。
いちおうmacro1とmacro2の内容で目的は達成されているのですが、
もっとすっきりするマクロがあれば教えていただきたく。
お礼
ありがとうございます。 すっきりいたしました。 とりあえず、true、falseはENUM型を使ってみたいと思います。