Excelで文字列が完全一致する行が連続して出てきた際、最初のデータ以外は削除してほしい


今、Sheet1のF列に以下のようなデータが入っております。(1行目は見出しの行のため対象外)

2(行目)



100 ナポリタン
101 ペペロンチーノ
102 ナポリタン
103 カルボナーラ
104 ジェノベーゼ
105 ジェノベーゼ



この状況におきまして。
105行目は、前の行の104行目と全く同じ文字列(ジェノベーゼ)ですので。
105行目の方のジェノベーゼは、行ごと削除したいのです。
データが6万行ほどありまして…効率的に処理できたらと考えております。お力添えいただけますと幸いです。よろしくお願い致します<m(__)m>

回答の条件
  • 1人20回まで
  • 登録:
  • 終了:2020/01/19 15:11:02
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.3

回答回数4974ベストアンサー獲得回数2154

ポイント800pt

下記のマクロを標準モジュールにはりつけて、処理対象のシートを選択した状態で delete_multiple_row サブルーチンを実行してください。

Function is_blank_cell(c)
    is_blank_cell = IsEmpty(c) Or c.Value = ""
End Function

Sub delete_multiple_row()
    last_row = Cells(Rows.Count, 6).End(xlUp).Row   ' F列
    r = 2
    For i = 2 To last_row
        If is_blank_cell(Cells(r + 1, 6)) Then
            Exit For
        End If
        If Cells(r, 6).Value = Cells(r + 1, 6).Value Then
            Rows(r + 1).Delete
        Else
            r = r + 1
        End If
        DoEvents
    Next
End Sub

F列で空白セルが見つかるまで処理をします。
重複が3行以上続いても、その先頭行以外を消すようにしています。

id:moon-fondu

うまくいきました!ありがとうございます(^^;)

2020/01/19 15:10:35

その他の回答2件)

id:AichiKaoru No.1

回答回数180ベストアンサー獲得回数37

ポイント300pt

 
https://firestorage.jp/download/5d66a4e53dc899faa01b0883e365f82c7085d10a
 
fonduエクセルファイルを作成しましたのでダウンロードしてください。
 
シート1のH列に、関数を用いて、連続して出てきた単語か表示させます。
 
シート2へ、シート1の内容をそのまま、値コピーして貼り付けます。
 
シート2のH列を基準にして、並べ替えを昇順でおこないます。
 
単語が連続して出てきた行を範囲指定して、1回で削除することができます。
 
以上で必要とするデータを得ることができます。
 
 
 

id:moon-fondu

すごいですね。countifは自分もよく使います。でもそこからさらにif文で条件を加えて、文字列を足せば、重複するデータを出せるということですか…ありがとうございます!

2020/01/19 15:01:05
id:huumm No.2

回答回数8ベストアンサー獲得回数2スマートフォンから投稿

id:moon-fondu

知らなかったです…この機能を使えば、チェックボックスでF列のデータの項目だけをチェックしておいて。
重複を削除すれば、他の列の行も消えてくれますね!
ありがとうございます(^^;)

2020/01/19 15:05:55
id:a-kuma3 No.3

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

ポイント800pt

下記のマクロを標準モジュールにはりつけて、処理対象のシートを選択した状態で delete_multiple_row サブルーチンを実行してください。

Function is_blank_cell(c)
    is_blank_cell = IsEmpty(c) Or c.Value = ""
End Function

Sub delete_multiple_row()
    last_row = Cells(Rows.Count, 6).End(xlUp).Row   ' F列
    r = 2
    For i = 2 To last_row
        If is_blank_cell(Cells(r + 1, 6)) Then
            Exit For
        End If
        If Cells(r, 6).Value = Cells(r + 1, 6).Value Then
            Rows(r + 1).Delete
        Else
            r = r + 1
        End If
        DoEvents
    Next
End Sub

F列で空白セルが見つかるまで処理をします。
重複が3行以上続いても、その先頭行以外を消すようにしています。

id:moon-fondu

うまくいきました!ありがとうございます(^^;)

2020/01/19 15:10:35
id:moon-fondu

今回は皆さんすばらしい回答で、ベストアンサー悩みましたが。

ちょうど自分がマクロの勉強をしていることもありましたので、a-kuma3さんの回答を選ばせていただきました<m(__)m>

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません