• ベストアンサー

Excel2003 マクロで同じ文字列の行を消す

Excel2007からは重複したデータを消すことは出来ますが、同じ文字列を全部消す(ひとつものこらず)方法が無いか悩んでいます。 例えば、A1に「1234」 A2に「4231」 A3に「1234」がある場合、A1とA3どちらも削除したいです。 このような事が自動で出来るマクロをどのようにすれば作れるでしょうか? 私が考えているのは、 1)A列をソート 2)一つ前の行と比較して同じならどちらの行も消す (同じデータは、2つ以上ないです) という具合なのですが、2の部分の書き方が分かりません。

  • r2san
  • お礼率25% (1309/5228)

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

いちいちループとかまわしません。 sub macro1()  range("1:1").insert  range("B:B").insert  range("B1") = "head"  range("B2:B" & range("A65536").end(xlup).row).formula = "=COUNTIF(A:A,A2)"  range("A:B").autofilter field:=2, criteria1:=">1"  activesheet.autofilter.range.delete shift:=xlshiftup end sub あなたのやりたいようにしたいなら。 sub macro2()  dim i as long  range("A:A").sort key1:=range("A1"), order1:=xlascending, header:=xlno  for i = range("A65536").end(xlup).row to 2 step -1   if cells(i, "A") = cells(i - 1, "A") then    range(cells(i - 1, "A"), cells(i, "A")).delete shift:=xlshiftup   end if  next i end sub

r2san
質問者

お礼

解法を教えていただいて、すごくよくわかりました。 B列に同じ数字をカウントする式を入れてそれをフィルタで抽出、削除する、という方法ですね。 明快なご回答ありがとうございました。

その他の回答 (1)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 同一行を抽出後、行削除しています。 Sub sample() Dim wk() Application.ScreenUpdating = False For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 If Application.CountIf(Range("A:A"), Cells(i, 1)) > 1 Then ReDim Preserve wk(n) wk(n) = Cells(i, 1).Row n = n + 1 End If Next For i = 0 To UBound(wk) Rows(wk(i)).Delete Next Application.ScreenUpdating = True End Sub

関連するQ&A

  • Excel2007のマクロで文字列を分解

    Excel2007のマクロで文字列を分解したいのですがうまくいきません。 1、セルA1からU1までかそれ以上にデータが3つずつ入ってます。 2、1のデータの1つずつをを3列ずつに分解してA3から列上にコピー。 例えば、セルA1あいう、セルB1えおか→ならA3あ、B3い、C3う、D3え、E3お、F3か という具合に。だれかお願いします。

  • 重複行削除のマクロ

    重複行を削除するマクロを作っていますが、うまくいきません。 2行目にタイトルが入っていて、3行目以降が必要なデータになります。 この中でA列が一致しているデータ行を削除したいと考えており、 重複データが削除された後、タイトル行がなぜか一番下の行にはりついてしまいます。 どなたか詳しい方助けてください!!!よろしくお願いします。 ちなみに以下が現在使用しているVBAコードです。 =============================================================== Sub GoodRemoveDuplicates() 'A列にデータが入力されており、そのデータを並べ替えた後、 '重複するデータが含まれている行を削除するマクロ Worksheets("貼り付け用用マクロ").Range("A1").Sort _ key1:=Worksheets("貼り付け用用マクロ").Range("A1") Set currentCell = Worksheets("貼り付け用用マクロ").Range("A1") Do While Not IsEmpty(currentCell) Set nextCell = currentCell.Offset(1, 0) If nextCell.Value = currentCell.Value Then currentCell.EntireRow.Delete End If Set currentCell = nextCell Loop End Sub ===============================================================

  • Excel2010で行ごとの重複削除

    Excel2010です。 A行目 1 3 5 5 2 2 3 B行目 2 3 5 5 4 4 C行目 1 9 7 9 9 ↓ A行目 1 3 5 2 B行目 2 3 4 5 C行目 1 7 9 というように、行ごとに重複の削除をしたいと思っています。 データタブに重複の削除があるのですが、列ごとにやるようなので、一度シート全体を 行と列を入れ替えて別シートにコピーして、 1列目全体を選択して、1列目で重複の削除を実行 2列目全体を選択して、2列目で重複の削除を実行 ・・・ というやり方もあるのですが、今扱っているエクセルは197行197列あります。 列選択、重複の削除アイコンをクリックするのを197回繰り返すのは大変です。 自動化する方法はないものでしょうか?

  • Excel2007のマクロで文字列を結合

    Excel2007のマクロで文字列を結合したいのですがうまくいきません。 1、セルA1からU1までデータが1つずつ入ってます。 2、1のデータを3列ずつ結合してA3からG3にコピー。 例えば、セルA1あ、B1い、C1う、D1え、E1お、F1か、ならセルA3あいう、セルB3えおか、のようにマクロで一機にできるソースをお願いします。

  • 【Excel VBA】条件つき行削除

    Excel2003を使用しています。 システムからCSVで落としたデータで、データの並び方に規則性があるので、それを利用して、不要部分のデータをマクロで削除できないかと思い、質問させていただきます。 A列に『累計』を含む文字があった場合、その行のD列が0だったら、その行より上の行のA列に『計上日』と入力されている行までを削除するということをしたいです。 下記でいうと、2~5行までを削除したいです。    A     B     C     D 1 2 計上日 3 4 5 累計                0 6 7 計上日 8 9 累計              1000 上記では、B列、C列には何も書いていませんが、実際はデータが入力されていたり、空欄だったりです。 D列が0の行を削除するコードはわかるのですが、さらに、条件が加わっても同じように処理は可能でしょうか? よろしくお願いします。

  • Excel2007のマクロで文字列を分解

    Excel2007のマクロで文字列を分解したいのですがうまくいきません。 1、セルM29からAG29までかそれ以上にデータが3つずつ入ってます。 2、1のデータの1つずつをを3列ずつに分解してM31から列上にコピー。 例えば、セルM29あいう、セルN29えおか、…、→ならM31あ、N31い、O31う、P31え、Q31お、R31か、…。 という具合に。お願いいたします 画像を添付する

  • UNIXで文字列操作

    あるログファイルを整理しているのですが知識が無く困ってます。 A A B C というログファイルの重複部分のみ消去したいのですが一般的なコマンドで可能でしょうか?catしてsortして整理まではできたのですが重複文字列をどのように消せば良いでしょうか? データ数は2万行ほどです

  • 複数列の条件が合致する重複行を削るマクロ

    1行目は項目が書いてあり、データ自体は2行目以降になります。 B列、D列、F列が重複するデータについては、一番上の行のひとつだけを残して残りの行を削除する方法です。 削除した空白行は作らないようにします。 その際、最終的に、B列を基準にソートになるように並び変えます。 ひとつだけの列が該当する場合の削除はわかるのですが、この場合、どのように記述したらいいのでしょうか。

  • エクセルマクロ 特定の文字列を含む行を削除

    エクセルマクロ 特定の文字列を含む行を削除 エクセルのマクロについて教えてください。 下の中から列を限定せず、すべての行でAAA、CCCのいずれかがある場合、 その行ごと、すべて削除したいのです。 時に削除したい特定の文字列が数十種類になるため、 マクロ起動時に削除したい特定の文字を記述したファイルを読み込み、それから 削除できるようにしたいのです。場合によってはそのファイルを編集し、 削除したい文字列を変更したいのです。 ご教示いただだけないでしょうか A列 B列 C列 1 AAA BBB CCC 2 BBB CCC FFF 3 DDD BBB FFF 4 AAA CCC DDD 5 GGG RRR UUU 行中にAAA、BBBがある場合、削除したい ↓ A列 B列 C列 5 GGG RRR UUU マクロを実行し、上記の結果にしたい。

  • Excel2003 VBA 文字列の比較で

    Excel2003 VBAです。 2つの文字列があって、この2つの文字列を日本語の部分だけで 比較しようとしています。 なので、文字列からアルファベットと数字と記号を削除してから 比較したいのですが、どんな方法があるでしょうか。 よろしくお願いします。

専門家に質問してみよう