人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

質問です。
エクセルでA列にアドレスのデータがあります。これを重複チェックしてB列に重複がないものは1、重複回数に応じて2,3,4・・・と数字を表示する関数またはマクロをおねがいします。データは5万件くらいあります。できるだけ早い処理時間を希望します。

●質問者: inosisi
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● きゃづみぃ
●50ポイント ベストアンサー

たとえば A1でしたら B1に

=COUNTIF(A:A,A1)

とやればいいです。

あとは そのB1をコピーして 行数分 貼り付ければいいですよ。

◎質問者からの返答

ありがとうございます。

この関数でデータ5万件で約5分かかりました。もっと早い方法はありますかCPU次第でしょうか


2 ● niwa-mikiho
●25ポイント

2列しか無いデータなら、テキストファイルに出力して、

perl であったり、なんらかのスクリプトで処理したのをインポートした方が速いような気がします。


perl だとこんな感じになります。


#!/usr/bin/perl

use strict;

use warnings;

my $file_input = 'all.csv';

my $file_output = 'filtered.csv';


print "Processing ... please wait.\n";

my %address_count = ();

open(my $infh, '<', $file_input);

open(my $outfh, '>', $file_output);

while(my $line = <$infh>){

chomp $line;

# 重複チェックは A 列のみ

my $address = (split(/\t/, $line))[0];

# 重複個数をカウントする

$address_count{$line} = 0 if !exists($address_count{$line});

$address_count{$line}++;

# 書き出し

print $outfh $line, "\t", $address_count{$line}, "\n";

}

close($infh);

close($outfh);



簡易的に用意した240万件の処理に25秒でした。

(core2duo 1.86GHz の環境)

◎質問者からの返答

ありがとうございます素人でもうしわけありませんが

これはエクセルで出来るのでしょうか

使い方が良く分からないのですが教えていただけららと思います


3 ● じゅぴたー
●25ポイント

マクロでB列が未記入の場合のみ重複チェックするようにしてみました。

B列を「空」にしてから実行してください。

Sub hoge()
Dim i, j, k, n, m, buff(9999) As Long
Dim c0 As Variant

n = Range("A:A").End(xlDown).Row
For i = 1 To n
 'まだ記入されていないなら重複チェック
 If (Cells(i, 2).Value = "") Then
 c0 = Cells(i, 1).Value
 buff(1) = i
 m = 2
 For j = i + 1 To n
 If (Cells(j, 1).Value = c0) Then
 buff(m) = j
 m = m + 1
 End If
 Next j
 '重複回数を記入
 For j = 1 To m - 1
 Cells(buff(j), 2).Value = m - 1
 buff(k) = 0 '初期化
 Next j
 End If
Next i
End Sub
◎質問者からの返答

ありがとうございます

1万件で2?3分ですねちょっと時間がかかりすぎるようですね

25000?50000件では無理なかんじです

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ