電子書籍の厳選無料作品が豊富!

●  A     B     C     D     E     F     G

1  2/1    10:00   10     0    入荷    出荷   リンゴ
2
3  2/1    11:00   10     2    入荷    出荷   イチゴ
4
5  2/1    12:00   10     1    入荷    出荷   リンゴ
6
7  2/1    12:00   10     1    入荷    出荷   リンゴ
8  2/1    13:00   10     0    入荷    出荷   リンゴ
9  2/1    14:00   10     2    入荷    出荷   リンゴ
10
11 2/1    15:00   10     0    入荷    出荷   イチゴ
12  2/1    16:00   10    10    入荷    出荷   リンゴ
13  2/1    17:00   10     0    入荷    出荷   リンゴ
14  2/1    18:00   10     3    入荷    出荷   ミカン
15  2/1    19:00   10     1    入荷    出荷   リンゴ
16  2/1    19:30   10     0    入荷    出荷   イチゴ
17  2/1    20:00   10     5    入荷    出荷   リンゴ

上手に表が書けないのですが、上のような表があるときに、G列の3行目のイチゴの上下にある空白行(2行目・4行目)を両方行削除したいのです。同様にイチゴをはさむ時が17行目以降にもあります。
その場合も同じ処理を繰返し行うようにしたいです。(全部で8000行ぐらいです)

11行目のイチゴのように上だけが空白行のときは、下の12行目にはテータがあるので10行目の空白行のみを行削除できるようにしたいのですが、構文がよくわからないので、どなたかご教授願います。

よろしくお願いいたします。

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

  • ご連絡ありがとうございます。
    イチゴに接している空白行のみ削除し、(この場合は6行目は残す)ということになります。
    よろしくおねがいいたします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/03/18 19:56
  • やはりマクロで処理をしたいと思います。
    データ量があり、人間の目の作業ですとまちがえてしまうように思いますので、
    マクロでの処理を希望しています。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/03/18 21:03
  • ご回答ありがとうございます。
    初歩的なことをお伺いしてしまいますが、構文の中の”終”および”行”には実際の値を当てはめるのでしょうか?

    No.6の回答に寄せられた補足コメントです。 補足日時:2017/03/18 21:46

A 回答 (8件)

No.4 の修正版です。



Sub Sample()
Dim 終 As Long
Dim 行 As Long
終 = Cells(Rows.Count, 7).End(xlUp).Row
For 行 = 終 To 2 Step -1
If Cells(行, 7).Value = "" Then
If Cells(行 - 1, 7).Value = "イチゴ" Then
Cells(行, 7).Value = "削除予定"
Else
If Cells(行 + 1, 7).Value = "イチゴ" Then
Cells(行, 7).Value = "削除予定"
End If
End If
End If
Next
If Cells(1, 7).Value = "" Then
If Cells(2, 7).Value = "イチゴ" Then
Cells(1, 7).Value = "削除予定"
End If
End If
For 行 = 終 To 1 Step -1
If Cells(行, 7).Value = "削除予定" Then
Rows(行).Delete Shift:=xlUp
End If
Next
End Sub

※ 一度目のループで削除予定の行に「削除予定」と書き込んでおいて、次のループで削除しています。ただ結果的に「イチゴに接している空白行」が残る可能性は有ります。もしかしたら No.4 の方が良いのかもしれません、お好きな方をお使い下さい。
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。
大変助かりました。
思うような結果を出すことができました。
お世話になりました。

お礼日時:2017/03/20 23:38

No.4 と No.6 の違いですが、元が以下のような場合に 9行目を残すかどうかです。


No.4 では削除されます。
No.6 では残ります。結果だけ見るとイチゴの上の行が残ります。

●  A     B     C     D     E     F     G

1  2/1    10:00   10     0    入荷    出荷   リンゴ
2
3  2/1    11:00   10     2    入荷    出荷   イチゴ
4
5  2/1    12:00   10     1    入荷    出荷   リンゴ
6
7  2/1    12:00   10     1    入荷    出荷   リンゴ
8  2/1    13:00   10     0    入荷    出荷   リンゴ
9
10
11 2/1    15:00   10     0    入荷    出荷   イチゴ
12  2/1    16:00   10    10    入荷    出荷   リンゴ
13  2/1    17:00   10     0    入荷    出荷   リンゴ
14  2/1    18:00   10     3    入荷    出荷   ミカン
15  2/1    19:00   10     1    入荷    出荷   リンゴ
16  2/1    19:30   10     0    入荷    出荷   イチゴ
17  2/1    20:00   10     5    入荷    出荷   リンゴ
    • good
    • 0
この回答へのお礼

度々のご回答ありがとうございます。
9行目の空白行については、リンゴの直下の空白行の解釈としていますので、11行目のイチゴの直上が削除されれば、良いです。その場合は、No.6になるのですね。
ありがとうございます。
No.4およびNo.6を早速、使わせて頂きます。
本当にに助かりました。ありがとうございます。

お礼日時:2017/03/18 22:35

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



あまり知られていないのですがVBAでは変数名に2バイト文字(漢字など)も使えるのでこのままでも使えます。アルファベットがよければ適当に「Owari」「Gyou」などに変えても良いです。
    • good
    • 0
この回答へのお礼

いろいろと教えて頂き、ありがとうございました。
勉強になりました。

お礼日時:2017/03/20 23:35

No.4 の補足



空白行が続いたときに誤動作しそうなので、訂正しますのでもう少しお待ち下さい。
    • good
    • 0
この回答へのお礼

お手数をお掛けいたしまして、申し訳ございません。
何卒宜しくお願い致します。

お礼日時:2017/03/18 21:32

こんな感じではいかがでしょうか?


------------------------------------------------------
Sub Sample()
Dim 終 As Long
Dim 行 As Long
終 = Cells(Rows.Count, 7).End(xlUp).Row
For 行 = 終 To 2 Step -1
If Cells(行, 7).Value = "" Then
If Cells(行 - 1, 7).Value = "イチゴ" Then
Rows(行).Delete Shift:=xlUp
Else
If Cells(行 + 1, 7).Value = "イチゴ" Then
Rows(行).Delete Shift:=xlUp
End If
End If
End If
Next
If Cells(1, 7).Value = "" Then
If Cells(2, 7).Value = "イチゴ" Then
Rows(行).Delete Shift:=xlUp
End If
End If
End Sub
    • good
    • 0

No.2 の訂正



すみませんでした。タイトルに「EXCELマクロ」と有りましたね。申し訳ございませんでした。
    • good
    • 0

どちらを考えていますか?


・マクロ(VBA)を使って作業する。
・少し面倒ですが通常の作業のみで確実に作業する。
この回答への補足あり
    • good
    • 0

イチゴに接している空白行のみ削除(この場合は6行目は残す)ということでしょうか?

この回答への補足あり
    • good
    • 0

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