11/09/09 13:31:07.40
ここだとインデントもなくなるし複数のレスに跨ると見辛くなるしpastebinの類を使った方がいい
705:デフォルトの名無しさん
11/09/09 14:41:03.12
スレ汚してしまって、ゴメン。次回以降、気をつけます。
706:デフォルトの名無しさん
11/09/09 15:29:15.05
Excelで管理するようりDBで管理したほうがよさげなデータだな
707:デフォルトの名無しさん
11/09/09 15:30:52.22
Janeだと引用付きレスを使えばインデントも復元できるけど、やっぱ半角スペースを全角スペースに全置換する程度の気遣いは必要かもね
708:デフォルトの名無しさん
11/09/09 15:39:29.87
それは気遣いちゃう
気違いじゃ
709:デフォルトの名無しさん
11/09/09 15:51:08.43
>>706
その意見に大賛成だけどネックは「今まで記録マクロしか扱ったことがない素人」にDB扱わせるのは
問題ありすぎだと
710:デフォルトの名無しさん
11/09/09 15:56:41.33
でも5万件もの商品データを扱うのにExcelを使ってるような
会社?が信用できるのかどうか。
遊びでもなさそうだし。
711:デフォルトの名無しさん
11/09/09 16:28:34.60
>>710
>>698に「1ファイルに3~5万件のデータがあるため」と書かれているので
a. A~Zのファイルそれぞれに3~5万件ある
b. 更新用ファイルの内容が3~5万件ある
b-1. 全データ数が3~5万件あって、毎回その全てのデータが更新用ファイルに入っている
b-2. 全データは5万件以上あって、更新用ファイルにはその中の3~5万件分が入っている
のどれかなんだけど、Zから始まるものが3万件もあるとは考えづらいのでb.じゃないかと睨んでる。
そうすると、処理毎に3~5万回の検索をしなければならないので、データベース的なものを
考えないと無理だと思う。(金曜の夜に起動しておいて、月曜来たときに終わってればOKとかいう場合は別)
712:デフォルトの名無しさん
11/09/09 16:33:50.13
まぁでも事前に26個のデータファイルをオープンしておいて、3~5万回のrange.find()しても
たいした時間かからないような気もする。
あと、>>701のコードは駄目駄目だから。rangeをSelectするのはド素人。
713:698
11/09/09 21:29:19.94
用途は仕事です。
データ件数の話ですが,フォルダ1内ののA~Zのファイルがそれぞれ3~5万件といったところです。
更新データは1万以下です。
正確には数の少ないX~Zなどは1ファイルにまとめてあったりするところもあります。
結局は全部開いて検索しなければならないと思ったので詳細は省いて説明してしまいました。
時間がある程度かかることは承知していますが,その間放置しておけばよいので,
できるだけ自動化して上手く反映させられることを優先しています。
>>701
ありがとうございました。
でもこのコードは駄目駄目?なんですか?
まずAのファイルから開いてFor Eachで検索→一致したものを更新→Bのファイル→C……Zまで繰り返し
という流れで良いのでしょうか? まあそれが分かっても自分でコードは書けないわけですが
714:デフォルトの名無しさん
11/09/09 21:51:45.53
>>713
>>701です。あくまで1例だけど、考え方はその理解で合ってる。
確かに指摘されてる通り直す余地が色々ある効率も良くないコードだけど、
一応やりたい事は実現できる。おいらもVBA熟練者じゃないんでお手本を見て参考にしたいなぁ。
更新データだけでなく、フォルダ中のデータも並びを入れ替えても良いなら、
最初にフォルダ中のデータも全部ソートしちゃうと効率上げられるね。
フォルダ中のデータに存在しないレコードを探す場合以外は、
マッチング処理用の走査開始位置を、前回のマッチング行の次の行から行えば良いので、
データ全体を検索のために走査する回数は1回で済ませられるはず。
まぁでもみんなの言う通り、Excelで処理しなければならない特別な理由が無いなら、
データベースに移行した方が良いと思うし、イニシャル毎にファイルを分ける運用も
やめてデータは1つの表にまとめた方が良いと思う。
それなら今回の処理だってACCESSとかならSQLを1文書くだけで済む。
715:デフォルトの名無しさん
11/09/09 23:24:55.48
全角スペースでインデントできるけど。
716:デフォルトの名無しさん
11/09/09 23:25:57.60
物すごく遠回りなデータベース
717:デフォルトの名無しさん
11/09/09 23:32:39.25
Range("A1").FormulaR1C1 = "='E:\[Book1.xls]" & i & "'!RC-'E:\[Book2.xls]" & i & "'!RC"
作業しているブックのシート名とBook1のシート名が同じ場合、上のようなマクロを実行すると
「リンクするシートを選択してください」とBook1のシートを選択する小窓が出ます。
Book2と同じシート名では問題なく実行できたのですが
なぜこのようになるのか教えてください
718:698
11/09/09 23:57:35.55
>701
ありがとう。まず少ないデータで確認しながらやってみます。
>716&その他の方
遠回りせずにすむ方法があればぜひ教えてください
719:デフォルトの名無しさん
11/09/09 23:59:43.06
まずaccessを買ってください
720:デフォルトの名無しさん
11/09/10 08:16:09.19
>>673
質問者とは全然関係ないんだけど
たまたま似たようなことやっててとても参考になりました。
どうもありがとう
721:デフォルトの名無しさん
11/09/10 08:18:44.44
Accessを買わなくてもADOでSQLはつかえるぞ
メモりリークするけどw
722:デフォルトの名無しさん
11/09/10 08:43:01.94
>>721
それは何かしらのデータベースがインストールされていればの話でしょ。
mySQLとかPosGreとか無料のDBインストールして使ってみるのもいいかもしれないけどね。
DB使うってことは必然的にSQLの知識も必要になってくるわけで。
VBAで手軽にっていうのとかけ離れているのかもしれない。
DB向けの内容をExcelにやらせていること自体、システム設計に問題があると思う。
723:デフォルトの名無しさん
11/09/10 09:10:02.17
>>722
> >>721
> それは何かしらのデータベースがインストールされていればの話でしょ。
> mySQLとかPosGreとか無料のDBインストールして使ってみるのもいいかもしれないけどね。
Excelの表に対してもADO&SQLで操作できるぞ?一部使えない命令(DELETE文とか)もあるけど
でも、使ってみたかんじではちょっと凝ったSQLは上手く動かなかったな
724:デフォルトの名無しさん
11/09/10 09:23:53.56
ExcelをDBとして使うのが間違ってるからなぁ
絵を書くのにペイントを使わずワードを使ってるようなものだし