Excel VBA 質問スレ Part53

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/04/27(金) 19:02:38.39ID:+ocy8bIv
ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK


※前スレ
Excel VBA 質問スレ Part52
http://mevius.5ch.net/test/read.cgi/tech/1517052305/
2018/05/07(月) 22:27:24.84ID:G9Gl/19p
>>649
Excelを操作するとは、Excelファイルを扱うだけなのは除外すべき。
そんな処理を普通ExcelVBAで書くことは無いからな。
2018/05/07(月) 22:29:22.09ID:M2OABdlM
>>689
>>676の2つ目みたいな処理についてどう思われますか?
2018/05/07(月) 22:31:37.26ID:YSySr1F0
ま、外部からEXCELでテトリス作って動かせるっていうなら興味もわくけど
どっちでも出来ることならどっちでもいい。
2018/05/07(月) 22:46:29.50ID:G9Gl/19p
>>676
アホらしいので内容も見ずに書くけど、そういう処理ってVBAで書くことが余り無い。
それに、多分どうでも良いレベルで長くなってるだけだろうと推測する。

昔、VB6での話だがデフォルトプリンタのポ−トを変更するプログラムを書いた時に物凄く面倒な処理になったがDelphiでは簡単なのを見てDelphiは良いなと思った。
VB6ではGetPrinterやSetPrinterとCopyMemory使ってPRINTER_INFO_2構造体を操作する必要があったがDelphiではTプリンタオブジェクトなるものでポートがそのまま変更できた。

こういう場合は確かにDelphiの利点だろう。
もっとも、それが言語の優劣に繋がるわけじゃ無いが。
693デフォルトの名無しさん
垢版 |
2018/05/07(月) 22:55:14.88ID:6opRZcm/
要するにおまえら大昔にperlでエクセルいじれるスゲーって言ってたおじいちゃん達の足跡を辿るおこちゃま達なんやなw
2018/05/07(月) 22:59:02.03ID:YSySr1F0
>>688
COM使ってるならGC幾ら呼び出したところで
解放されるわけないだろタコスケ
そんなかで捕まえてるブックやらシートやらいつ解放すんだよ
GCは参照先がなくなって初めて走ったときに解放されんだよ
2018/05/07(月) 23:00:24.60ID:M2OABdlM
>>692
「excel 置換 リスト」でググったら「マクロ」がサジェストされるぐらい沢山の人が人がVBAでマクロ作って公開してる処理なんですがそれは

長文書き散らしといて実際コード貼られたらよくわかんなーいとか馬鹿の極みだな

適切なオブジェクトが用意されてるのも思いっきり言語の優劣につながる話じゃねーか
2018/05/07(月) 23:11:55.30ID:M2OABdlM
>>694
PSだと.net使ってるから解放されないんだな

rubyとかpythonだとGC走った時にcomまで解放してくれるから知らんかったわ
2018/05/07(月) 23:35:14.94ID:J4V/A43+
おいおい解放されないとか嘘ついてまでVBAをよいしょしたいのかよ
.NETでCOMをインスタンス化するとRCWってプロキシが生成されんだよ
で、このRCWがCOMインスタンス本体の参照カウントの面倒見てくれんの
RCWはGCで回収されたら参照カウントを減らしてくれる
いちいち解放を書く必要はないんだわ
2018/05/07(月) 23:42:48.04ID:M2OABdlM
>>697
やっぱり解放されるんだ
最近の言語でその辺の面倒みないとかあり得ないよなと思いつつ調べ方悪くてわからんかった
ありがとう
2018/05/07(月) 23:51:38.06ID:J4V/A43+
>>686
VBAだったらExcelに乗っかるしかないのは当たり前
そういうことじゃない
何かの目的があってプログラムを書くときにそもそもExcelでやるべきなのか?と自問自答することが大事ということ
2018/05/08(火) 00:09:10.73ID:PzpTdCXD
>>698
つまりはこういうこと
http://jeanne.wankuma.com/tips/vb.net/programming/releasecom.html

まぁどっちが手間かは分からんけど
2018/05/08(火) 00:14:14.44ID:B6wkNjU9
>>698
Excelのプロセス終了条件は正しくQuitされてる事とCOMインスタンスが解放されてる事の2つ
GCでCOM参照がクリアされてもQuitされていなければExcelは生き続ける
その仕様を失念してハマったマヌケ達が.NETではCOMが自動で解放されないなどという悪質なデマを流したんだろうね
2018/05/08(火) 00:32:00.90ID:PzpTdCXD
その点VBAはそんなことなーんも考えなくていいから
らくちんだNE
703デフォルトの名無しさん
垢版 |
2018/05/08(火) 00:32:38.38ID:RahqJUTb
>>701
アホかwそもそもプロセス終了時にGCは動かんでw
2018/05/08(火) 05:52:33.72ID:X/JD7QJy
>>685
COMだよ
だからあの程度なら解放は明示しなくてもいいと言うだけの話
2018/05/08(火) 05:54:04.37ID:X/JD7QJy
>>687
お前が普通と思うかはどうでもいいよ w
2018/05/08(火) 06:02:55.46ID:X/JD7QJy
>>697
解放されないと言うか解放タイミングが予測できないのが問題なの
RCWってあまりいい仕組みじゃないよ
https://blogs.msdn.microsoft.com/office_client_development_support_blog/2012/02/28/office-3/
2018/05/08(火) 07:14:18.75ID:wTVQYHt7
>>706
面倒くさいねぇ
だから>>675はExcelが開いていることに言及してたのか
Excelを開いたら閉じることも想定されるから
閉じて終了させようとしてもObject捕まえっぱなしで
閉じて終了させられないことがバレちゃうもんねぇ
2018/05/08(火) 08:08:21.77ID:LVc4+FR0
>>707
お前リンク先の話なにも理解できてないだろ w
2018/05/08(火) 09:48:53.93ID:JB+YJbtj
>>708
そのリンク先のさらにPart1のリンク先見て見なよ
完璧に解放するにはここまでやらないといけないんだねぇ
ああ面倒くさい
2018/05/08(火) 12:02:14.08ID:8DKSnjuv
>>706
それが問題になるのは使用済インスタンスが長期間残る可能性が高いデスクトップアプリやサーバーアプリだな
スクリプトは最短距離で目的を達成して速やかにプロセスを終了するのが基本なので使い終わったらすぐにGCやWindowsにリソースをクリーンナップしてもらえるので問題ないんだわ
2018/05/08(火) 12:12:49.21ID:fJWr41VM
>>710
うんうんそれでスクリプト処理で開いたブックは
スクリプト内の処理で捕まったままになって
閉じられずにばんばん開きっぱなしになって残るんだねぇ

ああ恐ろしい
712デフォルトの名無しさん
垢版 |
2018/05/08(火) 12:14:31.83ID:q/XYqxRj
>>710
問題あるって話が書いてあるんやがw
おまえホンマに馬鹿やなw
2018/05/08(火) 12:18:23.76ID:iJTBAWwZ
VBAでもへんな落ち方するとタスク残ったままになるけど何が違うの?
2018/05/08(火) 12:24:26.03ID:LVc4+FR0
>>709, >>711-712
人の話を聞けない人?
>>538程度ならExcelが残ったりしない
あとブックとかのクローズとオブジェクトの解放とかは違う話だからごっちゃにしてる時点でなにもわかってないことがバレバレですよ w
715デフォルトの名無しさん
垢版 |
2018/05/08(火) 12:26:06.82ID:q/XYqxRj
正常に終了しても明示的に解放しない限りCOMへの参照が破棄される保証はない
とゆうおはなしやでw
2018/05/08(火) 12:28:02.90ID:OM34GclB
>>711
は?
スクリプトならQuitが基本だから残らんよ
>>675のように既存のインスタンスに接続したいかつとじたくないという要求があれば残す
それだけ

>>712
ホンモノのバカって検証しないんだよね
少なくとも俺はサーバーでExcel Automationを使うシステムを何度も経験してるが確実なQuitとGCのおかげでリンク先のようなトラブルに煩わされた事はない
何年も安定稼働している実績がある
2018/05/08(火) 12:38:19.90ID:fJWr41VM
>>714
>>716
うんうん
「〜によってファイルが開かれているため、操作を完了できません。」なんてエラーメッセージは
見たこともないんだろうねぇ

大層な10年間だねぇ
718デフォルトの名無しさん
垢版 |
2018/05/08(火) 12:55:25.46ID:q/XYqxRj
>>716
エクセルのインスタンスが残ってもメモリを圧迫するくらいやからな
おまえが気がついとらんだけやろw
そもそもプロセスの終了時にGCは動かんと言っておろうがw
2018/05/08(火) 13:10:03.51ID:iJTBAWwZ
>>717
rubyでExcel操作してるけど見たことない
2018/05/08(火) 13:13:01.29ID:fJWr41VM
これさぁ
よくある処理で読み込み終わったファイルは別フォルダに移動するときに解放されてなかったら一発で終わりだよねぇ

何年間もやっててそういうのに当たらなかったってラッキーだよねぇ
2018/05/08(火) 13:55:31.26ID:PZU+/yxW
こんなクソみたいな言い合いで流されていく質問がかわいそう
2018/05/08(火) 17:48:39.27ID:RLDOeZ1j
>>717, 720
そんなマヌケなエラーはExcel開きっぱなしVBAerの専売特許だろw

>>718
論外

>>721
ログを見るとわかるがVBAerは質問にろくな回答を変えしてない
PSerの方が解答率が高いという意味がわからない状況になってる
VBAerもっと頑張れよ
2018/05/08(火) 18:03:05.92ID:n71fT5S2
PSer VBAer

気色悪い造語まで作ってまぁ。
次は Rybyer か? C#er か?
2018/05/08(火) 18:23:15.70ID:8UeVEK10
PSer(笑)が居なければ皆 質問に答えてくれると思うんですがそれは…
2018/05/08(火) 18:47:27.59ID:0Wckg3pR
>>722
へー
自分がマヌケなのをVBAやってる人に転嫁してVBAやってる人に喧嘩売るんだぁ
VBA自体分からない人がいつまでこのスレで暴れ回って居座っていられるかねぇ
2018/05/08(火) 18:51:24.86ID:RLDOeZ1j
>>725
事実を述べただけなんだよなぁ
727デフォルトの名無しさん
垢版 |
2018/05/08(火) 19:12:51.48ID:xEIBE+xH
PSと言えばポストスクリプト
でも頭の中にあるのはパーフェクトソルジャー
2018/05/08(火) 19:50:54.67ID:nQl5yvJD
>>715
プロセス終了してるのにCOMへの参照?
お前COMの仕組みわかってないだろ w
2018/05/08(火) 19:51:44.12ID:26d0nyKi
築二十年の人ン家へ勝手に上がり込んで、トイレが遠いだのオール電化じゃないだの
床暖房じゃないだの言い募ってるのと一緒だな

ウォシュレットとかIHとかソーラーとかをつぶさに語る前に、自分が居座り強盗並みの行為を
してるのには気付けないのかな  勝手に上がり込んだのはマズイとは思わないのかな
2018/05/08(火) 19:51:54.02ID:nQl5yvJD
>>717
うん、ないよ
それ作り方がヘボいだけだし
2018/05/08(火) 19:55:04.51ID:nQl5yvJD
>>729
むしろトイレが遠くてもオール電化じゃなくても快適だもーん
ってやせ我慢してるだけにしか見えん w
2018/05/08(火) 19:57:51.93ID:rh4JdchR
そもそもお前の家じゃない
2018/05/08(火) 20:07:26.39ID:3X1kagHT
結局VBAの質問スレに何しに来てるんだろうなぁこいつら
所詮は本来のスレで変なことばっかり言って追い出されて
仕方なく居場所を求めて荒らし回ってる口だろうなぁ


ああ見苦しい
2018/05/08(火) 20:52:10.15ID:26d0nyKi
>>731
邪魔だ っつってんの 迷惑だと明言してる 喩えも判らんレベルか
わかりやすい例えにしたらガッツリ食い付いてくるんだな
グレードアップする時は自ら選びにいくわ 助言はその時に求めるわ、みずから
戦後の押し売りか トランクにゴム紐入れて売り歩く寅さんか
面白いこと言って見ろよ、ほら

思わず苦笑いするようなチャチャなら読み飛ばすが、連続居座りは御免被る
2018/05/08(火) 21:19:47.00ID:OdLjkejS
勝手にスレを私物化してるお前も十分迷惑だよ
わざわざ長文で反応してんじゃねえよてめぇも出てけ
2018/05/08(火) 21:44:06.06ID:J/XX4wKL
複数条件が重なるとどういった書き方をするのが良いのかわからず混乱してしまいます、何か良い方法がありましたら教えてください
例えば、変数x,y,zがありそれぞれ1-10までの数字が入る可能性があり、x,y,zそれぞれの値が違うと処理も違います
例えばx,y,zが1,1,1だと処理A 1,1,2だと処理B 1,2,1だと処理Kといった様子です
case文をネストして書いてしまっても良いんでしょうか?
2018/05/08(火) 21:59:14.00ID:SsMGLoTY
>>736
ネスとしてもいいし、if文の条件式のとこにandで複数条件書いてもいいんちゃう
738デフォルトの名無しさん
垢版 |
2018/05/08(火) 22:05:22.53ID:UggVkA90
>>736
言葉通りにとると1000通りの分岐になるけど、
そんなことはないんでしょ?
おおまかなパターンとしてはどうなってるの?
739デフォルトの名無しさん
垢版 |
2018/05/08(火) 22:10:52.74ID:RuTuN8AF
>>736
処理Xがx,y,zを変数として一般化できそうなら頑張って一般化して書く方法を考える

x,y,zによってどんな処理になるか論理的に決定できるなら
x,y,z -> 処理X を返すような関数を先に作って処理ごとにcaseで分岐

論理的に決定できない場合はkeyを"xyz"、valueが"処理X"みたいなDictionaryを用意する

x,y,zの組み合わせごとに処理が全部異なるなら、
index = 1000^(x-1) + 100^(y-1) + 10^(z-1)
みたいにindexを計算してindexごとにcaseで分岐させる
(10^3通りになってありえないケースだと思うけど)

思いつくのはこんなもん
caseネストするのは頭おかしなるで
740デフォルトの名無しさん
垢版 |
2018/05/08(火) 22:15:38.92ID:RuTuN8AF
最後のindex計算するのは意味ねえな忘れてくれ
2018/05/08(火) 22:19:59.22ID:fJWr41VM
>>736
後ろに続く処理次第だねぇ
一つの役割内で短く細かく纏まる分岐ならそれでいいし
分岐先がちょっと大きくて役割も違う処理だったら関数やメソッドにして呼んでやればいいし
根幹部分で大きな処理に沢山分かれるようなら
分岐を行うところも関数化して処理番号を返却するようにして
その番号に該当する関数名を前もってコレクションに突っ込んでおいて
引っ張り出してCallByNameで呼ぶ方法もあるよぉ

他にもあるけどVBAではこのくらいが丁度いいと思うなぁ
2018/05/08(火) 22:27:45.23ID:X/JD7QJy
>>734
> わかりやすい例えにしたらガッツリ食い付いてくるんだな
アホな喩えをバカにされてるだけだろ
743デフォルトの名無しさん
垢版 |
2018/05/08(火) 22:54:19.84
>>736
やりたい処理内容によるけど、こういう書き方をするとすっきり書けるかも

Dim sid As String

sid = CStr(x) & “-” & CStr(y) & “-” & CStr(z)

Select Case True
 Case sid Like “1-1-1”
  Call ProcA
 Case sid Like “1-1-2”
  Call ProcB
 Case sid Like “1-2-1”
  Call ProcK
 Case sid Like “1-3-*”
  Call ProcC
 Case sid Like “[4,5,6]-[!1,2,3]-*”
  Call ProcD
 Case Else
  Call ProcZ
End Select

パターンマッチングの記法はLike演算子のヘルプを見てね
744デフォルトの名無しさん
垢版 |
2018/05/08(火) 23:00:52.76
>>743
あとは、

> sid = CStr(x) & “-” & CStr(y) & “-” & CStr(z)

sid = Format(x, “00”) & “-” & Format(y, “00”) & “-” & Format(z, “00”)
にして
“01-02-03” の形式にしたほうが

sid Like “##-15-##”
sid Like “9#-##-##”

みたいに書けて、より扱いやすいかも
2018/05/08(火) 23:27:07.19ID:J/XX4wKL
皆さんありがとうございます
レス参考に考えてみます

後から小出しに条件変えるのはどうかと思ったんですが、例が少しアレだったのでもう少し状況説明します

x,y,z全て文字列型でxは4通り,yは12通り,zは18通り、後続処理はメール送信です
使用する既定の本文テンプレートのどれを使うかを変数で判定してます
テンプレート自体は8通りで変数の組み合わせによってはメール送信しない場合もあります
ただ規則性はほとんど無く、例ですが1[1-3]1はテンプレA。 1[4-6]1はテンプレB。 171は未送信。 181はテンプレAのようにごちゃごちゃしてます。

ただxが3.4の時は処理がそれぞれ固定の為、早期リターン?で処理を書き、xが1,2の場合は全部羅列しようかと思ってます
2018/05/08(火) 23:35:13.46ID:FrjuwbIK
>>695
いや、貼られたコード見てない。
アホらしいので。

>>699
正にその通り。
しかし、VBAが使われる場面を考えれば当然Excelでやるべき場面なわけ。
君がExcelである必要無いと言っても、仕事では他のExcel文書とやり取りしたり、その処理以外に関数とかExcelの便利機能も使うわけで。
組む処理以外の面でExcelであるべきということはたくさんある。

>>705
Excel起動せずにVBAを動かすのが普通か?

どれも共通してるのはPSやRubyの例はバッチ処理だろうけどVBAで想定されてるのはバッチ処理ではないということ。
あるいはバッチ処理もするけど、それ単体で使われることは想定されてない。
単体で使われる処理"も"書けるけど、Excel使った業務に沿って対応する処理を書けるのは有利だ。
それで、業務に沿ってExcel開いた状態で実行する処理についてはVBA以外だと不利じゃないの?ということ。

例えばADOでDBに繋げて取ってきたデータをそのExcel上でその場で見れるわけ。
もちろんC#とかでExcelを介在させないで組むなんてのもありだがExcelは会社のPCなら誰のPCにも入っているし、別のデータ(当然Excelのデータ)ともやり取りしやすい。
というか、開いた状態で、別のデータも表示されてる状態からのスタートだったりするからやり取りじゃないか。
2018/05/08(火) 23:42:26.20ID:FrjuwbIK
>>707
違う。そういう意味合いで開いた状態について言及したわけじゃない。
実際、VBAで書く処理はバッチ処理じゃなくて今表示されてる表に対しての処理だとか、バッチ処理でも今表示されてる表にバッチ処理の結果を組み合わせたりの場合が普通で、単純なバッチ処理なんて殆ど組むことが無い。
2018/05/09(水) 00:00:09.89ID:Yu+xGlRu
>>746
バッチ処理じゃねーよ
2週ぐらい理解が周回遅れだぞ
749デフォルトの名無しさん
垢版 |
2018/05/09(水) 00:19:49.71ID:w1k9kHe1
なんか「少なくともExcel上では〜」とか縄張り争いみたいになってるね。
自分はExcelに限らずVBA使ってるよ。例えばOutlook。これは常に立ち上がってるから。
Outlookのオブジェクトモデルなんて知らないし、メールとは全然関係ない処理で使う。
イミディエイトウィンドウをシェル代わりにしてワンライナーを書くのさ。
ExcelはIOが多めになったときにシートを使うくらいかな。
バッチ的な処理ももちろんVBAだ。
750デフォルトの名無しさん
垢版 |
2018/05/09(水) 00:35:13.23
>>749
それは個人の趣味の範疇だから好きにすればって感じ
2018/05/09(水) 02:52:59.97ID:fZf43uAK
なんでこんなくだらない話をいつまでも続けてるのかわからないけど
ここはあなた達が何をしてるか発表する場じゃなくて、わからない人が質問をしてわかる人がそれに答える場なので
どれだけ良いコードが書けようがそんな事もわからないんじゃまともな仕事はできそうにないですね
2018/05/09(水) 03:47:11.80ID:wUvS2pdo
>>749
さすがにそれはPS最高君を見習ってもいいぞ
2018/05/09(水) 04:08:41.95ID:DtKw0WOF
連休が終わったら話も終わるだろうと思って見てたけど、さてはお前らまともに仕事してないエアプログラマーだな?
2018/05/09(水) 05:53:37.33ID:SERID1ot
変なのが来たときみんな触るからいけないんだよ
NGIDにしといて誰もレスつけなければそのうち勝手に消える
2018/05/09(水) 06:04:55.40ID:SavMNDDu
>>746
> Excel起動せずにVBAを動かすのが普通か?
だからお前が普通と思うかどうかはどうでもいい
そう言うことをやりたい>>529がいてPSの方が楽に実現できると言う事実があるだけ

> 例えばADOでDBに繋げて取ってきたデータをそのExcel上でその場で見れるわけ。
PSでもC#でもExcel起動して表示したままにするとか普通にできるぞ
まさかそんなことも知らんのか?
2018/05/09(水) 06:57:27.89ID:SERID1ot
>>755
はいはいPSすげーすげー

PSを賞賛するスレとかPSerが傷を舐め合うスレとか立ててそっちでやれや
2018/05/09(水) 07:11:12.83ID:yKqvqHOX
> NGIDにしといて誰もレスつけなければそのうち勝手に消える
>>756はバカと言うことだなww
2018/05/09(水) 07:29:34.49ID:SERID1ot
>>757
馬鹿はすぐ釣れるから困る
コイツもNGIDだな
759デフォルトの名無しさん
垢版 |
2018/05/09(水) 08:48:12.99ID:u9lv0tHz
>>745
スパムメール
2018/05/09(水) 08:50:09.41ID:Yu+xGlRu
どうやらExcel起動してPSで動かすことも可能という事がわかってない奴がいるらしい
2018/05/09(水) 10:13:15.95ID:idFoGogH
>>760
あと、どんなことができますか?
VBScriptみたいにVBA内に記述できるとうれしいのですが、、、
2018/05/09(水) 10:27:49.21ID:Yu+xGlRu
>>761
何を言っているのかよくわからない
VBScriptだったらGetObjectですでに開いてるExcelのインスタンス取得してどうとでも操作できるけど
VBA内に記述????
2018/05/09(水) 11:03:26.74ID:idFoGogH
>>762
いやぁ、VBScriptってCreateObjectでVBE内に直書きできるじゃないですか。
PSも似たような感じで中にかけると便利だなと思って。
PS1ファイルに記述するとして、たとえばExcel内のボタンやEventに割り付けるときって
具体的にどのようにするのでしょうか。
2018/05/09(水) 11:43:28.49ID:Yu+xGlRu
>>763
powershellがcomサーバーに登録されてないから無理だね
WScript.Shellで無理やりできなくもなさそうだけど

ボタンやユーザー定義ワークシート関数とかのイベントハンドラが出てくるときは今のところVBAを使うしかない
以前のレスでも散々言われてるVBAの唯一のアドバンテージ
2018/05/09(水) 11:57:17.22ID:idFoGogH
>>764
なるほど、外のファイルを直接叩くんですか。
中から呼ぶとすると、Shellコマンドで呼ぶ感じですか?

ちなみに管理ユーザ以外でPS1ファイル実行する際、Set-ExecutionPolicyでしたっけ、
これ設定されていない端末では一般ユーザは実行できましたっけ?
2018/05/09(水) 12:10:21.66ID:Yu+xGlRu
>>765
忘れた
そんくらい自分で試すかググれや
2018/05/09(水) 12:22:14.29ID:yKqvqHOX
久々に後釣り宣言なんて見たわ w
2018/05/09(水) 12:25:06.10ID:idFoGogH
>>766
冷たいなぁ。もっとやさしくPowerShell啓蒙してくださいよ。
みんなにおすすめしたいから、わざわざこのスレにこられているんですよね?
Excel操作に詳しいPowerShell関連サイトでおすすめがあったら教えてください。
VBAとの比較とかあるとうれしいです。
2018/05/09(水) 12:26:57.73ID:idFoGogH
>>767
後釣り宣言って?
2018/05/09(水) 12:29:51.31ID:et5rpIq2
>>767
釣り宣言したら釣りにならないだろ?
そんなことも分からないゴミは死んどけ

>>768
PowerShellのスレに行け
2018/05/09(水) 12:31:39.91ID:idFoGogH
じゃぁ、話題を変えてVBAの質問です。
教えてください。
1.4万行の検索範囲セルx1.4万行の検索値の単純マッチングをMatch関数で行った場合、
約36secかかります。これを高速化しようと思い、前者TableをVariant型に投げ込んで
検索したところ、結果120secに延長してしまいました。
配列上で処理したほうがより高速に動くという認識だったのですが、どのように解釈すれば
よいでしょうか?
検索値、値はStringです。
2018/05/09(水) 12:40:19.25ID:3+WmT7VP
>>771
ソートしたか?
2018/05/09(水) 12:43:03.63ID:QVPn4o2T
後釣りの意味がわからないならググれ
どのレスのこと言ってるのかわからないならこのスレを「釣」で検索
2018/05/09(水) 12:56:39.40ID:idFoGogH
>>772
検索範囲を昇順ソートしてみました。結果、、
 ・Cell範囲の場合: 43sec
 ・配列の場合: 127sec
ん? 更に延びた。さっきのはキャッシュでも効いてたのかな?
Stringの中身は "ID-枝番" 書式の文字列です。
2018/05/09(水) 14:17:26.27ID:3+WmT7VP
>>774
検索アルゴリズムをバイナリサーチにしてないんじゃないの?
2018/05/09(水) 15:17:53.88ID:eDrKJyoy
初めまして。共有保護について教えていただけませんでしょうか。
共有保護解除→マクロ処理終了→共有保護設定をする方法を作ってみましたが問題がありました。
「On Error Goto」を入れるとエラー発生→共有保護設定後、一回閉じてまた開くと「共有」が消えてしまう。
色々試したけどダメでした。(「On Error Goto」を設定しないとうまくいく。)

Sub 共有保護解除設定()
Dim x As String:x=1
On Error GoTo myError
Application.DisplayAlerts = False
Application.ScreenUpdating = False
ActiveWorkbook.UnprotectSharing Sharingpassword:="aaa"

Do: Sheets( x ).Delete: x = x + 1: Loop

  myError:

  ActiveWorkbook.ProtectSharing Sharingpassword:="aaa"

End Sub
2018/05/09(水) 18:14:36.75ID:iSDGF1Po
>>776
よく分からんけど
何故にエラーの飛び先をループの中に突っ込むのか
2018/05/09(水) 18:16:21.44ID:moyciPZH
>>765
実行ポリシーにはスコープという概念がある
スコープはマシン、ユーザー、プロセスがある
ユーザー、プロセスの実行ポリシー変更は管理者権限不要
ユーザースコープの実行ポリシーを変更するのがベターだね

>>763
コマンドプロンプトみたいにVBSファイルを指定して実行できるし
スクリプティング環境をComインスタンスとして生成することもできる
直書きというのは何のこと言ってるのかわからんな

需要がないからやったことないけれどexcelのイベントにCLRのハンドラを登録することは可能だよ
オススメはしない
2018/05/09(水) 19:46:24.05ID:wUvS2pdo
>>771
VBAは基本的にシングルスレッドで動く
今のワークシート関数とかは、条件が整えばマルチスレッドで動く

なので、必ずしもVBAの方が早くなるとは限らんのだよ
Match関数がどうなってるかは知らんがな
2018/05/09(水) 19:58:04.93ID:hUIK0iNE
二分探索使ってないとか初歩的なことじゃなく?
2018/05/09(水) 20:43:17.83ID:z3LuxVKv
>>771
Variant配列には何が入ってるかわからんので最適化しにくい
2018/05/09(水) 20:59:13.98ID:HhkRUfwj
このように答えがついても反応しない質問者がよくいるからQA以外の話題で盛り上がる。
ま、興味深い話題ならいいんだけどね。
2018/05/09(水) 21:26:33.65ID:fZf43uAK
>>777
ループの中じゃなくね?
784デフォルトの名無しさん
垢版 |
2018/05/09(水) 21:43:05.88
>>776
ActiveWorkbook.ProtectSharing の後に
ActiveWorkbook.ExclusiveAccess を入れてみれば?

知らんけど
2018/05/09(水) 21:52:15.61ID:idFoGogH
>>778
スコープの件、了解です。
いろいろ試してみます。
2018/05/09(水) 21:53:17.93ID:idFoGogH
>>779
メモリに乗せれば単純に早くなるわけではないんですね。
787デフォルトの名無しさん
垢版 |
2018/05/09(水) 21:55:25.27ID:w1k9kHe1
>>786
配列のマッチングはどうやって書いたの?
2018/05/09(水) 21:57:44.24ID:idFoGogH
>>780
Match使うときはたいてい絶対一致でつかってました。
クロスマッチになっちゃうんでしたっけ?
ここのカキコみて、以前、高速Lookupは使ったことがあるのですが、、
半分うろ覚えです。
リストを昇順ソートして、第3引数を 1 にするだけじゃ
だめですよね。変な答えが返ってきます。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況