プロが教える店舗&オフィスのセキュリティ対策術

VBA初心者なのでご助力願います。(使用ソフトはエクセル2010)


  A  B  C  D  E  
1            0
2            1
3            0
4            2
5            0
6            1

上記の様にE列に0・1・2の数値が入力されており、2行で1セットのデータになっています。
E列に2が入力された行とその1つ上の行(この場合だと3-4行目)を削除するマクロを教えて頂けないでしょうか?

約15000行あり、手作業では厳しい状態です。
よろしくお願い致します。

質問者からの補足コメント

  • 補足致します。

    ①「2が入力された行」とは「2が入力されている行」でしょうか?
    →「2が入力されている行」で間違い無いです。

    ②「2」は必ず偶数行に有ると考えて良いのでしょうか?
    →データの保存の都合上、空白行が存在し、「2」は偶数奇数行入り乱れています。

    ③「1」が「2」に変更された場合も削除する機能が必要ですか?
    →不要です。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/09/25 18:47
  • 補足致します。

    2が存在するのは、例のように偶数行だけですか。
    それとも、奇数行にも2が存在した場合、それも処理しますか?
    →No1の方と同じ質問ため省略させて頂きます。


    E列3行の値が2のとき、その行を削除し、2行も削除しますか?
    それとも、このE列3行の2はスキップしますか?
    →削除致します。

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/09/25 18:54
  • 補足致します。

    ① E列に「2」が2つ以上続くことがありますか?
    →ありません。記録している設備は必ず2回計測し、2回目で総合判定するため
     かならず「0」→「1」or「2」のセットになります。

      A B C D E 
    1        0   :←1回目の計測
    2        1 or 2:←2回目の計測と判定(判定の結果をE列に出力)
    3        0   :←1回目の計測
    4        1 or 2:←2回目の計測と判定
     
    ②「2」が2つ以上続いたときはどう処理しますか?
    →「2」が連続しないため省略させて頂きます

    ③ 1行目には「2」はありますか?
    a. 無
    b. 1行目は処理しない
    c. 1行目だけ削除する
    d. その他
    →「a」理由につきましては①と同じになります。

    No.5の回答に寄せられた補足コメントです。 補足日時:2016/09/25 22:10

A 回答 (7件)

空白行を削除し、スピードアップを図るため画面書き換えを止めた物を載せておきます。


-----------------------------------------------------------------
Sub Sample()
Dim 行 As Long
Application.ScreenUpdating = False
行 = Cells(Rows.Count, 5).End(xlUp).Row
Do While 行 >= 2
If Cells(行, 5).Value = 2 Then
Rows(行).Delete Shift:=xlUp
行 = 行 - 1
Rows(行).Delete Shift:=xlUp
End If
If Cells(行, 5).Value = "" Then Rows(行).Delete Shift:=xlUp
行 = 行 - 1
Loop
Application.ScreenUpdating = True
End Sub
-----------------------------------------------------------------
「If Cells(行, 5).Value = "" Then Rows(行).Delete Shift:=xlUp」で空白行削除です
「Application.ScreenUpdating = False」で画面書き換え停止
「Application.ScreenUpdating = True」で画面書き換え再開です
    • good
    • 0

No.5 への補足コメントについて



その条件でしたら先ほどのコードで処理できますが、途中の空白行とかも削除した方が良いですか?
    • good
    • 0

さらに確認です。


① E列に「2」が2つ以上続くことがありますか?
②「2」が2つ以上続いたときはどう処理しますか?
a. 上から処理をしていく為「2」がある行の倍数が削除される。
b. 下から処理していく為「2」のある行が偶数続く場合は「2」のある行のみ削除され、奇数の場合は「2」のある行+1行が削除される。
c. その他
③ 1行目には「2」はありますか?
a. 無
b. 1行目は処理しない
c. 1行目だけ削除する
d. その他
-----------------------------------------------------------------
① 有・無どちらも可 ② b. ③ a. の条件ならば、こんなものではいかがですか?
-----------------------------------------------------------------
Sub Sample()
Dim 行 As Long
行 = Cells(Rows.Count, 5).End(xlUp).Row
Do While 行 >= 2
If Cells(行, 5).Value = 2 Then
Rows(行).Delete Shift:=xlUp
行 = 行 - 1
Rows(行).Delete Shift:=xlUp
End If
行 = 行 - 1
Loop
End Sub
-----------------------------------------------------------------
この回答への補足あり
    • good
    • 0

手作業でできそうです。


1. F1セルに「=if(or(E1=2,E2=2),-1,row())」と入力します。
2. F1セルをF列全体にコピー&ペーストします。
3. 削除すべき行は「-1」、残すべき行は行番号になります。
4. F列全体をコピーしてその場に「値を貼り付け」ます。
5. つまり計算結果を値に変換します。
6. F列で並べ替えると削除すべき行が上がってきます。
7. それらの行を削除して、最後にF列も削除します。
バックアップしてから実行してください。
    • good
    • 0

F列などに、補助列で数式を加えて、



=F2
=E2=2
(F列の場合)

この2つの数式を選択して下にコピーして、AutoFilter で、True の行だけを出して、まとめて削除すればよいと思います。マクロのレベルではないと思います。
    • good
    • 0

補足要求です。


2が存在するのは、例のように偶数行だけですか。
それとも、奇数行にも2が存在した場合、それも処理しますか?

E列3行の値が2のとき、その行を削除し、2行も削除しますか?
それとも、このE列3行の2はスキップしますか?
この回答への補足あり
    • good
    • 0

念の為の確認ですが


①「2が入力された行」とは「2が入力されている行」でしょうか?
②「2」は必ず偶数行に有ると考えて良いのでしょうか?
③「1」が「2」に変更された場合も削除する機能が必要ですか?
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています