
お世話になります。
csvファイルの内容は各行
"ID_A","B","C","D","E","F","G","H","I","J",K","L","M","N","O","P","Q","R","S" で
項目行はなく、文字コードはUTF-8です。
IDは12バイトの数字で、うち1バイト目から8バイト目は日付、
9バイト目から2バイトは場所コード、
11バイト目から2バイトが品目コードです。
また、csvファイルのデータは、優先順位が ①日付、②場所コード、③品目コードで
昇順に格納されています。
この日付がエクセルシートABCのCells(1, 4)の値と一致する行のみを抽出し、
場所コードと品名コードをそれぞれ対応する日本語に置き換えたいです。
マクロでcsvファイル名を指定し、条件に合う行のみを編集処理をして
エクセルシートABCの2行目以降に書き出すにはどうしたら良いのでしょうか?
お手数をおかけしますがよろしくお願いします。
追記;
https://excel-vba.work/2021/01/04/%E3%80%90vba%E …
上記サイトを参考にマクロを作成したのですが、抽出できませんでした。
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
カテゴリがrubyということで。
100万行のダミーデータ(約1.5GB)を作成してみて、それをシーケンシャルに文字列検索したところ、だいたい15~20秒ぐらいかかります。
----
>ruby -r benchmark -e "STDERR.puts Benchmark.measure{open('a.txt').readlines.collect{|s|[s.split(',')[0],s]}.find_all{|x|/210406/=~x[0]}.each{|x| print x[1]}}"
210406,0.12258189145312148,(ryaku)153440369
13.766000 1.625000 15.391000 ( 15.396476)
----
blue.moonさん(質問者)は、たぶんVBA(rubyじゃなくて。)でなんとかしたいということなんでしょうが、100万行を毎回読み込む処理の仕方をしてるかぎり、たぶん20秒くらいかかると思います。
なので、すでに回答があるとおり、Access使ったり、日付毎のファイルに分割したりとかしないと高速化は無理かと。
>上記サイトを参考にマクロを作成したのですが、抽出できませんでした。
見た感じサイトに書かれてることに間違いなさそうなので、がんばれば上手くいくのでは。
使えるなら、PowerQuery使ったほうが楽かも。
おはようございます。
ご回答ありがとうございます。
ご助言はまさにその通りだと思います。
ですが、(これは私の説明不足の部分でもあるのですが)
実際に毎回ファイル操作をする人が私ではなくコピペ程度しかできないので、
AccessやPowerQueryなどは使えず・・・
マクロのみで自己解決できました。 要した時間は11秒でした。
(検索対象ファイルサイズ:111,346KB)
No.6
- 回答日時:
情報ありがとうございます。
あといくつか教えてください。
・CSVファイルはBOM付きですか?
・エクセルシートABCはシート名が「ABC」という事ですか?
・セル(1, 2)は「B1」セルという事ですか?
・セル(1, 4)は「D1」セルという事ですか?
・念のため、OS(Windows10 64bit等)とExcelバージョンはいくつですか?
・数値や文字列を別の数字や文字列に置き換えていただいてもいいのですが、
それでも実際のCSVデータを写真で見せていただくことは厳しいですか?
おはようございます。
何度もありがとうございます。
私にわかりにくい説明のせいで
すっかりお手数をおかけしてしまい、申し訳ありません。
何とか自己解決できました。
No.5
- 回答日時:
こんにちは。
エクセル2016、365ならパワークエリが標準で使えます。
パワークエリで読み込み、パワークエリ上で抽出作業を行なってシートに書き出すまたはデータモデルに追加してピボットテーブルで集計することができます。
ダミーでも良いので、サンプルデータを作ることができると助かります。
https://cpx.co.jp/blog/2908
以上ご参考となります。
No.4
- 回答日時:
念のため、実際の「csvファイル」の1行や、
エクセルシートABCや、エクセルシートABCのCells(1, 4)の状況を
写真で見せていただくことは可能でしょうか?
あと、条件に合う行はおおよそ何行くらいありますか?
余談になりますが、高速での処理を希望とのことですが、
例えばエクセルではなくてアクセスなどでは希望に合いませんか?
おはようございます。
ご回答ありがとうございます。
実際に検索するcsvはとある有料ソフトで作成した指数データ
("B","C",・・・・・・,"S"の部分で、小数点のある実数)ファイルなので、
生データをお見せできなくて申し訳ありません。
そのデータファイルを事象発生日毎のエクセルファイルに加工することが、
今回の作業目的です。
抽出条件=事象発生日=エクセルシートABCのセル(1, 4)の値で
数字8桁。
これが一致するデータは数件~600件程度です。
シートABCには、
セル(1, 2)の値が"日付データ名;"
セル(1, 4)の値は"20170501"のみが入力されており、
他のセルは全くの空白です。
また、編集済みエクセルファイルの実際の使用者が
コピペ程度しかできないため、アクセスでの処理は想定していません。
ABCシートのセル(1, 4)・・・、と言いましたが、
これはディスプレイに表示させたメッセージボックスに
yyyymmdd形式で指定、でも可です。
お手数をおかけしますが、よろしくお願いします。
No.3
- 回答日時:
No.1です。
> …エクセルに全件インポートして・・・、ということでしょうか?
いいえ。
新しいEXCELを開いて、そのCSVを全件読み込み、
EXCELファイル間で必要な処理をすればよい、
と言う事です。
> でしたら処理時間がかかりすぎるのですが?
百万行もあれば、当然処理時間はかかります。
むしろ、そんな膨大なデーターを一つのCSVファイルにまとめてしまった、
これこそが、間違いと言えるでしょう。
ご回答ありがとうございました。
自己解決できました。
> 新しいEXCELを開いて、そのCSVを全件読み込み
この部分はマクロのソースコードでは、Openメソッドで対応し、
全件検索しました。
> EXCELファイル間で必要な処理をすればよい、
条件にあう行のみ配列に加え、条件に応じて編集、出力。
ご回答の文面から、不愉快にさせたようで申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 船舶・クルーズ Windows10のエクスプローラにて。 1 2022/10/10 20:11
- ライブ・コンサート・クラブ あなたの気になる「名ばかり~」はどんなものですか 7 2023/03/08 19:09
- Visual Basic(VBA) VBAでのフルパスの取得 1 2022/09/20 22:51
- 工学 都市ガスの燃焼速度 3 2022/08/03 12:59
- マウス・キーボード Pc切替器が動作しません。理教えてください。よろしくお願いします。 4 2023/05/10 15:43
- docomo(ドコモ) 台湾でesimを使ってみたいのですが、簡単に設定できるのでしょうか。 3 2023/04/16 20:41
- 経済 国債をどんどん発行して、国家予算に充てれば良いという考え方が提唱されてますが…… 5 2022/10/09 19:34
- 英語 "dozen"以外の数の単位が名詞を修飾する場合の"of"の必要性とその理由について 3 2023/04/29 16:03
- 政治 「このクソッタレが!」名古屋の高級焼肉店個室で“人糞”放置事件が発生 3 2022/05/30 18:30
- 事件・事故 「テロリストの女王」重信房子が刑期満了で出所へ 5 2022/05/27 17:13
このQ&Aを見た人はこんなQ&Aも見ています
-
【ExcelVBA】300万件越えCSVから条件を満たす行だけ抽出するには?
Visual Basic(VBA)
-
100万行のCSVを10万行ずつのファイルに区切るには?(UTF-8、改行LF)
Excel(エクセル)
-
VBAでの100万行以上のデータの取り込み
その他(プログラミング・Web制作)
-
-
4
エクセルVBA 2千万行のCSVファイルを開きたい
Visual Basic(VBA)
-
5
エクセルVBA 大容量CSVファイルの読み込み
Visual Basic(VBA)
-
6
VBAで文字列を数値に変換したい
Excel(エクセル)
-
7
ACCESSでの大容量データインポート
Access(アクセス)
-
8
エクセルVBA 大容量CSVファイルの読み込みが遅い
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELのSheet番号って変更でき...
-
VBA 空白行に転記する
-
マクロの「SaveAs」でエラーが...
-
Count Ifのセルの範囲指定に変...
-
マクロ実行後に別シートの残像...
-
VBAで変数の数/変数名を動的に...
-
Excel VBA での商品管理について
-
VBA別シートの最終行の次行へ転...
-
Changeイベントで複数セルへの...
-
Excel VBA オートフィルターで...
-
エクセル VBA 時系列に横一列に...
-
楽天RSSからエクセルVBAを使用...
-
【VBA】特定の条件でセルをコピー
-
エクセル マクロ VBA Range Val...
-
RemoveDuplicatesメソッドにつ...
-
VBA 別ブックからの転記の高速...
-
VBA 実行時エラー1004 rangeメ...
-
複数シートの複数列に入力され...
-
Excel2013で切り取り禁止
-
100万件越えCSVから条件を満た...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
EXCELのSheet番号って変更でき...
-
VBA 空白行に転記する
-
マクロ実行後に別シートの残像...
-
VBA別シートの最終行の次行へ転...
-
Count Ifのセルの範囲指定に変...
-
VBA 別ブックからの転記の高速...
-
Changeイベントで複数セルへの...
-
【VBA】特定の条件でセルをコピー
-
100万件越えCSVから条件を満た...
-
楽天RSSからエクセルVBAを使用...
-
複数シートの複数列に入力され...
-
Excel VBA オートフィルターで...
-
VBAで変数の数/変数名を動的に...
-
Unionでの他のシートの参照につ...
-
Excel2013で切り取り禁止
-
VBA 実行時エラー1004 rangeメ...
-
ExcelのVBマクロを、バックグラ...
-
VBA 最終行を選んだシートにコ...
-
アクセスからエクセルへ出力時...
おすすめ情報
csvファイルを更新するたびにデータ件数が増えることもあり、できるだけ高速で処理できるとありがたいです。