- 締切済み
【excelマクロ】重複文字がある場合、上位のセルにある文字を削除する
質問させてください。 以下のexcelの表があります。 Aさん 50 Bさん 30 Cさん 50 Aさん 60 Cさん 70 上記の表の重複部分を削除したいと思っております。 【重複部分削除後】 Bさん 30 Aさん 60 Cさん 70 その際に下の行を残し上の行にあるものを削除したいのですが マクロ・関数で実行する方法を知っていらっしゃいましたら 教えていただけないでしょうか。 以上、お手数ですが宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- zap35
- ベストアンサー率44% (1383/3079)
#01です。一応マクロものせます。4行目、5行目の数値を修正して下さい。 Sub Macro2() Dim idxR, idxC As Long, rngEnd As Range, resMatch Application.ScreenUpdating = False idxR = 2 'データの開始行 idxC = 1 '重複判定を行う列 A列が1、B列が2… Set rngEnd = Cells(65536, idxC).End(xlUp) Do While idxR < rngEnd.Row resMatch = Application.Match(Cells(idxR, idxC), _ Range(Cells(idxR + 1, idxC), rngEnd), 0) If IsNumeric(resMatch) Then Rows(idxR).Delete shift:=xlUp Else idxR = idxR + 1 End If Loop Application.ScreenUpdating = True End Sub マクロはALT+F11でVBE画面を開き、「VBAProjectエクスプローラのシート名右クリック」→「挿入」→「標準モジュール」で表示される画面にペーストして下さい。実行はALT+F8を押して、マクロ名を選択します。
- zap35
- ベストアンサー率44% (1383/3079)
#01です 削除も手動で良ければ可能です。オートフィルタをかけて、オプションから「2以上の行のみ表示」するようにします。 表示された行を削除すれば、重複部分は削除できます。 なお式は =COUNTIF(A1:A100,A1) でよいです。(#01でもOKですが、訂正します) どうしてもマクロが… と希望ならマクロを書きますが、その場合は実際のデータ開始行や使用する列を明示してください。もし質問者さまがマクロに詳しくない場合、修正できないと二度手間になりますので…
- zap35
- ベストアンサー率44% (1383/3079)
実際に削除するならマクロがいりますが表示だけで良いなら、データが1行目~100行目にあるとき、C1に =COUNTIF(A1:A100,A1:A100) をペーストして、C1を100行目までコピー。 C列にオートフィルタをかけて「1」だけを表示すれば目的のリストになるはずです。
お礼
お忙しい中回答ありがとうございます。 結果は表示だけでなく、削除まで行いたいと思っております。 マクロの作成方法知っていらっしゃいましたら教えていただけないでしょうか。 大変お手数をお掛け致します。 宜しくお願い致します。
お礼
お忙しい中ご返信ありがとうございます。 マクロで無事に実現することができました。 大変申し訳ないのですが追加でご質問させていただきたいことがあります。 現在マクロ勉強中のためご教授いただいたマクロ内ロジックで以下の点について申し訳ないのですが教えていただけないでしょうか。 ・Application.ScreenUpdating = Falseについて最初に行っているのですがこちらはなぜ行っているのでしょうか ・重複した際、その行を削除するというロジックはRows(idxR).Delete shift:=xlUpで行っているのでしょうか ・確認になってしまうのですが、DoLoop内では最後の行まで処理をするという動作で、If内では行を同じ言葉があった場合に削除する動作という認識でよろしいのでしょうか ご教授いただいたマクロがとても参考になったため、ロジックを理解したいと思いご質問させて頂きました。 お忙しい中大変申し訳ありません。 宜しくお願い致します。