26/01/22 03:00:29.21 tPuXlbT/.net
>>436
一番ですね。
呼び出しの度に毎回Regexpをインスタンス化すると遅いのでグローバルモジュールにグローバル変数を作ってプログラム全体の初期化時に一度だけオブジェクトを作ってインスタンス化おくのが良いでしょう。
そして、パターンチェック関数(Boolean)、置換関数(Replace)、マッチ個数関数、マッチ文字列返却関数などのシンプルな動作だけをする汎用的なグローバル関数を作っておくのが良いでしょう。
これら汎用的なグローバル関数の冒頭ではRegexpオブジェクトがインスタンス化されているのかのチェックと、されていない場合はインスタンス化をするという初期化も用意しておきましょう。
444:デフォルトの名無しさん
26/01/22 17:38:25.32 rmm000V+.net
今日Midを改めて試してみて、Midでも出来るかな?と思いましたが、やはりエラーを防ぐためには、細かくInstr > 0で空文字でないか?チェックするなどの必要があるから大変ですね
正規表現のTestメソッドやReplaceが便利すぎます
445:デフォルトの名無しさん
26/01/23 00:19:53.38 Nj1P+KVb.net
vbscriptでない VBA.RegExpは安定していていますかね
446:デフォルトの名無しさん
26/01/23 23:38:30.71 MlWYgM4X.net
処理速度の問題で困っています
以前使用していた環境で3秒で終わっていた処理が新環境では40秒ほどかかってしまいます
【環境】
Windows7/Excel2003
↓
Windows11/Excel2019
拡張子.xlsのファイルのまま使用していて処理自体は正確に動作します
処理の内容は単純なループ処理で処理中の画面描画はありません(screenupdating=falseも効果なしでした)
CPUもメモリも性能は以前よりいいはずなんですが原因はどんなものがあるでしょうか?よろしくお願いします
447:デフォルトの名無しさん
26/01/23 23:56:32.23 6xx16GCW.net
ウイルスチェック
448:デフォルトの名無しさん
26/01/24 00:44:06.29 4EL2lNl6.net
コピペ
449:デフォルトの名無しさん
26/01/24 04:21:22.83 mpnGHmyA.net
各処理の先頭と終端にDebugでタイムスタンプをイミディエイトに出して2003、2019それぞれで比較してどこがボトルネックなのかを探るとか
規模が小さいなら簡単だし、デカいとダルいけどデカいならデカいなりに整理されてるだろうから簡単
450:デフォルトの名無しさん
26/01/24 08:00:05.15 uoGxIQqZ.net
保存先のデフォルトが勝手にOneDriveにされてるとか
あれもこれもローカルで処理してるのがイチバン楽だし確実だし安全だし早いし
451:デフォルトの名無しさん
26/01/24 11:21:30.87 cZl+L7ZU.net
コードを見ないとなんとも言えないけど習慣としてやっておくべきなのは
・処理はメモリ上で行い最後に一括してシートに書き出す
・列全体でのループを避ける
・おまじないを書いておく
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Windows11上のExcel2003でサクサク動くなら上記対策で改善すると思う
452:デフォルトの名無しさん
26/01/24 11:51:17.30 uoGxIQqZ.net
そもそも、Win11にExcel2003はインスコ出来ないような
検証のためにわざわざ別途マシン仕立てろてか
453:デフォルトの名無しさん
26/01/24 12:15:53.16 GPVe+xLZ.net
コピペ質問に何言っても検証する本人がいないから解決しないのに
454:デフォルトの名無しさん
26/01/24 16:45:36.39 7H1JAYOj.net
株式会社アイ・エス・ビー
スレリンク(infosys板)
URLリンク(www.isb.co.jp)
株式会社アイ・エス・ビー
スレリンク(infosys板)
URLリンク(www.isb.co.jp)
455:デフォルトの名無しさん
26/01/24 17:05:40.31 TvFh/StP.net
返信遅くなり申し訳ありません
>>447
セーフモードにしても変わりませんでした
>>448
>>453
類似質問はあり参照しましたが解決に至りませんでしたコピペではないです
>>449
旧環境はクラッシュしたので比較できないのが辛いです
デバックプリントで試したところ単純な処理で時間がかかっていました
(htmlからtableオブジェクトをsetして中を検索する処理 setとNothingを繰り返してるのが原因?)
456:デフォルトの名無しさん
26/01/24 17:05:49.91 TvFh/StP.net
>>450
ローカルドライブからファイルを起動しるだけなのですが調べてみます
>>451
htmlを読み込んでSQLserverにインサートするだけなので画面描画はありませんがおまじないを入れても変わりませんでした
>>452
古いバージョンから入れないとおかしくなるみたいなので2003は入れられません
Excelのバージョン起因なのかは不明です
いろいろ回答ありがとうございました
処理自体は動くのでもう少し試行錯誤してみます
457:デフォルトの名無しさん
26/01/24 18:16:21.87 Q9c0UYyX.net
>>456
馬鹿ってこうやって条件を後出しするんだよな
原因はわかったがこういう馬鹿には教えてやらない
458:デフォルトの名無しさん
26/01/24 23:57:26.19 mpnGHmyA.net
背景や目的、手段といった前提条件を最初に提示しろよ。というのはめちゃくちゃその通りで気持ちは分かる。「質問の仕方がネット的でない」んだよね。
ただまあ、仕事じゃないし暇つぶしで回答してるだけだから別にええよ。「現実の口頭でのやりとり感覚」な質問はこれまでもこれからも続く。よい暇つぶしじゃん。
質問者が予め時間を使って”前提条件”を整理してツラツラと書いてくれるのは、もちろん答える側が後に感じるかもしれない徒労感の可能性を排除してくれるから”質の良い質問”ではあるけど、
「事象・問題の端的な説明」のみの質問は、それはそれで”質の悪い良い質問”でもあるよね。まあ、好みの話だね。
459:デフォルトの名無しさん
26/01/25 00:00:50.78 2FSQXVZF.net
>>455
>(htmlからtableオブジェクトをsetして中を検索する処理 setとNothingを繰り返してるのが原因?)
問題部分が特定できたなら、原因を特定して、解決できたらあとで教えて。
原因の特定や解決方法の質問は具体的な前提条件の提示がないとむずいよ。
460:デフォルトの名無しさん
26/01/25 10:11:42.40 NClrJdq2.net
>質問者が予め時間を使って”前提条件”を整理してツラツラと書いてくれるのは、
>もちろん答える側が後に感じるかもしれない徒労感の可能性を排除してくれるから”質の良い質問”ではあるけど、
それが出来るやつは質問文を整理してる段階で原因に気付けるわ
461:デフォルトの名無しさん
26/01/25 10:40:53.40 hIkEjs/b.net
VBAつこてるExcel2003ファイル、デバッグした途端にxlsmで保存しないと動かせないよな?
2003の頃には無かった(であろう)データ取り込みの[webから]ってつこたら動作が変わるんだろうか
Excelに限らずタスクバーに常駐するOneDriveは、さっさと無効化しとかないと仕事の邪魔
2003マシンがクラッシュしてるなら、2003入り中古PC辺り手に入れる方法も、、いや、昨今はむつかしいか
2019はPowerQuery使えるかどうか知らんけど、そこまでする必要も無さそうだし
3秒が40秒て、ストレスフル極まるな
462:デフォルトの名無しさん
26/01/25 18:40:37.59 dyHfj5tY.net
40秒待つくらいどうってことないよ
463:デフォルトの名無しさん
26/01/25 18:55:13.20 dIEkXM2T.net
40秒あれば支度できるしな