
エクセル2003を使っています。
重複したデータの抽出を行いたいのですが、
例えば、
A B C D
コード 書籍名 出版社名 著者
といった感じのデータが1万件ほどあります。
このうち、B列の「書籍名」が重複しているデータを抽出したい
です。(抽出したものは、書籍名だけではなくて、ほかの出版社や著者の指定したデータも表示させたい。)
VLOOKUPなどを使えばできないこともないのですが、一万件の
処理を行う上に、パソコンも非力なので時間がかかってしまい
困っています。
どうぞよろしくお願いします。
No.3ベストアンサー
- 回答日時:
なさりたい内容はほぼ分かりました。
ただVLOOKUPなどの関数を使用しても重複が2つまでとは限らないようですから一行で他の重複データを表示するのは難しいような気がします。
そこで次のような方法はどうでしょうか。
1.回答NO.2(誤りがありました。「各セルのセル番号」ではなくて「各行のB列のセル番号」が正しいです、また重複しない場合は1、重複する場合は2以上です)の方法でE列にフラグを立てる。
2.フラグが立っている行のデータのみをIF文でそれぞれ別の列に(A列→F列、B列→G列、C列→H列、D列→I列)にコピーするようにF列、G列、H列、I列に式を入れる。
3.F列~I列を別のシートに値だけコピーしてから書籍名でソートする。
こうすれば一覧性も良いのではと思いますが、手順が煩雑でしょうか?
COUNTIFを使ってみたのですが、うまくいきませんでした・・・。
この場合の式の意味は、セルB2に書籍名が入力されているとすると、
「B列をセルB2の書籍名で検索して、同じものがあるなら
カウントする」
といった意味でよろしいでしょうか?
一つしかないものに「2」のフラグが立ったりしています。
No.7
- 回答日時:
便利なツールがあります。
1. http://www15.big.or.jp/~t98907/duplication/
↑
このサイトからダウンロードして展開します。
2. duplication.exeをダブルクリックします。
3. エクセルのファイルをそのツールにドロップします。
4. ツールのテキストボックスに B と入力し、開始ボタンをクリックします。
5. 重複した行には○が付いています。オートフィルタでフィルタリングできます。
参考URL:http://www15.big.or.jp/~t98907/duplication/
No.6
- 回答日時:
#4のmerlionXXです。
> ほかの社員も同じような作業を行いますので、
> エクセルに搭載してある機能や関数を使えれば、
VBAもエクセルに搭載してある機能なのですが・・・・。
お使いになるかどうかわかりませんが、一応少し修正し、saikoro123さんが修正もできるようにくわしく解説をつけてみました。(解説は'で区切ってあるのでこのままコピペしても大丈夫です。)
オリジナルのデータはA1~D1がタイトル行でコード、書籍名、出版社名、著者の順で並ぶ。
2行目以降には切れ目無くデータが並ぶという前提です。
これを書籍名で重複するデータの書籍名、出版社名、著者をE~G列に転記します。
Sub test02()
Dim x As Long 'xは桁数の多い整数であると宣言
With ActiveSheet 'アクティブなシートにおいて
.AutoFilterMode = False 'オートフィルーがあれば解除
x = .Cells(Rows.Count, "B").End(xlUp).Row 'B列のデータの最終行を取得しxとする。
.Range(.Cells(2, "E"), .Cells(x, "E")).FormulaR1C1 = "=COUNTIF(R2C2:R" & x & "C[-3],RC[-3])" 'E列2行目から最終行までCOUNTIF式を挿入
.Range("A1:E1").AutoFilter 'オートフィルー設定
.Range("A1:E1").AutoFilter Field:=5, Criteria1:=">1" '重複書籍名の行を抽出
.Range("B1:D" & x).SpecialCells(xlCellTypeVisible).Copy '重複書籍名の行のB~D行をコピー
.AutoFilterMode = False 'オートフィルー解除
.Range("F1").PasteSpecial 'コピーしたデータをF1~H1以降に貼り付け
Application.CutCopyMode = False 'コピーモード終了
.Range(.Range("F1:H1"), .Range("F1:H1").End(xlDown)).Sort Key1:=Range("F2"), _
Order1:=xlAscending, Key2:=Range("G2"), _
Order2:=xlAscending, Header:=xlYes '貼り付けられたデータを書籍名で並び替え
.Range("E1:E" & x).Delete Shift:=xlToLeft 'E列の式を削除しF~H列のデータを左に移す。
End With
End Sub
>>VBAもエクセルに搭載してある機能なのですが…
私には少し敷居が高そうに感じたものですから・・・(^^;)
GUIで出来る機能でもあればと思った次第です。
ご丁寧に解説までつけていただき、ありがとうございます。
コピペして使ってみたのですが、すごく・・・遅いんです・・・。
PCスペック等も関係あるのでしょうか?
今回は別の方法で対応させていただきました。
ありがとうございました!!
No.5
- 回答日時:
>COUNTIFを使ってみたのですが、うまくいきませんでした・・・。
>この場合の式の意味は、セルB2に書籍名が入力されているとすると、
>「B列をセルB2の書籍名で検索して、同じものがあるなら
>カウントする」
>といった意味でよろしいでしょうか?
>一つしかないものに「2」のフラグが立ったりしています。
うまくいきませんか。テストで作った10行程度のデータでは動いたんですが、どこか違うのかも知れませんね。
おっしゃるとおり式の意味はE2に「=countif(B$1:B$10000,B2)」と入れますとB1からB10000までの範囲でB2と同じデータの数を数えるというものです。自分自身も数えますので重複するものが無くても必ず1はカウントされます。
ユニークな(同じものが他に無い)データが2にカウントされてしまう原因が分かりませんが、そこの行のE列の式をコピーしてコメント欄に貼り付けていただけませんか?何か分かるかもしれません。
返事が遅くなって申し訳ございません。
できました! 私が式をミスしてました・・・。
これで処理できそうです。ありがとうございました。
No.4
- 回答日時:
一万件もあるならVBAでやったほうがいいでしょう。
以下の手順をおためしください。
1.Altキー+F11キーでVisualBasicEditorを呼び出します。
2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。
Sub test01()
Dim x As Long
With ActiveSheet
.AutoFilterMode = False
x = .Cells(Rows.Count, "B").End(xlUp).Row
.Range(.Cells(2, "E"), .Cells(x, "E")).FormulaR1C1 = "=COUNTIF(R2C2:R" & x & "C[-3],RC[-3])"
.Range("A1:E1").AutoFilter
.Range("A1:E1").AutoFilter Field:=5, Criteria1:=">1", Operator:=xlAnd
.Range("B1:D" & x).SpecialCells(xlCellTypeVisible).Copy
.AutoFilterMode = False
.Range("F1").PasteSpecial
.Range("E1:E" & x).Delete Shift:=xlToLeft
Application.CutCopyMode = False
End With
End Sub
3.Alt+F11キーでワークシートへもどります.
4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行
これでご要望のようになると思います。
ただし、これはやり直しが聞きませんので必ずオリジナルデータの控えをとってからやってくださいね。
お返事ありがとうございます。
VBAを使えばこのようなこともできるのですね。
関数もロクに使えない私にはすごいの一言です。
ただ、私だけではなく、ほかの社員も同じような作業を行いますので、
エクセルに搭載してある機能や関数を使えれば、説明もしやすいし、
データに変更があった場合も対応しやすいかな。思っています。
(VBAがまったくわからないので、データに変更があった場合、どこをどう書き換えればいいのかわかりません・・・)
No.2
- 回答日時:
E列の各セルに「=countif(B1:B10000,各セルのセル番号)」という式を入れると重複しない場合は値が0、重複する書籍名がある場合は値が1以上になるますから、重複はこれで判定できます。
(抽出したものは、書籍名だけではなくて、ほかの出版社や著者の指定したデータも表示させたい。)というくだりはちょっと意味が取りかねるのですが。
この回答への補足
説明がわかりづらくてすみません。
質問の内容を例にとると、
「書籍名」を基準にして重複データを検索。
「重複した書籍名があれば、書籍名ならびにその出版社、著者をE列に表示させたい。」
ということです。
自分の説明力の無さが悲しい・・・。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで重複データを行ごとに抽出したい 4 2022/12/05 08:18
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Excel(エクセル) Excelの関数でこんな処理ができますか 1 2023/02/08 13:46
- Excel(エクセル) エクセルのデータの抽出について 3 2022/09/15 23:56
- Excel(エクセル) Excelマクロの差分抽出のコードを教えていただきたいです。 2 2023/03/14 11:40
- Visual Basic(VBA) 複数シートの複数列に入力されているデータを重複なしで抽出するVBAを作りたいです。 9 2022/06/17 10:33
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
パソコンを買ってから何かやら...
-
WindowsXPを最近のパソコンに...
-
絶対にいけるWindowsXPsp3の無...
-
Windows 11 のウィンドゥのうっ...
-
Windows XP SP3のインストール...
-
windowsXPでしか起動できないゲ...
-
XPがインストールできない
-
エクセルのカメラ機能について...
-
印刷スープラがすぐに停止する
-
最近、パソコンを起動するとこ...
-
windows xp 日本語化
-
お気に入りの表示が遅い
-
フリープリントソフト「かんた...
-
パソコンでCDを見たい、見る...
-
PCのエクセルなどのショートカ...
-
windowsのインストールにてISO...
-
ノートパソコンの「各性能」は...
-
履歴書の住所の欄にふりがなを...
-
パソコンのiTunesからスマホに...
-
パソコンで フォルダ を作るシ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WindowsXPを最近のパソコンに...
-
絶対にいけるWindowsXPsp3の無...
-
Windows 11 のウィンドゥのうっ...
-
Windows XP SP3のインストール...
-
印刷スープラがすぐに停止する
-
アウトルックを「タスクバー」...
-
windowsXPでしか起動できないゲ...
-
XPがインストールできない
-
エクセルのカメラ機能について...
-
PCのエクセルなどのショートカ...
-
WindowsXPのプロダクトキーを紛...
-
windowsのインストールにてISO...
-
パソコンでCDを見たい、見る...
-
パソコンが操作できなくなりま...
-
やっぱり現代のPCにWindowsXPを...
-
Windows xpにWindows10を無理や...
-
最近、パソコンを起動するとこ...
-
エクセルでの文字入力がIMEでし...
-
Windows10 32ビットから64ビッ...
-
OphcrackがWindowsVistaでブー...
おすすめ情報