ここのおかげで、無事研究に利用できるようにVLOOKUP処理を行えたのですが、
今度はそれが理由で、再計算したら処理が「10%」で常時フリーズするようになってしまいました。
元々データ数が5万件あり、列の数も100件近くあるので
データは200MB近くあるのですが、XPのPCを利用してもまともに
動かなくなりました。(再計算したときのフリーズはもちろん、なぜかスタンドアロンなのに、読み取りロックがかかったり、保存そのものができなくなったりします)
ここを見ていて「直接使わないVLOOKUP」の箇所を削除したりして少しずつデータを軽くしているのですが、それでも100MB以上あります。
やはりアクセスに切り替えたほうがいいのでしょうか?
これだけ項目数(縦、横とも)があると、アクセスでは無理でしょうか?
No.3ベストアンサー
- 回答日時:
参考です。
小生、業務で、Excel,Accessともに使っています。Access、Excelそれぞれに得意なものがあと思います。Accessは、やはりデータベースですから、そのデータ量(と言っても2Gまでですが)、それと、Excelでいうところの
Vlookup機能相当のものがありがたい。2つのテーブルで、仕事テーブルに担当者名、他方には、担当者名、および属性(例:住所等)があった場合、仕事テーブルに属性情報をもってくるのは、いとも簡単です。これは、リレーショナルデータベースの機能そのものです。
Accessでは、リレーションを組んで処理し、結果をExcelにexportし、グラフ化しています。グラフ化は、やはりExcelです。
貴兄の場合、膨大なデータですので、シート関数を使うことは、やめた方が良いと考えます。ExcelのVBAを使ってやるの方法かと思います。例えば、
dim myArray as variant
myArray=range("A1:z60000").value
で、メモリ上にセルに対応したエリヤを確保できます。値は、セルに入っている値です。メモリ上の2つのエリヤ間で、For loopで繰り返し、vlookup相当を実施すれば、処理時間は、あまり気にならないのではないかと思います。Variantのこの使い方は、結構使えます。
ただし、「データ数が5万件あり、列の数も100件」ものデータをVariantに持ってきたことはありません。
まとめとして、
(0)大量のデータに対しては、シート関数はやめた方が良い。
(1)VBAを使って、Variantの活用を検討ください。
(2)Accessのリレーションの活用を検討ください。
この回答への補足
ありがとうございます。やはりアクセスの方が良いのですね。
自分もVBAは今項目の入力を手抜きするためだけに使っています。
アクセスのリレーション機能の利用を検討してみます。
これから本を買いに行ってこようと思います。
データの移行には時間がかかるのでしょうか?
No.4
- 回答日時:
ANo.3への補足です。
Accessへの移行ですが、データベースの定義が確かに大切です。しかし、実戦的には、EXCELファイルをインポートしてテーブルを作成した方が
早いです。200MBもあると、若干時間は掛かると思いますが、5分もいらないと思います。
ただ、気をつけなければいけないことは、2行目に、きちんとした本来の値が入っていないとまずい(経験的に)。
と言うのは、1行目は、ヘッダーとして取り扱うようにチェックマークを入れる。2行目からデータとしてAccessに認識させる。本来「数値」であるところに、データがないから、或いは覚えのために数値以外「NULL」みたいな
ストリングが入っていると、ACCESSは、この列は「TEXT」なんだと認識してしまい、3行目以降のきちんとしたデータをすべてエラー扱いにしてしまいます。もっとも、インポートのウィザードの何ページ目かで、列の定義を変更できるようになっていますので、致命的ではないですが。
こうして、入力したテーブルを最初のクエリで、データの列を全部持ってきて、すべての列に対し「GroupBy」をすることで、重複削除を施し、2番目のクエリで、レファレンステーブルとのリレーションをとると言うようにしています。100列もあると、時間は掛かるかも知れないです。
No.1
- 回答日時:
VLOOKUP関数には他のそれにはない
「閉じているブックに対しても正常に値を参照する」という機能が備わっています
確証を持って言えるわけではないのですが
この機能の分なのでしょうか?
VLOOKUP関数は他のそれに比べ処理が思いように見受けられます
なので他の関数の組み合わせを用いたり
VBAにシフトするなどの対策を講じると
高速化が図れる可能性があります。
また、
処理内容が定かでないので此もはっきりと言えないのですが
「多数数値の演算の相互干渉の中から情報を取り出す」
的なことをもしされているならば、
エクセルより数式処理ソフト系の方が適しているやも知れませんので
此処の過去ログをお調べ頂ければ
私の過去の発言でこの内容に触れたものがありますので
ご参考になるかと存じます。
一方で、
データーベースとしてエクセルをお使いの場合は
やはり仰る通りアクセスへ切り替えた方が良いと言えそうです。
その差は歴然のようなので
如何でしょうか?
お役にたてたなら幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(IT・Webサービス) 高速処理可能な表計算ソフトについて ExcelやGoogleスプレッドシートのような表計算ソフトで、 2 2023/04/29 16:06
- Access(アクセス) スキルシートのエクセルの項目に 2 2023/04/04 22:41
- Excel(エクセル) ネットワーク上のエクセルとリンクしている時にデータ更新をvbaで、refresh Allで行う場合の 2 2023/04/10 05:39
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- その他(データベース) 業務用のデータベースサーバーの選び方について 4 2022/11/22 10:22
- その他(法律) 携帯電話会社に保管されている解約済み個人情報を消去したい 3 2022/08/13 23:23
- その他(プログラミング・Web制作) プログラミング 処理速度 1 2022/11/25 11:05
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
- Excel(エクセル) エクセルで値ではなく関数を参照する方法 6 2023/03/19 00:50
- その他(コンピューター・テクノロジー) 50台の織機から回転数を取得・集計しモニターに表示したい 2 2022/11/05 15:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessのリンクテーブルのパス...
-
Excel→Accessへ貼り付けがおかしい
-
Accessクエリーで両方のテーブ...
-
Accessのことで教えてください...
-
Accessでの併合のやり方
-
Access 旧データを新データに入...
-
AccessからExcelのデータを消す...
-
GETPIVOTDATAを使...
-
アクセスのコンボボックスのデ...
-
Excelでのリストアップ
-
ACCESS2016のクエリ重複データ...
-
Accessファイルを作成者以外は...
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
Accessでテーブルの値をテキス...
-
SUBSTRING 関数に渡した長さの...
-
デザインビューで、連結式 を...
-
「直需」の意味を教えてください
-
Accessでテーブル名やクエリ名...
-
Accessで数値型にNULLをInsert...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessのリンクテーブルのパス...
-
Accessのクエリでデータの入力...
-
Accessクエリーで両方のテーブ...
-
Accessファイルを作成者以外は...
-
Excel→Accessへ貼り付けがおかしい
-
Accessのことで教えてください...
-
GETPIVOTDATAを使...
-
AccessのDBを理解するコツは?
-
アクセスのコンボボックスのデ...
-
AccessからExcelのデータを消す...
-
AccessのクエリをExc...
-
EXCEL データテーブルの数字を...
-
Access 旧データを新データに入...
-
Accessでの併合のやり方
-
グラフとデータテーブルの順序...
-
線の画像を座標数値化するソフ...
-
エクセル 横棒グラフのデータテ...
-
ACCESSデータを削除してしまい...
-
Accessでオートナンバーの値を...
-
Excel VBA からの Access 呼び...
おすすめ情報