ここから本文です

エクセル・クエリ・マクロについて エクセルのクエリ・マクロに関する知識は皆...

mojoさん

2019/10/2316:53:59

エクセル・クエリ・マクロについて

エクセルのクエリ・マクロに関する知識は皆無です。

現在、A列のセルのうち、C列の内容と一致するセルを抜粋するため、関数を使用しています。

=IF(COUNTIF($C$1:$C20000,A1)=0,"",A1)

現状は上記の数式を使い、画像のようにしていますが、これが多いときは数万行あります。

処理時間が遅すぎて困っています。
クエリやマクロで解決できるのであれば活用したいのですが、どうすれば良いでしょうか。

$C20000 A1,クエリ,エクセル,COUNTIF,エクセル・クエリ

閲覧数:
50
回答数:
3
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

taihenda****さん

2019/10/2401:36:35

クエリを使うのは悪くはないと思いますがボタン一つで、というわけにはいかず、ファイルを読み込んだりテーブルに変換したりと手続きが少々面倒です。

マクロはコードを書くのに時間がかかるかもしれませんが書いてしまえば次回の作業からはボタン1押しで済みます。

丁度前の回答でテスト用に書いたマクロがあるので試してみてください。

サンプルはA列2万行、C列25000行でテストしました。B列に出力します。行数は取得するので何行でもいいです。
このくらいの行数なら1秒かからないと思います。



Sub test()
Dim dic As Object, i As Long, A, C, B, start
Columns(2).ClearContents
Set dic = CreateObject("Scripting.Dictionary")
start = Timer
A = Range("A2", Cells(Rows.Count, 1).End(xlUp)).Value
C = Range("C1", Cells(Rows.Count, 3).End(xlUp)).Value
ReDim B(1 To UBound(A), 1 To 1)
For i = 1 To UBound(C)
dic(C(i, 1)) = ""
Next
For i = 1 To UBound(A)
If dic.exists(A(i, 1)) Then
B(i, 1) = A(i, 1)
End If
Next
Cells(2, 2).Resize(UBound(A)) = B
MsgBox Timer - start
End Sub

  • 質問者

    mojoさん

    2019/10/2411:06:22

    さっそく試してみました!!
    記述いただいたコードをそのまま使用して、うまくいきました!!
    時間も今まで5分程かかっていたのが、10秒程で済みました。
    本当にありがとうございました。心より感謝申し上げます。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/10/24 17:04:06

日常業務が劇的に改善されました。
心より感謝いたします。

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

2019/10/2322:43:54

Power Queryなら

A列データ範囲とC列のデータ範囲をそれぞれPower Queryに読み込み
https://www.excelspeedup.com/hajimetenopowerquery/

クエリをマージする
https://modernexcel7.hatenablog.com/entry/merge_query

テーブルを展開
閉じて読み込む
以上終了

auq********さん

編集あり2019/10/2402:09:27

COUNTIF関数は動作が遅いのでMATCH関数で代用できる場合はMATCH関数を使用した方が早いです。

=IF(ISERROR(MATCH(A1,$C:$C,0)),"",A1)


これでも遅いようでしたらマクロを組んだほうが良さそうです。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる