アプリ版:「スタンプのみでお礼する」機能のリリースについて

もしいい方法があればお伺いしたいですmm

注文番号 注文日  商品名 価格 仕入れ先 出荷日
12345 2014/10/11 たまご  198  倉庫A  11月 
13456 2014/11/13  牛乳 238 倉庫B 11月
 ・
 ・
 ・

上記xlsデータがあり、タイトルに準じて5000行ほどのレコードがあります。
(1行目がタイトル)

データがきれいでないため、5000行の中で重複が混在しています。
Accessであれば重複クエリーで重複したものだけをPickUpはすぐにできるとおもいますが、
その方法ではなく、

重複したものは先にある行だけを残しそれ以外は除外するという方法は
とれないでしょうか。
例:5000行あるが、重複しているデータを除くと4700行になる。
(重複している行は先頭を残して削除してダブらない行だけを出したい)

※重複となるパターン

注文番号 注文日 商品名 価格
の4項目が全く同じものが複数行ある

御手数をおかけします。

A 回答 (2件)

No.1です。



>これだとエクセル行分が限界でしょうか。

当然Excelの表示できる行数分が限界となりますが、
Excel2007以降であれば最終行は104万行以上になります。

理論上はその行数までのデータであればダイジョブ!というコトになります。
前回のマクロのコードをそのまま利用できますが、
データ量が極端に多い場合は
処理速度は若干遅くなる可能性があります。m(_ _)m
    • good
    • 0

こんばんは!



5000行程度であればExcelで問題ないと思います。
Excelのフィルタの詳細設定で「重複レコードは無視する」という操作がありますので、
作業列を1列(G列)設け、G2セルに
=A2&"_"&B2&"_"&C2&"_"&D2
という数式を入れフィルハンドルでダブルクリック → G列を範囲指定 → メニュー →
データ → 「並び替えとフィルタ」の「詳細設定」 → 「重複レコードは無視する」にチェックを入れ
表示されているデータをSheet2にコピー&ペーストして完了です。
(Sheet1のフィルタは解除してやります)

以上の一連の操作をVBAでやれば以下のようになります。
Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻り(VBE画面を閉じて)マクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() 'この行から
Dim lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
.Range("G1") = "ダミー"
With Range(.Cells(2, "G"), .Cells(lastRow, "G"))
.Formula = "=A2&""_""&B2&""_""&C2&""_""&D2"
.Value = .Value
End With
.Range("G:G").AdvancedFilter Action:=xlFilterInPlace, unique:=True
Range(.Cells(1, "A"), .Cells(lastRow, "F")).SpecialCells(xlCellTypeVisible).Copy wS.Range("A1")
wS.Columns.AutoFit
.ShowAllData
.Range("G:G").Clear
End With
End Sub 'この行まで

これで↓の画像のような感じになります。m(_ _)m
「あるデータで重複しているものを省きたい 」の回答画像1
    • good
    • 1
この回答へのお礼

tom04さん、ありがとうございます!

これだとエクセル行分が限界でしょうか。

Accessだと2桁万行レベルでもいけるのでしょうかmm

お礼日時:2015/02/10 14:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!