• ベストアンサー

Excel2003での行重複削除

 Excel2003で、列のセル内容が同一の場合を削除・抽出することは可能でしょうか。例えば、次のようなイメージです。 行番号 A列 B列 行1 A1県 B1市 行2 A1県 B2市 行3 A1県 B3市 行4 A1県 B4市 行5 A2県 B5市 行6 A2県 B6市  ここから、A列が同一の行の重複を削除したいのです。上記では、行1から行4までは「A1県」で同一なので、1つの行だけ残し後の行は削除したい。B列の内容は重複削除で一部消えますが構いません。上記の場合、抽出結果は次のようになります(先頭行だけ残した場合ですが)。 行番号 A列 B列 行1 A1県 B1市 行5 A2県 B5市  データベースが大きいため、手作業で削除して行くのは大変です。適当な方法がありましたら、是非、ご教示ください。  どうぞ宜しくお願いします。  

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

  • ベストアンサー
  • kuma56
  • ベストアンサー率31% (1423/4528)
回答No.1

とりあえず手作業でも、ちょっとは楽になる方法として・・・ 最初にA列をキーにしてデータをソートしておく。 C2セルに関数式 =IF(A2=A1,"",A2) を入力して下方へコピーする。 C列全体をコピーしてそのまま値で張り付ける。 C列をキーにしてデータをソートする。 C列が表示されていない行以降を削除する。 C列のデータを削除する。 この作業をマクロの記録でVBAの記述にしてやれば、マクロ化も可能です。

kotaro2
質問者

お礼

kuma56さんありがとうございます。現在のところ、最後に拝見した回答ですが、最もシンプルですばらしい工夫だと思いました。ありがとうございます。

その他の回答 (4)

  • argument
  • ベストアンサー率63% (21/33)
回答No.5

はじめまして kotaro2 さん データは必ずA列でソートが掛かっているのでしょうか? と先に聞き忘れて作成してしまいました。まぁもし違うならばそれは後で直せばよいですね(私が)。 結局のところオートフィルや関数は便利なのですがデータの増減に弱いことは違い無いでしょう。そのつど前回の関数を張ったりそのつどオートフィルを掛けたりするのは最終的に手間以外の何者でもありません。 ですが安心してください。excelにはVBA(マクロ)という機能があります。 標準モジュールに下記を張ればそれ以降マクロを実行すれば作業を自動で行ってくれます。仮に65536行あろうと関数をオートフィルするより高速に回答を出してくれるでしょう。 Sub test() '各A列の次の行と比較 For i = 1 To Range("A65536").End(xlUp).Row If Range("A" & i).Value <> Range("A" & i + 1).Value Then num = num & i + 1 & "," Next '余計なカンマ削除 num = "1," & Left(num, Len(num) - 1) '最終要素削除(空と比較してるため(終端要素)) num = Split(Left(num, InStrRev(num, ",") - 1), ",") ReDim num2(UBound(num)) For i = 0 To UBound(num2): num2(i) = num(i): Next '読み込む列の要素指定 ar = Array("a", "b") 'データを読み込む For i = 0 To UBound(num2) data = "" For j = 0 To UBound(ar) data = data & Range(ar(j) & num2(i)).Value & "," Next MsgBox Left(data, Len(data) - 1) num2(i) = Split(Left(data, Len(data) - 1), ",") Next 'sheet2にデータを書き出す Sheets("Sheet2").Select For i = 0 To UBound(num2) For j = 0 To UBound(num2(i)) Range(ar(j) & i + 1).Value = num2(i)(j) Next Next End Sub 上記は最低限の処理と前提としてA列でソートされている事前提で作られています。またファイルを選択させて作業したい場合など追加処理あれば言ってください。 他に処理違い・補足があればあるならば言ってください修正します。

kotaro2
質問者

お礼

A列はソートしてあります。ご丁寧に式まで作っていただき、ありがとうございます。トライしてみます。

noname#96418
noname#96418
回答No.4

2007では、「データ」タブの「データツール」グループに「重複の削除」ボタンがあって、重複データを簡単に削除できます。 2003にはその機能がありませんか?

kotaro2
質問者

お礼

2007にそのような機能があることは聞いたことがあります。残念ながら私の職場ではまだ2003環境でして・・・^^;;。貴重なアドバイスありがとうございます。

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.3

1行目に県名 市町村名を追加、C列にて C1="フラグ" C2=COUNTIF($A$2:$A2,$A2) としてC2を下方にコピーする 「データ」「フィルタ」「オートフィルタ」で C列で1を選択すれば 行番号 A列 B列 行1 県名 市町村名 フラグ 行2 A1県 B1市   1 行6 A2県 B5市   1 となります

kotaro2
質問者

お礼

 なるほど。マニュアルでもいろいろ可能なんですね。mshr1962さんありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

関数では自称imogasi方式で出来ます。 色々な例はWEBでimogasi方式で照会のこと。 例データ A列  B列   C列 県 市 A1県 B1市 1 A1県 B2市 A1県 B3市 A1県 B4市 A2県 B5市 2 A2県 B6市 C2の式は =IF(COUNTIF($A$1:A2,A2)=1,MAX($C$1:C1)+1,"") データ最終行まで式を複写。 結果 上記C列 Sheet2に行って A1には =INDEX(Sheet1!$A$1:$B$100,MATCH(ROW(),Sheet1!$C$1:$C$100,0),1) B1には =INDEX(Sheet1!$A$1:$B$100,MATCH(ROW(),Sheet1!$C$1:$C$100,0),2) Sheet1のC列のMAX行数だけ式を複写 結果 A1県 B1市 A2県 B5市 ーー ここでは他の方法をやってみます 例 データ A列 B列 A1:B7 県 市 A1県 B1市 A1県 B2市 A1県 B3市 A1県 B4市 A2県 B5市 A2県 B6市 データーフィルターフィルタオプションの設定 指定した範囲 ON リスト範囲 $A$1:$A$7 検索条件範囲 空白 抽出範囲 $F$1:$F$7(空きセルであれば任意) 重複するレコードhs無視する チェック 結果 県 A1県 A2県 初出の市名を出すなら G2セルに =VLOOKUP(F2,$A$2:$B$7,2,FALSE) (MATCHーINDEX関数でも出来るが。) と入れて、F列最終行まで式をコピー。 結果 県 A1県 B1市 A2県 B5市

kotaro2
質問者

お礼

imogasi方式ですね。調べてみます。それにしても同じことでもいろいろな知恵がありますね。ありがとうございます。

関連するQ&A

  • 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回繰り返すのは大変です。 自動化する方法はないものでしょうか?

  • エクセル / 重複する文字の行番号を抜き出す。

    お世話になります。 XP/2003 使用です。 エクセルで下記のようなケースの行番号を抜き出したいです。 できれば、関数のみがありがたいのですが、 マクロでもOKです。 ----------- 抽出したい行番号  重複する文字が入力された 「先頭の行」 と 「最後の行」 の行番号 ----------- 例 同じ列に、重複する単語が入力されています。 重複する単語は、必ず上下に並んでいますが、 1単語のみ場合もあります。 1  AAA 2  AAA 3  AAA 4  AAA 5  BBB 6  BBB 7  CCC 8  CCC 9  CCC 10 DDD 上記の場合の抽出した行番号 単語 → 先頭の行/最後の行 AAA → 1/4 BBB → 5/6 CCC → 7/9 DDD → 10/10 行番号は、B列、C列などに抽出できれば良いです。 何卒よろしくお願いします。

  • VBAで重複していない行を削除したいです。

    初めてgoo質問を使います。 sheet1とsheet2の1列目と2列目で重複していない行を sheet2から削除したいです。 例えば、 Aの列に番号?、Bの列に数字 sheet1 A B CDEF 1 番号A 1 2 番号A 2  3 番号A 3 4 番号C 1 5 番号C 2 6 番号F 6 7 番号F 7 8 番号F 8 9 番号F 9 10 番号F 10 sheet2 A B CDEF 1 番号A 1 2 番号A 2  3 番号A 3 4 番号B 1 5 番号B 2 6 番号B 3 7 番号C 1 8 番号C 2 9 番号D 8 10 番号D 10 があったとして、上記を下記のようにしたいです。 sheet2 A B CDEF 1 番号A 1 2 番号A 2  3 番号A 3 4 番号C 1 5 番号C 2 6 番号F 6 7 番号F 7 8 番号F 8 9 番号F 9 10 番号F 10 CDEFの列にはsheet1とsheet2で違うデータが入っています。 sheet2から重複していない行を削除したいです。 宜しくお願いします。

  • 【Excel VBA】重複行の削除

    はじめまして。 IDの重複を削除し、日付データを横1列にまとめるVBAについてご教示いただけますと幸いです。 ------------------------------------------------------- ▼シート1(データ入力がされているシート)    A   B   C   D   E   F    1   ID 日付 2  1234  1/1  1/6  1/10  1/20   3  1234  2/3  2/20 4  1234  3/2 5  7777  1/10  1/15  1/20 6  7777  2/2   2/12  2/22 7  9876  2/3 ⇓ マクロ起動後 ▼シート2(重複行を削除しまとめたシート)    A   B   C   D   E   F   G   H 1   ID 日付 2  1234  1/1  1/6  1/10  1/20  2/3  2/20  3/2 3  7777  1/10  1/15  1/20  2/2  2/12  2/22 4  9876  2/3 【補足】 列情報  ・A列…ID  ・B-F列…日付(左詰め) ※日付はIDごと月毎に行が変わるため、IDによって複数行存在する場合があります。 ※A列のIDは重複しない場合もあれば、4行以上ある場合があります。 ※シート1のデータはおおよそ1000-5000行です。 ※IDに対して、日付は5つあれば問題ありません。そのためG列以降の日付を削除しても支障はございません。 ------------------------------------------------------ VBAの知識があまりなく、調べて出てきたものをコピペ使用も試みたのですが、 上手く動かす事ができませんでした…。 お力添え頂けますと幸いです…。 Windows10でエクセル2016を使用しております。 何卒宜しくお願いいたします。

  • エクセルで重複しないものだけを抽出したい

    下記のようなデータがあります。 A B C D 1 20 30 40 1 20 32 41 1 20 30 49 1 20 81 39 2 20 76 40 2 20 32 41 2 20 30 49 3 20 81 39 3 20 39 40 3 20 32 41 4 20 30 49 4 20 81 98 このうち、列Aの他と重複しない部分であり、かつ先頭行を抽出するにはどのようにしたらよいでしょうか? 上記の例で言うと、列Aの1から4までのそれぞれ1行目を選ぶという作業です。 抽出後 A B C D 1 20 30 40 2 20 76 40 3 20 81 39 4 20 30 49 vlookupなどの関数でできるのでしょうか?教えてもらえたらうれしいです。お願いします。

  • 重複行を削除

    重複する行をVBAコードで削除したいのですが A列 B列 C列 あ  1  a あ  1  a あ  2  a い  1  a い  2  c い  2  c A列 B列 C列 あ  1  a あ  2  a い  1  a い  2  c のようにABC列同一文字は1行にしたいのですがVBAコード、関数の解る方ご教授願います。

  • エクセルで重複するセルを削除したい

    エクセル2000で同じ内容のセルが複数あったとき、ひとつだけを残し他を削除する方法を教えてください。 ただし少し条件があります。 データーは5列100行位からなっています。 A列にある重複したデーターのセルを削除したいのですが、A列は同一なのですがB列は異なっています。B列に数字が入っているセルとうでないセルがあるのですが、数字が入っているものを残したいのです。 具体例は次のとおりです。 A列に 「ホンダCIVIC」 B列 「-」と書かれた行と A列に 「ホンダCIVIC」 B列 「2」と書かれた行、 A列に 「ホンダCIVIC」 B列 「5」と書かれた行、 のA列だけを見ると重複した3行が有ったとします。 B列に「5」または「2」の入った行ひとつだけ残し、他を削除したいのです。 何かよい方法があればお教えください。よろしくお願いします。

  • Excel2003で重複したデータを削除したい

    Excel2003で重複したデータを削除する方法を教えて下さい。 A・B・C・Dの列の全てが重複するデータを削除したいのですが、可能ですか?AとB列は重複するけど、CやDのデータは重複していなければ、残しておきたいです。 以下イメージです。 行/列  A   B    C    D 1    なす  商店  100円  3/4  2    なす  商店  200円  3/2 3    なす  商店  200円  3/2 ------------------------------------- 以下、重複データ削除後のイメージ。 1    なす  商店  100円  3/4  2    なす  商店  200円  3/2

  • エクセルで重複行をすべて削除するにはどうすればよいでしょうか?

    例えば、昇順で並べ替えて以下のようにエクセルで準備したとします。   A列 1行 aa 2行 aa 3行 bb 4行 bb 5行 cc 6行 cc 7行 dd 8行 ee そこで重複する行ごと削除したいのですがどうすればよいでしょうか? 削除結果は   A列 1行 dd 2行 ee 上記のようにしたいです。 重複する1行だけは削除できたのですが、 2行ごと削除の方法がわかりません。 ご教授いただきたく存じます。 よろしくお願いいたします。

  • エクセルまたはVBAで重複行を削除

    例えば、 A B 1 1 a 2 2 b 3 3 c 4 4 d 5 4 d 6 5 e 7 6 g 8 6 g といった表があるとします。 A列をキーに、昇順にされた一覧表です。 ここで番号が重複している行、この例では4行目と5行目、7行目と8行目がそうです。 こういった重複した行を検索して、行削除したいのですがどんな方法が可能でしょうか? 最終的にはVBAでのイベントになるでしょうが、それ以前にエクセルで前準備などしておくようなことは必要でしょうか? 表自体はかなり膨大な量のデータベースです。 よろしくお願いします。

専門家に質問してみよう