Excel VBA 質問スレ Part82at TECH
Excel VBA 質問スレ Part82 - 暇つぶし2ch741:デフォルトの名無しさん
25/05/18 14:10:27.89 JTwWUl1C.net
>>725
MSの推奨は最初にまとめて宣言
チームでやるならみんなに合わせる
個人的な作業ならどっちでもいいけど、途中で方針を変えるとあとで混乱するからどっちかに決めて一生変えないこと

742:デフォルトの名無しさん
25/05/18 14:47:49.53 qr58bPvk.net
>>723
この馬鹿、答えを教えてもらってもネチネチやってるのか
馬鹿はこれだから
消えろや

743:デフォルトの名無しさん
25/05/18 17:14:14.05 9lhlIUdU.net
>>725
VBAにブロックレベルのスコープはないからどっちも同じ
オレの好みは読みやすさ重視でループ内に書く方だが
プロシージャ内の2つのループで同じ変数名を使いたい時
ループ外で宣言しないといけなくなって打ちひしがれる

744:デフォルトの名無しさん
25/05/18 19:26:33.94 NiGvaOOd.net
真円を印刷したら楕円になって発狂したの思い出したわ
どうやって解決したかは昔すぎて覚えていない

745:デフォルトの名無しさん
25/05/18 21:45:07.54 JeO/PtYk.net
>>727
>>729
参考になります…!
ループ内の宣言コストとかはあんま気にしなくてもよさそうな感じなんですね(オブジェクト除く)

746:デフォルトの名無しさん
25/05/19 00:29:53.41 aSNuw95p.net
変数3、4個のプロシージャだったら変数の宣言しなくていいよね?
プロシージャが動いてる時だけメモリ消費するってことでいい?

747:デフォルトの名無しさん
25/05/19 00:49:32.05 nyMkteHn.net
>>732
Option Explicit しなさい
しないと、変数のタイプミスで簡単にバグる

748:デフォルトの名無しさん
25/05/19 03:01:33.66 xZYpAeMM.net
>>732
たとえ宣言してあっても、メモリ上に変数領域が確保されるのは実行中だけだよ
ただし宣言しないと全部Variant型にされるからメモリ効率も実行効率も悪くなる、と言っても体感はできないけど

749:デフォルトの名無しさん
25/05/19 06:06:52.71 WEB+3jSu.net
>>730
図形の事に全く詳しくないから間違っているかもしれませんが、セルに合わせて伸縮したり、移動したりするのを無効にするのでしょうね

750:デフォルトの名無しさん
25/05/20 02:20:44.35 vmioRAc9.net
ListView,TreeView入れて作ったら、大半の人がOffice2013 64bit使ってて動かないことが判明したんだけど、どうしよう

751:デフォルトの名無しさん
25/05/20 06:15:30.63 J92IpVQ8.net
作りなおす

752:デフォルトの名無しさん
25/05/20 07:27:24.89 QvUhVdYo.net
ん? 2013にはそのview無いってこと?

753:デフォルトの名無しさん
25/05/20 07:40:50.77 QuREz4IK.net
32bitと64bitの互換性が無い Verが違う 今時2013つこてる方がキケンがあぶない
相手の環境を再現できるマシンを入手してそれで作り直す
がんばって自作する URLリンク(qiita.com)

754:デフォルトの名無しさん
25/05/20 08:58:00.71 QvUhVdYo.net
あぁ、なる
昔大量にフォーム移行する時に、定義を一覧に出して、それを元に再構築するの作ったような記憶…
おそらくサイズ変更に合わせてフォントとかも変えたのかな…

755:デフォルトの名無しさん
25/05/20 10:20:21.64 4cRKMiEn.net
きちんと動作環境を明確にする
クライアントと打ち合わせる
上司や営業に相談する

756:デフォルトの名無しさん
25/05/20 14:46:51.76 E4QmPhp5.net
2019ですら化石レベル化してるのに2013とはな

757:デフォルトの名無しさん
25/05/20 16:17:35.03 0n1WQM2u.net
2013がどうってんじゃなく使うDLLが違う
使用するべきDLLが32bit版か64bit版か判断するコードが要る

758:デフォルトの名無しさん
25/05/21 10:53:43.66 va6/rMba.net
Excel2013が危険なのには同意だけど
Excel2013/64からListView,TreeView/32を呼ぶのは無理ってだけで
Excel2013/64からListView,TreeView/64を呼べたら使えるんじゃね

759:デフォルトの名無しさん
25/05/21 11:32:04.49 gg1Rd+aD.net
所詮、ActiveXコントロール(ocx)だから
カレンダーコントロールと同じ運命を辿るような気がするけどね
必死に工夫して汗水流して作り上げても、寿命が風前の灯火で数ヶ月後には利用不可とか

760:デフォルトの名無しさん
25/05/21 12:10:27.12 ZnDW2hJE.net
使用者、要望者のオーダーメイドでマクロを作成しても、これは嫌だ、あれも嫌だ、と言われるならなにも作る事は出来ない
脱Excelといって、既製品の業務ソフトを導入しても絶対不満しか出てこない
脱Excelの現実を知った気がする
そして全ての要望を取り込んで作成したマクロが属人化した闇Excelファイルなのだろう

761:デフォルトの名無しさん
25/05/21 12:16:44.55 np4mB3oN.net
嫌かどうかで仕様を決めていると大変だろうな

762:デフォルトの名無しさん
25/05/21 13:16:57.81 gg1Rd+aD.net
>>746
そういう、いかがわしい新興宗教にのめり込んだ人のような発言はそろそろ控えたら?
書いてることが支離滅裂だよ?

>オーダーメイドでマクロを作成しても
 要望通りでダメなら、どこをどう改善すればいいかじっくり話し合いの機会を持てばいいだけ
 作成したと言い切れるのは、試作品を改良改善した末に仕上がったものに対して使う言葉
>これは嫌だ、あれも嫌だ、と言われるなら
 事前の要件や仕様を満たして無いんだろ? 打ち合わせの時に聞くだけの態度で居たとかで
 その制作物が仕上がった時の概要がじぶんのアタマの中にできていないからそういう事態に陥る
 経験不足もあるだろうし打ち合わせが打ち合わせの体を為していなかった、てだけ
>絶対不満しか出てこない
 その業務アプリに移行しましょうと先導した人間の責任 流行りの言葉なら任命責任
>全ての要望を取り込んで作成したマクロが属人化した闇Excelファイル
 これがまったく理解不能 属人とか闇とか言いたいだけちゃうんか、と
 そんな発言に賛同してくれるのは、あんたがた宗教の身内だけ

763:デフォルトの名無しさん
25/05/21 13:20:09.77 a2F5EjYc.net
TreeViewなどにはライセンスの問題もあったような

764:デフォルトの名無しさん
25/05/21 13:24:41.83 4tKBDgn4.net
顧客も打ち合わせしても話し通じないならAIと打ち合わせしてコード出してもらった方がいいってなるよな

765:デフォルトの名無しさん
25/05/21 13:28:08.25 RMq3dtvy.net
ぶっちゃけシステムなんてそんなもんだよ
コンサルや名の知れたSIerに頼んだって必ず不満は出るし、結局使い物になりませんでした、なんてことも珍しくない
ただし、VBAはユーザー側の人間が作ることが多いので、SIerみたいに「要件定義で決まった通りです」で逃げるわけにもいかないんだよね

766:デフォルトの名無しさん
25/05/21 15:22:55.64 r/haQ8U2.net
仕様変更に合わせて納期も延長でいいんじゃね

767:デフォルトの名無しさん
25/05/21 17:20:56.31 RhMOdQAE.net
だいたい配布前提で整備したコード書けば属人化なんてほぼしないわけで
取り込む要望も無理にまとめず適度に分割してやればいいし
敵に抵抗できないコミュ障コーダーが悪いまである

768:デフォルトの名無しさん
25/05/21 17:33:31.94 7nPavp7R.net
>>753
属人化の根源はコードそのものじゃなく脳内にしかない仕様だよ
コードからwhatを読み取れないから属人化する

769:デフォルトの名無しさん
25/05/21 17:33:52.05 7nPavp7R.net
whatじゃない、whyだな

770:デフォルトの名無しさん
25/05/21 17:42:23.76 RhMOdQAE.net
根源とかどうでもいいんよ
VBA少しできますくらいの他人が
適当にメンテしながら使っていけるコード書けって話でしかない

771:デフォルトの名無しさん
25/05/21 18:08:10.91 7nPavp7R.net
>>756
配布前提で書いたコードだろうと属人化するって話だから、
メンテしながら使おうが属人化はするよ

772:デフォルトの名無しさん
25/05/21 18:16:53.95 HDnlDCyv.net
こんげんかせんといかん

773:デフォルトの名無しさん
25/05/22 07:49:16.16 ZB7yrtfi.net
Excel属人化教の方々は、その属人の定義をして欲しい
属人の何がいけないのか? 全員が同じレベルに成れと言い募ってるのか?
フルオープンにしてコード見れば説明書に成ってる程の成果物を作れと言ってるのか?
それとも、いけない事は無いがただ単に属人って言葉に魅了されて使ってるだけなのか?

774:デフォルトの名無しさん
25/05/22 07:59:10.35 ZB7yrtfi.net
WhyやWhatが読み取れないからメンテ出来ない ってんなら、じぶんのWhyやWhatで作り直せばいい
それを持ってた奴が前作を作ったんだしそれが使えてきてたって事実は変わらん
おれにはできねえってんなら、前任者より能力が劣ってるということになるし、才能ある奴を
新たに採用するように働きかけする必要がある
シン成果物を作れる能力あるなら、前任者をつべこべこき下ろしてる時間はムダでしかない 成果物-1.0でもいいけど

775:デフォルトの名無しさん
25/05/22 08:28:50.00 cWZ2SmFA.net
>>760
書き間違えたのは申し訳ないが


776:、whatはコードから読み取れるんよ whyは何故その処理をしているか?何故その方法を選んだか?何故そのアルゴリズムなのか? それら意図を完全に示す術はない コメントを残せって言われるのはつまりwhyを残せってこと whyを知らなければVBAに限らず、言語にも依らず、 あらゆるものごとは属人化する 属人化は必ずしも悪ではないけれど、 昨日の自分は別人ってことを鑑みれば効率が悪いことは明らか



777:デフォルトの名無しさん
25/05/22 08:29:26.28 uEqc52DQ.net
数年後の自分がメンテできるように作ればOK
人の能力はマチマチ、まだいない後任者のことを考えてもしゃーない

778:デフォルトの名無しさん
25/05/22 08:42:19.33 cWZ2SmFA.net
属人化はリスク要因となりえ、VBAは属人化する蓋然性が高いってことをわかった上で許容するのと、
わからず使う・属人化しないと信じて使うのとは大違いって話をしているに過ぎない
能力だの才能だの、シン成果物だの成果物-1.0だの、
手も頭も動かさない奴の言葉遊びほど虚しいものはないな

779:デフォルトの名無しさん
25/05/22 08:49:14.19 iwrIvlAH.net
属人化教なんて言葉を使っている時点で、もう何を言われても属人化の弊害なんて絶対認めないぞっていう雰囲気をぷんぷんさせているじゃない。このスレだけで何回この話題やるの?
一般に言われる業務の属人化というのは、特定の人がいなければ業務が回らない状態のことで、当該特定の人が休んだり退職したりしたときに業務が止まってしまうリスクがあることから好ましい状態ではないとみなされている。会社側としては業務内容を把握する従業員を複数人にしたり(1人に依存しない)、マニュアル化したりすることでリスクを低減化するのが通常の対応。
VBAはコード作成も実行もExcelだけでできるという特徴があり、このVBA固有の事情により、?専門のプログラマーが作成するコードに比べて一般にコードの質が低い、?会社側が把握しないうちに業務にコードが使われるという事態が生じがち。属人化の弊害が、特にVBAについて言われることが多いのはこれらの事情によるところが大きい。
要するに会社側から見て、属人化リスクを低減化する機会自体がなかったり(上記?)、コストを掛けて属人化リスクを低減化するほどの価値が見出せなかったり(上記?)というケースがVBAの場合には少なくない。
VBAがアイデンティティになっちゃっている人にはどう説明しても理解しないだろうなと思いつつ、一応説明するとこういうことね。しかし、属人化の弊害を否定したがる人って、見事なまでに会社側の視点が抜け落ちているのね。担当者個人の視点で、業務が多少効率化できるのならそれはいいことだという発想から出発してそこから一歩も抜け出ないのならそりゃ議論も噛み合わんわな。

780:デフォルトの名無しさん
25/05/22 08:52:23.13 cWZ2SmFA.net
>>760
才能ある奴wがマニュアルをじぶんのWhyやWhatで作り直して大惨事になった、
東海村JCO臨界事故ってのもあったな

781:デフォルトの名無しさん
25/05/22 09:12:43.00 ZB7yrtfi.net
Excelは属人化しやすい だからExcelで効率化を図る場合には、それに関わる部署・チーム・グループが
一丸と成ってそうならないような対策を施さなければならない 今後、対策されていない自動化は禁止する
とかならまだわかる
Excelは属人化ガー VBAは尚更ー を連呼してるだけで、何の生産性向上に繋がるんだ?
アタマがひどく悪い一族に至っては「だからVBA禁止」のお触れまで出す始末

問題発生しないよう努力する必要もあるし、問題発生したらすぐさま対策を講じなきゃならないのは
何もExcelに限らんだろうに
とりわけここ20数年で急に変遷進歩し続けてきてしまったPC作業に取り残された奴らの繰り言に近い
そんなだから失われた40年とか揶揄されちまう 先を見て向上心持ってもっととんがらないと
VBAに問題あるなら、それを解消することに全身全霊で打ち込みゃあいいだけ
何の解説者だか評論家気取りだか知らんが、悪いものを悪いと言う事なんか阿呆でもできる 悪い処は直し続けるてだけ

782:デフォルトの名無しさん
25/05/22 09:31:16.38 cWZ2SmFA.net
>>766
属人化を悪いって言ってるのはあなた自身だろ
俺は属人化を悪いなんて言ってない
属人化を問題だと思うなら解決すべきなのはそりゃそうだし、
解決策の一つとしての全面禁止だって、俺なら選ばないけど理解はできる
属人化が何故生じるのかを議論することは、それを解消することにも繋がる
属人化する/しないの幼稚な二元論でまとめようとするのは、
頭を使ってない・使えないことをひけらかしてるに過ぎないよ

783:デフォルトの名無しさん
25/05/22 09:35:02.46 mUoHJ/op.net
従業員目線なら、属人化はイコール自分への依存度で価値だから、そりゃ手放さないわな

784:デフォルトの名無しさん
25/05/22 09:40:52.16 cWZ2SmFA.net
会社をプロフェッショナルの集まりだとすれば、
結局のところ仕事自体がどこまで属人化を突き詰められるかだから、
しょーもないことを属人化すんなって話なだけ

785:デフォルトの名無しさん
25/05/22 09:46:17.63 ZB7yrtfi.net
念仏唱えてるだけで、一向に前向きに対処しない・対策しようともしないバカ共を嘲って「教」を付けてる
属人の意味を、じぶんの中で咀嚼・消化してない/しようともしないで、ヨソで聞き齧った言葉をなぞってるだけ
「前にならえ・右にならえ」がDNAに刻み込まれてるこの国の人間にゃあ、それが心地いいのかも知らんが
誰がやらなくともおれはやる ぐらいの気概が欲しいところ

と書くと、内容読まずに言葉尻だけ捉えて「それが属人化に繋がる要因だろ!」とか言い募る奴が居そうだが
オープンな属人化なら大いに結構だろ ←これも語弊がある物言いだがw
オープンにする努力を怠るな、と言ってる 制作する側もそれを使って効率を上げようとする集団も 共有ってそういうもんだろ
そのグループ・集団は同じ目的(収益の向上)を持った集団のハズなんだ その目的達成の方にこそ目を向けろ
足引っ張って他人の粗探ししてつべこべ文句言ってるだけじゃあ、そのうち滅びる

786:デフォルトの名無しさん
25/05/22 10:05:21.01 cejl8MgF.net
>>760
時間が無限にあるのが前提ならそうだね

787:デフォルトの名無しさん
25/05/22 10:07:32.69 cejl8MgF.net
>>765
あれ実はノーベル賞もらえるレベルの改良だよな

788:デフォルトの名無しさん
25/05/22 10:23:06.55 bEEUFRBb.net
>>765
裏マニュアルとは別の?
ググっても分からなかった。

789:デフォルトの名無しさん
25/05/22 11:03:11.01 j+nxGcrc.net
質の低いコードを公開されたって迷惑なだけなんだって。VBA命の人は、まさに収益向上の観点からVBAはメリットより害の方が大きいと判断する会社が少なくないってことをどうしても受け入れられないみたいね。
VBA = 生産性向上・業務効率化という無邪気な信念を持っているみたいだけど、多くの会社はVBAをそのようには


790:評価していない。会社が本気でコードによる生産性向上・業務効率化をするつもりなら、どのような言語を選定するにせよ継続的な管理コストは必要になるわけだけど、それならVBAではなく、もっとちゃんとした言語でやりたいというのが普通なわけ。非プログラマ社員の内製VBAの改変履歴を管理したり、マニュアル作ったりなんてしたくないのよ。



791:デフォルトの名無しさん
25/05/22 16:37:21.75 ZB7yrtfi.net
さすが >>774を取るだけの素質を持ち合わせた人間の発言だなw
ExcelVBAスレでExcelVBA不要論を、あまり意味の無い言葉を並べ立てて講釈するとは
内製であれ外注であれ、その業務を賄うにはExcelで充分という案件は想定して無いだろ?
そういう案件に限ってという前提ならExcelVBAでいいじゃないか
ダメな理由を語りたいがためだけに持ち出した事例が、一向にその役目を果たしてない
どんなコードだろうと「質が低い」と判断できる能力を持ち合わせてるんなら、それを
ブラッシュアップするなり作り変えるなり その方が百万倍コストの面でメリットだろうに

どんな大袈裟なプロジェクトと比較してンの? んで、それ比較する意味あンの?
あんたの中ではあるのかも知らんけど、世間一般では無意味だ とおれは思うよ

792:デフォルトの名無しさん
25/05/22 17:36:10.44 cWZ2SmFA.net
>>775
少なくないってのを100%と解釈してるのか?
ダメだと判断する会社が多いってだけで、
良いと判断する会社が無いなんて書かれてないぞ
変なバイアスかけてレス読んでる様に思える
んで、ブラッシュアップなり作り変える(替える?)ことのどこにコストの優位性があるんだよ
無駄なコストを支払ってることに気づけないような奴が、
他人の発言の意味の多寡の判断なんてできないだろ
可か不可か、良いか悪いかみたいな単純な話にしないと理解できないポンコツ自慢はもうやめてくれよ

793:デフォルトの名無しさん
25/05/22 17:36:37.38 Fv3bLhDj.net
Excelで十分かどうかというのはあまり意味のない尺度だと思うけどね。
Excel VBAの案件って既存物のメンテを除けば基本的に現状ワークシート等での手作業を省力化したいというものだから、
そりゃExcelで十分に決まってる。元々人力でできる程度に細分化された業務なんだから。
VBAが批判されるのは、まさにそういう個別最適化の積み重ねによって細切れ(≒属人的)で非効率な業務プロセスが保存される傾向があるため。

794:デフォルトの名無しさん
25/05/22 19:51:20.63 RAnqaH1V.net
多くの会社から見て業務でVBAを使ってもトラブルが起きにくいパターンというのは主に2パターンあって、①重要なコードだが、何らかの理由で他の言語が使いにくい事情があるため、専門のプログラマに頼んできちんとしたVBAコードを書いてもらう場合。この場合、当然、VBA社員の出番はない。要するに、通常のシステム開発と同じだが、特定の事情により選定言語がVBAになるケース。もう一つは、②あまり重要な業務ではないので、質の低いコードでも構わない場合。個人の裁量の範囲内でVBAの使用を認める会社というのはこっち。要するに個人で責任を取れる範囲内なら、会社は管理コストを掛ける必要もないし、担当者の裁量でVBAを使うことを禁止するまでのことはしないくても良いのではないかいう発想。それなりに合理的ではある。

逆にいうと、上記①②いずれにも当てはまらないような使い方は、会社からするとリスク・コストを感じやすい。個人の裁量の範囲を超えて、非プログラマの書いたコードを業務に使用するような場合とかね。書いた本人はコードをオープンにしてブラッシュアップすれば良い、コストの面でも有利だなんて無邪気にのたまうけど、会社からすればそんな価値の低いものに管理コストを掛けたくない。仮に継続的な管理コストを掛けるならもっと価値のあるものに掛けたいわけ。はっきり言えば、新しく書き直すときでさえそういう既存のコードなんかない方が良い場合も多い。業務に使われている既存のコードがあるとなれば、どんなに酷いものであっても一応読まないわけにはいかないからね。

非プログラマの書くコードという括りで論じる限りは、Excelで十分な業務というより、低質なコードで十分な業務かというのが基準になるかな。それだって会社の方針次第だが。会社が全面的にVBAの使用を禁止しているような場合もあるからね。

795:デフォルトの名無しさん
25/05/22 21:02:03.17 aXwvtPcZ.net
VBA禁止な
reg add "HKCU\SOFTWARE\Microsoft\Office\16.0\Excel\Security" /v "VBAWarnings" /t REG_DWORD /d 4 /f

796:デフォルトの名無しさん
25/05/22 22:58:58.92 zdx+eNOi.net
名前付き引数省略は害悪。全てキッチリ書け

797:デフォルトの名無しさん
25/05/23 08:26:51.53 oLOrCYhj.net
「多くの会社」を、それぞれが想定してる規模が違うような気がする
経産省のサイトを参考にすれば、商工業それぞれの規模から比較したら
小規模(社員数20人以下)のが俄然大半を占めてる(かつては零細と呼ばれてた)
製造業は九割に近付く勢いだし、小売業や飲食業も八割、卸売業は五割程度だが
「多くの会社」とひとまとめにする場合は、これらを指すのでは無いのか?
社員数2,000名以下の中規模とかをもって「多くの会社」と呼び為してる気がしてならない
小規模は、持ち合わせてる武器で戦うのがいちばん効率的なんだが
持ち合わせてるExcelだけで戦えるなら、それをフルに活用しない手は無いだろうに
その実態を知ったうえで「多くの会社」と書いてるんだろうか

798:デフォルトの名無しさん
25/05/23 09:06:27.49 RtFNfP1s.net
人手に余裕のない小さい会社こそ差別化要因にならない業務にはSaaS使うべきなんだよ
SaaSは企業規模に対する課金が多いため、むしろ小規模な企業の方がコスト効率も良くなる場合が多い

799:デフォルトの名無しさん
25/05/23 10:16:56.42 38AbBGg0.net
VBAの属人化リスクの議論って、むしろそういう小規模な会社こそが最も意識すべきことでしょ。中規模以上の会社なら、そもそも低質なVBAコードに業務を依存させるような間抜けなこと自体があまりないだろうし、仮にそういう事態を生じさせてしまっても、最悪追加コストで何とかできなくはない。
小規模会社には、VBAを「効率的」な「武器」だと思いこんで飛び付いて、必要な管理もしないまま「フルに活用」した挙句、にっちもさっちもいかない事態にしてしまったところが少なくなかった。その教訓としてVBAの属人化リスクが意識されるようになったんだよ。
「武器」にならないとまでは言わないが、そんなに大したものではないし、トータルで見れば「効率的」でもない。好んで「フルに活用」するようなものでもない。そういうVBAの等身大の実像が会社サイドに把握されるようになっただけの話。

「小規模は、持ち合わせてる武器で戦うのがいちばん効率的なんだが
持ち合わせてるExcelだけで戦えるなら、それをフルに活用しない手は無いだろうに」(>>781
多くの会社はこの後半部分が幻想に過ぎないことに既に気付いているが、VBAerには未だにこの幻想にしがみついている人が居るということ。

800:デフォルトの名無しさん
25/05/23 13:22:41.57 oLOrCYhj.net
>必要な管理もしないまま「フルに活用」した挙句、にっちもさっちもいかない事態にしてしまったところが少なくなかった
ここの事例を具体的に読ませてくれるサイトとかあるん? 統計とか?
文末を「・・してしまったところはほぼ無い」と書き換えてどっかで紹介して、それを鵜呑みにした読者がヨソでお披露目しても
気付かれないでしょ? おソースプリーズな言説

判り易く例として社員20人だとして、事務要員4人は


801:規模に対して多い 大抵は現場と掛け持ちで4~5人ならまだ普通 事務専任で1~2人なのが一般的な見立てだろうと思う そのうち一人が丹精込めてVBA育ててたけどあいにく辞めた 他の人間は便利に使わせてもらってたけど、いざ辞められたらVBAだれもチンプンカンプン ならまだ有り得る だからって、それが直接「だからVBA禁止!SaaSに移行!」って成ると頑なに信じてる?それ薦める? 小規模なら小規模なほど環境の変化を嫌うんだ あるものを何とかして使い続けられるならそうしたいってのが人の世の常 多少の手直し必要に成って助力が必要な状況なら、コネ使うなりしてでもそのものを使い続ける工夫に走る タイミング良く同質のものを安価で提供できる業者とかが出てきて、それのサポートも請け負ってくれたりしたなら ソッチに移行していくことはあったとしても、未知のサービスに賭けて投資してそれが自社の実態に即さなかったら 目も当てられない そっちのがリスキーだしその費用は丸々損害に等しい(授業料てか どこの会社も業種が一緒なら業務も一緒だと思ってたら大間違いで、その会社独自の仕組みを持っていたりする それに即して自在に加工できる道具として見ればExcelほど便利なものは無いのも事実 上では商工業を書いたけど、他にも建設、運輸・運送、士業えtc あらゆる業界で現実にExcel VBAが幅広く活用されてる 現実を鑑みても「ExcelのVBAは属人化しやすいから禁止」を言い張って止まないンなら、言い続けてりゃいいけどさ 書かれるたびにおれがしゃしゃり出てつべこべ反論してりゃいいんだろうし



802:デフォルトの名無しさん
25/05/23 13:35:20.91 +XeHUCKJ.net
どのように属人化するか・どの様に防ぐかの話題から、
属人化対策として禁止するか否かの話に

803:デフォルトの名無しさん
25/05/23 15:19:50.38 eOaMEV2I.net
最後に 知らんけど ってつけた方がいいんじゃんね
知らんけど

804:デフォルトの名無しさん
25/05/23 15:21:21.07 mEX1XvmT.net
>>784
他の手段と比較してどうかはともかく、事実としてVBAが問題を起こすことが多いからあんたに仕事があるんだろ?
だったら属人化万歳くらいで流しときゃいいのに、いちいち突っ掛かってたら余計なストレスを作るだけだぞ
心配しなくても、あんたが顧客としているような会社は、全体最適云々を語るコンサルやシステム屋は相手にしない
まあSaaSについては結構小さいところもわりと積極的に営業するから敵になるかもね

805:デフォルトの名無しさん
25/05/23 15:53:12.83 dHvUhuhP.net
長くてわかりにくい
スパゲッティ文章はやめろ

806:デフォルトの名無しさん
25/05/23 16:24:52.89 oLOrCYhj.net
うん、途中からどうも話が噛みあわないな、とかは思っていた
ひと頃「ExcelのVBAは属人化しやすいから禁止する企業が増えてる」とかのたまう輩が徘徊してて
おま、それ、何もExcelに限らんだろ っつー意味で反抗してたし、そんなアホ論をこのスレで
平気で吹聴してる奴に向けて言葉のげんこつしてたんだけど どっか行っちゃったんか?
所詮、世間は、世の中は属人三昧だろ? それで右往左往世界が悪い方向に向かってる実例を
まざまざと目の当たりにしてる真っ最中だろ? で、それが悪かどうかなんか、もう少し様子を
見極めなきゃいけないまである
なんでわざわざこのスレをターゲットに、VBAは属人化!!!とか言い募らなきゃならん?
どこの回し者だ?、と

細かいこと言えば、じゃあってんでこれでもかっつー関数並べ立てて複雑怪奇な数式を組んだ
WorkSheetはどうなんだ? 属人化の極みだけどそれはいいのか? 見た目xlsxならおkなのか? と
至るスレで属人化!属人化!!属人化!!!と連呼してるならまだわかるが、なんでExcelスレ限定

で、こないだ別件で「Excel 売上管理」とかでネットをモゾモゾしてたら、そこら中の売上管理アプリの
宣伝サイトが、形ばかりのExcelのサンプル載せて「しかしExcelは属人化」っつー文言を決まり文句の
ように添えてたんだ ははぁ~ん、とね、ある意味腑に落ちたし別の意味でがっかりしてたんだ
言い募る連中が自分の言葉でその悪弊を語れなくて「ネット見ろ」とか返すしか能が無かった理由が判明
そんなサイトだけじゃ無いのは承知してても、結局自分の意見として主張してンじゃなくて、受け売り
余所で聞きかじったのをなぞってるだけのレベルなんだな、と

しかし、少なくともこのスレに居続ける人間なら、ExcelのVBAで効率を図ることに意欲的であって欲しい
他のがいいよ、って奴はその宣伝だけして書き逃げしてて欲しい
まだまだExcel もっともっとVBA であり続けることが、このスレの健全化に貢献するはずなんだから

すぱげってぃwww 読み飛ばせばいいじゃんか 読んでくれなんて頼んで無いぞ?

807:デフォルトの名無しさん
25/05/23 16:44:22.04 HIpPOdnz.net
スレタイ

808:デフォルトの名無しさん
25/05/23 16:53:05.49 fshmIkkH.net
xlsmって唐突に未知のウイルスの疑いのあるファイル扱いになったりする事もあるから何も知らない人は扱うのが怖いかもね

809:デフォルトの名無しさん
25/05/23 17:18:49.63 4lmOgu2G.net
VBA職人が揶揄されるのも分かるわ。
ところで、仮にVBA職人、Ruby信者、Haskell信者、Rust信者で比べられたら、やっぱりVBA職人が圧倒的に格下扱いされちゃうのかな。ちょっと悲しみ。

810:デフォルトの名無しさん
25/05/23 17:28:32.52 U7YdU8g0.net
VBAがそれらと同列に比較されることはないから互いに眼中にないと思うよ
Excel VBAはピボットテーブルとか分析関数とかと同列の、Excelの上級スキルの一つに過ぎない
一般的なプログラミングとは別物
そのへんのエンジニアより、むしろBIツールがメインのデータアナリストなんかの方がVBA意識してるよ

811:デフォルトの名無しさん
25/05/23 17:34:04.21 4lmOgu2G.net
なるほど、そんなものかねぇ。

812:デフォルトの名無しさん
25/05/23 17:39:18.56 +XeHUCKJ.net
>>789
文意の分からん文章書いてて噛み合わないもクソもないだろ
伝える気ないなら書くな
読ませる気無いなら書くな
話を曲解して変な方向に話を誘導してるのはあんた自身だ

813:デフォルトの名無しさん
25/05/23 18:31:41.70 5vSRBrjF.net
言語にすぐ上だ下だ騒ぐ奴いるからな

814:デフォルトの名無しさん
25/05/23 18:59:01.81 BlARSTzn.net
言語じたいは下の下
反論する奴すらいない

815:デフォルトの名無しさん
25/05/23 19:12:24.88 K4ioF38n.net
構文として最低限どんなものがあって欲しいかっていうのは人によって違うからねぇ。いまは、JavascriptとかPython辺りが平均的なラインなのかな。まぁ、関数型言語等のユーザーから見ればJavaScriptとかPytnon辺りでも足りないものだらけということになるんだろうし、VBAでも慣れればそんなに不自由ではないよという人も大勢いるわけだしね。

816:デフォルトの名無しさん
25/05/23 19:54:42.34 ybuGJY2P.net
C言語育ちのワイ、VBA始めた頃「えっ、ポインタってどうやって使うの?」って戸惑った思い出
自分の仕事が楽になる�


817:p途で使いまくってるからまぁ属人化しまくりだけど、 自分が退職した後(2年後)は知らんと思っている



818:デフォルトの名無しさん
25/05/23 20:17:02.36 dHvUhuhP.net
この辺がつらい

・tryがない
・for eachがバリアントのみ
・continueがない

819:デフォルトの名無しさん
25/05/23 21:01:05.99 61koEGUg.net
まぁ、なければないで何とかやっていけるもんだよ。
このスレではそう言っておくのが無難。

820:デフォルトの名無しさん
25/05/23 21:05:52.61 fxCKrz9G.net
>>799
C言語にはfor eachがない、なぜならもっと原始的、シンプルな言語だからってCopilotに聞いたのですが本当なのでしょうか?

821:デフォルトの名無しさん
25/05/23 21:21:09.60 eG6EJpyW.net
>>802
ポインタに++すれば次の要素になるからむしろCのほうが融通が効く

822:デフォルトの名無しさん
25/05/23 22:01:59.52 ai481srR.net
4行以上のレスは読む必要無いってマジだな

823:デフォルトの名無しさん
25/05/23 22:09:05.20 4KSUIwLz.net
ぬるぽ

824:デフォルトの名無しさん
25/05/23 23:17:20.35 fxCKrz9G.net
>>793
データアナリストならパワークエリーしてほしいな

825:デフォルトの名無しさん
25/05/24 06:17:34.64 OSW0csek.net
属人化し易い言語と言うことは融通の利く言語と言うことでもある。
例えば、CやC++ではポインタが使えたけどC#では「それは危険だ」ということで使えなくなってしまった。
代わりにデリゲートを使ってセーフティーに参照しなさい、ってことなんだろうけど、まぁお仕事用の開発だったらそれでもいいのかもしれないけど、
昔PS-VITAってゲーム機があって、これがエクスペリアってスマホとクロスプラットフォームで開発できるように開発言語をC#にしてしまった。
ポインタは確かに参照先間違えると吹っ飛んだりメモリリーク起こしたりと危険なものではあったけど、扱いが面倒ではないし融通の利く機能だった。
それを潰してしまったことがPSPシリーズがVITAで終わってしまった原因ではないかと今でも思ってる。

826:デフォルトの名無しさん
25/05/24 06:41:52.12 OSW0csek.net
>>798
JavaScriptをやったときには
前から.Net系の言語や、まぁVBAでもそうなんだけど、
何でクラスのインスタンスや文字列とかは変数に入れられるのにメソッドは入れられないんだろ?
って思ってた時期があって、
JavaScriptに当たったとき、
あ、出来る言語もあるんだってなって、あれVBAに欲しいなぁとは思った。
後はスクリプト系の言語はスカラー変数で型の指定がないから型の指定に慣れてると逆にそれが面倒だったかな。
VBAで言えば全部Variantで扱ってるようなもんだし。厳密には違うらしいけど。

827:デフォルトの名無しさん
25/05/24 10:35:16.26 sJ/mZ3mU.net
若いコにはやっぱPython辺りが人気とか?

828:デフォルトの名無しさん
25/05/24 13:44:59.73 3VNn3d5Y.net
スピル周りやLET,LAMBDAなどの関数が充実し
Excel=ビジュアルな関数型言語だと勝手に思っている

829:デフォルトの名無しさん
25/05/24 14:39:09.90 a4AdJqTs.net
ビジュアルな関数型言語はemacs-lispだろ

830:デフォルトの名無しさん
25/05/24 15:44:49.02 0gUvgwlc.net
表検索するのにSQL使ってたけど、FILTER覚えたら単純な検索ならこれでいいかー、ってなった

831:デフォルトの名無しさん
25/05/24 20:17:19.55 c7V+L981.net
このスレはバカの話はなぜ長いのか考えるスレになりました

832:デフォルトの名無しさん
25/05/24 20:41:36.84 6QA0+Pxw.net
頭の良い人は難しいことを簡単に説明出来る
馬鹿は簡単なことを長々と判り難くする

833:デフォルトの名無しさん
25/05/24 20:44:24.68 OSW0csek.net
>>813
正直すまんかった
久しぶりにVBAスレ来たからつい・・・
でもVBAはいい言語だと思うよ

834:デフォルトの名無しさん
25/05/24 21:07:47.86 cYe6QRvj.net
VBAは言語なのだろうか
VBは言語だけども

835:デフォルトの名無しさん
25/05/24 21:42:51.33 ZMjSY/PV.net
A1セルはこのフォルダのパスを記入する
A2セルはこのフォルダのパスを記入する

流石にこれは通じる、、、よね?

836:デフォルトの名無しさん
25/05/24 21:44:12.53 ZMjSY/PV.net
>>816
チューリング完全がプログラム言語の定義なのでしょう?
だったらVBAはプログラミング言語なのでは

837:デフォルトの名無しさん
25/05/24 22:37:10.39 iK5rs3WU.net
A1 Write this folder pass.

838:デフォルトの名無しさん
25/05/25 12:18:28.20 IvH5YvLQ.net
dictionaryやFileSystemObjectのfunction関数を使っているけど、dictionaryに登録する処理や取得したファイル名やファイルパスに対する操作は事なる

こう言う場合、どうすれば個別の条件にも対応できるfunction関数が作れますか?

839:デフォルトの名無しさん
25/05/25 12:36:22.85 ubpRgCst.net
異なる操作をひとつの関数で行いたいという質問ですね!
まずはどういう操作を行っているのか教えてください!

840:デフォルトの名無しさん
25/05/25 12:45:27.58 czPn1bap.net
dictionaryは死ぬ予定だから使うのやめなよ

841:デフォルトの名無しさん
25/05/25 12:53:50.40 ubpRgCst.net
>>822
そうですね!
Excelなのだからデータはワークシートに格納するのがスジですね!

842:デフォルトの名無しさん
25/05/25 13:20:14.05 fZ8kzLje.net
AIみたいな解答ワラタ

843:デフォルトの名無しさん
25/05/25 16:48:27.92 zOE9ehCa.net
ホントにAIに聞いた。
個別の条件にも柔軟に対応できる function を作るには、いくつかのアプローチが考えられます。例えば、以下のような方法を試してみてはいかがでしょうか。
1. パラメータを活用する
2. Enum または定数を使う
3. コールバック関数を使う

844:デフォルトの名無しさん
25/05/25 17:36:59.25 QBoxveBd.net
何をしたいのかが謎
型によって処理を分岐させたいってことかね

Function 関数(処理対象)
 型名 = TypeName(処理対象)
 Select Case 型名
  Case "Dictionary"

  Case "File"

  Case "Folder"

 End Select
End Function

845:デフォルトの名無しさん
25/05/25 18:31:50.10 czPn1bap.net
>>823
そういう話じゃなくVBS廃止の副作用で連想配列や正規表現が死ぬって話

846:デフォルトの名無しさん
25/05/25 18:42:26.13 rOBfPREU.net
>>827
VBS廃止の副作用で死ぬのは噂や推測じゃなくて公式の情報なの?

847:デフォルトの名無しさん
25/05/25 19:07:30.81 IvH5YvLQ.net
ファイルシステムオブジェクトでフォルダの中のファイル名一覧と、ファイルパスを取得したい時もあれば、
ファイル名に部分一致するファイルのパスを取得したい時もある

848:デフォルトの名無しさん
25/05/25 19:13:49.79 5C/Jye7Q.net
従来の正規表現の代用って無いの

849:デフォルトの名無しさん
25/05/25 19:54:07.08 czPn1bap.net
>>828
逆にあれだけ情報出ててなんで死なないと思うの?
URLリンク(techcommunity.microsoft.com)

>>830
vba-regex by sihlfallっていう、
RegExp代替のフルVBAで書かれた正規表現エンジンがある

850:デフォルトの名無しさん
25/05/25 19:58:13.45 bo3VS07C.net
>>829
はい!
if文で条件分岐すれば、簡単に実現できます!

851:デフォルトの名無しさん
25/05/25 20:04:43.89 IvH5YvLQ.net
私はVBAの正規表現が死んだら、パワークエリーでJavaScriptの正規表現を使うわ


set オブジェクト = nothingって必ずした方が動作が確実になるのでしょうか?
Wordのドキュメントやアプリ


852:ケーションを処理する時にエラーが出たのでそう思いました。



853:デフォルトの名無しさん
25/05/25 22:03:34.39 QBoxveBd.net
正規表現はREGEX関数が実装されたのでVBAでやる必要なし

854:デフォルトの名無しさん
25/05/25 22:32:05.60 d/seLvao.net
>>822
知ったか乙
良く調べて書き直せ

855:デフォルトの名無しさん
25/05/26 02:34:52.38 J879X3+V.net
>>835
Microsoft Scripting Runtimeに依存してるからVBSと共に死ぬ
FSOなんかはScripting Runtimeには依存してないから引き続き使える
間違ってるなら指摘して
認識改めるから

856:デフォルトの名無しさん
25/05/26 09:38:22.00 G1Vrdcz4.net
>>820 が聞きたいのは
URLリンク(www.limecode.jp)
この辺の処理の仕方なんでは? 最後まで精読すれば、どういう書き方をすれば
より都合が良くなるか、それなり理解が深まるような

857:デフォルトの名無しさん
25/05/26 09:53:10.39 wHcYCN0P.net
>>833
>set オブジェクト = nothing
それ書かないで過去に何度か問題起きてたような
ファイルopenして、close書かなくても勝手に閉じてくれるとしても、書いたほうがいいようなもん
たった1行各程度で未然にトラブル防げるなら書いとけと
(かと言って、親オブジェクトから連なる小オブジェクトはいちいちnothingせずに、親オブジェクトだけ書いちゃうことも多いけどな。小さい処理だと特に)

858:デフォルトの名無しさん
25/05/26 12:08:21.83 chNfFSjB.net
>>836
間違えている
どのDLLに何が入っているかだ

859:デフォルトの名無しさん
25/05/26 13:55:33.90 cvwCoF8H.net
>set オブジェクト = nothingって必ずした方が動作が確実になるのでしょうか?

した方が良いじゃなくてするべき

860:デフォルトの名無しさん
25/05/26 17:21:30.90 c1JRhLC0.net
コピペ荒らしこのスレだけ来ないの面白いな

861:デフォルトの名無しさん
25/05/26 18:35:02.01 FaOK97dk.net
>>837
すみません
今の私は例えばファイルシステムで言えば、
フォルダの中の全てのフォルダ名とフォルダパスを取得
フォルダの中の全てのファイル名とファイルパスを取得
フォルダの中に指定のファイル名と異なるファイルがあれば削除
と言う様に、
それぞれのサブプロシージャを作成する事しかできていません
なので、一つのサブプロシージャに条件に応じて複数の処理が行えないかなと思いました
原作論で言えば、一つの処理しかできないサブプロシージャこそ正しいのかもしれませんが
あと、それぞれのプロシージャでファイルシステムオブジェクトを宣言とセットをしてしまっています

nothingは今までプロシージャを抜けた時点で解放されるから特にする必要がないと思っていましたが、Wordを操作する様になって、nothingをしないと処理が止まってしまうので意識する様になりました

862:デフォルトの名無しさん
25/05/26 19:11:18.49 mCaBFscc.net
Sub Yaritai(i as integer)
if (i and 1) <> 0 then
Call Sub1()
elseif (i and 2) <> 0 then
Call Sub2()
End Sub

863:デフォルトの名無しさん
25/05/26 20:30:26.44 sP5+kUYx.net
>>842
ご自分で言ってる通り、ひとつのモジュール、関数、メソッド等にはひとつの役割を与えて作るのがセオリーです。ちなみにそれを単一責任原則と言います。
ひとつのプロシージャ内で出来るかと言えば、再起処理やStaticな変数を上手く使えば恐らく出来ないことは無いでしょうが、そうするメリットをあまり感じません。
ひとつのプロシージャで処理するのではなく、ひとつのクラスとしてその辺の処理を行うことを検討しては如何でしょうか?
そうすればメンバ変数として宣言したもののインスタンスをコンストラクタで生成することも出来ますし、デストラクタで解放することも出来ますよ

864:デフォルトの名無しさん
25/05/26 20:36:57.49 sP5+kUYx.net
×再起処理
◯再帰処理
誤変換すまんこ

865:デフォルトの名無しさん
25/05/26 21:18:23.47 FaOK97dk.net
>>844
クラスモジュールを一通りやった事がありますが、いまいちクラスモジュールの使い方を知りません
どうすればそれぞれの機能をクラスモジュールで効率的に実装できるでしょうか?

866:デフォルトの名無しさん
25/05/26 22:59:03.14 Eh03XDLb.net
セルから機種依存文字を直接拾ってくるのは難しいですか?

例えば☐(unicode:2610)が入ってるセルをクリックすると☑(unicode:2611)に書き換える、みたいなのを実装する場合、
if(Range("A1").text="☐")then
だとRange("A1").textでセルの文字は取得できませんよね?
(もちろん「="☐"」で直接比較することもできませんが)

どうにかしてセルの機種依存文字を拾ってきてその種類を判定することは可能でしょうか?

867:デフォルトの名無しさん
25/05/26 23:15:54.66 MWZ/4kNq.net
>>847
Hex(WorksheetFunction.Unicode(Range("A1")))

868:デフォルトの名無しさん
25/05/27 15:49:48.18 j5Gfr/Ar.net
>>847
>Range("A1").textでセルの文字は取得できませんよね?
取得はできる。VBEで使えない文字だからソースに直接その文字を書けないだけ

Dim CHECK_ON As String: CHECK_ON = ChrW(&H2610)
Dim CHECK_OFF As String: CHECK_OFF = ChrW(&H2611)

If Range("A1").Value = CHECK_ON Then
Range("A1").Value = CHECK_OFF
Else
Range("A1").Value = CHECK_ON
End If

869:デフォルトの名無しさん
25/05/27 17:59:07.28 2OPk25Mu.net
>>848
解決しました。
ありがとうございます。

870:デフォルトの名無しさん
25/05/27 20:17:39.42 3QS90eHP.net
Excelの話ではないからスレ違いなんですが、 Wordのドキュメントの2ページ目の行に文字列を挿入するにはどうしたらいいでしょうか?
2ページ目の〜行目にと言う様な指定はできないのでしょうか?

871:デフォルトの名無しさん
25/05/27 20:38:35.17 0hlUsnMF.net
>>851
スレチとわかっていて厚かましい
死ね

872:デフォルトの名無しさん
25/05/27 20:52:46.35 OuONf5SF.net
>>852
この馬鹿モンが!

>>851
いい質問ですね
ExcelのほうがメジャーでWordはマイナーなのだけど
WordのVBAをはじめた人にとっては初期段階でやりたい操作なのではないでしょうか?

簡単ではないですが解決策はあります
たしかinformationみたいな名のプロパティを使ったような気がする
(もうWordVBAは数年使ってないから忘れた)
ChatGPT使えば教えてくれるかも

873:デフォルトの名無しさん
25/05/27 20:54:35.84 DtCiAPP8.net
>>853
死ね

874:デフォルトの名無しさん
25/05/27 22:13:59.20 JUnNHiQe.net
>>851
ActiveWindow.ActivePane.Pages(2).Rectangles(1).Range = "文字列" & ActiveWindow.ActivePane.Pages(2).Rectangles(1).Range

875:デフォルトの名無しさん
25/05/28 00:45:03.58 7WzKj5D7.net
フォームを作るのに標準のコントロールやAPIでは動かないことがあったから、ついにPowershellで作り始めちゃった

876:デフォルトの名無しさん
25/05/28 01:00:15.46 +7HocyMO.net
PowerShellは
System.Collections.Genericが使えるからかなり楽だよなぁ
VBAと違ってフォームデザイナが標準で付いてないのが難だが

877:デフォルトの名無しさん
25/05/28 07:40:29.71 LbsE8EcH.net
VSの方が楽なんでは
PS使ったことないけど

878:デフォルトの名無しさん
25/05/28 08:42:06.86 WNN+73zR.net
PowerShellはbatと違って、一手間や権限設定が必要と聞いたからやめた震え声
本当にそうなのですか?

879:デフォルトの名無しさん
25/05/28 08:58:57.33 DZlhdmsz.net
震え声で言ってるの?

880:デフォルトの名無しさん
25/05/28 09:02:42.36 3/66YXCT.net
スレタイを音読してみよう

881:デフォルトの名無しさん
25/05/28 09:56:27.88 0RI44N1Y.net
エグザイル ビバ しつもんしる

882:デフォルトの名無しさん
25/05/28 20:05:51.40 WNN+73zR.net
VBAでファイルやフォルダのパスはいつも一覧表で利用しているのですが、当然属人化するリスクがあるので、もっと柔軟にパスを設定できる方法を探しています。
今考えているのは、ファイルやフォルダが見つからなかった時にダイアログを開いてフォルダやファイルを選択させ、選択したファイルやフォルダのパスをセルに記入する、と言う方法なのですが、もっと簡単で確実で柔軟な方法はないでしょうか?

883:デフォルトの名無しさん
25/05/28 20:44:52.08 Z5h4paoG.net
自分は設定シートを用意して、そこに記述してあるものを参照してる

884:デフォルトの名無しさん
25/05/28 20:50:09.42 bd87TuSw.net
ログインユーザーのマイドキュメントをルートにして開く
具体的には「HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Personal」
のパス

885:デフォルトの名無しさん
25/05/28 21:40:10.79 WNN+73zR.net
>>864
その設定用シートに
例えばフォルダやファイルを複数選択した状況で右クリックのパスをコピーでシートに貼り付ける
という事さえも出来ない、わからない人も想定しないといけない訳で、、、

886:デフォルトの名無しさん
25/05/28 21:58:53.67 //Fv0twK.net
>>863
エクスプローラーからファイルをドラッグドロップ

887:デフォルトの名無しさん
25/05/28 22:16:15.52 WNN+73zR.net
>>867
知らなかったです
これができるなら本当に希望が見えてきました

888:デフォルトの名無しさん
25/05/28 22:18:57.59 QfAx2JsO.net
馬鹿ばっか

889:デフォルトの名無しさん
25/05/28 23:46:46.18 //Fv0twK.net
>>868
URLリンク(excel.syogyoumujou.com)
このやり方が簡単そう

890:デフォルトの名無しさん
25/05/29 07:11:07.31 cC95Jm/J.net
>>870
よくよく考えれば当たり前なんだけど、ドラッグ&ドロップで追加する機能もあるんだ
これは便利だ

891:デフォルトの名無しさん
25/05/29 17:25:49.51 fp+yAGdo.net
FileSystemObject の TextStream が使えないなら ADODB の Stream を使えばいいじゃない
と思ったら挙動が違ってびっくり

892:デフォルトの名無しさん
25/06/01 20:16:56.40 wTah86rB.net
初歩的な質問で申し訳ないですが、マクロ実行中にエラーなどでデバック画面、エディタ画面に移動せずに、エラーハンドリングなどを実行してプロシージャを終了するにはどうしたらいいですか?

893:デフォルトの名無しさん
25/06/01 21:54:45.65 fzXRF4Kq.net
>>873
On Error Resume Next

894:デフォルトの名無しさん
25/06/02 00:34:11.70 14Td775l.net
[ツール] [オプション] [全般]
エラーでトラップ
●エラー処理対象外のエラーで中断

ということではなくて?

895:デフォルトの名無しさん
25/06/02 00:35:28.23 14Td775l.net
×エラーでトラップ
◯エラートラップ

896:デフォルトの名無しさん
25/06/02 07:36:05.35 hx4qvUMZ.net
>>614
on error goto ラベル名
vba エラーハンドリング で検索して例を見た方が早いよ

897:デフォルトの名無しさん
25/06/02 08:46:36.26 IeMpK/LE.net
>>614
そんなひとつのモジュールに詰め込んだら管理しにくいでしょ。
モジュールは分ける。

898:デフォルトの名無しさん
25/06/02 09:24:06.39 3Ov4fjqk.net
>>878
何を基準にかを書かかないと役立たずじゃない?

899:デフォルトの名無しさん
25/06/02 15:03:33.91 DSKTrfoz.net
馬鹿はそんなことも判らないのか

900:デフォルトの名無しさん
25/06/02 15:07:32.82 OjGRkHiP.net
>>880
スレタイ読めない馬鹿w

901:デフォルトの名無しさん
25/06/02 19:50:00.14 K2UVQp3e.net
>>614
ひとつのモジュールにはひとつの役割を
ひとつのプロシージャにもひとつの役割を
与えて書けばいいんじゃない?
もちろん、モジュールとプロシージャでは
与える役割が全然変わってくるけど

例えばモジュールに車という役割を与えたら
プロシージャには走る役割を与えたり

後はセンス

902:デフォルトの名無しさん
25/06/02 20:06:38.96 Xhmb9taU.net
ありがとうございます
やはり on error goto ラベル名 なのですね

903:デフォルトの名無しさん
25/06/02 20:25:45.14 gI3jZeU7.net
on error resume next
ヤバそうな処理
if err.number<>0 then
エラーリカバリー
end if
on error goto0

904:デフォルトの名無しさん
25/06/02 20:45:44.86 Xhmb9taU.net
>>884
エラーが発生している、あるいはしそうな処理がある、というよりは、マクロ実行中にどんなバグでも発生したら、発生した時点で終了させる必要があります

905:デフォルトの名無しさん
25/06/02 21:35:59.74 nQl9pEtd.net
終了前に
err.number = エラー番号
をセットしてジャンプさせるハンドラがいる
こわー

906:デフォルトの名無しさん
25/06/02 22:06:18.54 ZCDsMgZ+.net
Sub Div0()
On Error GoTo Err
MsgBox 1 / 1
MsgBox 1 / 0
MsgBox 1 / -1
Err:
MsgBox "ゼロで割るな、クソが"
End
End Sub

907:デフォルトの名無しさん
25/06/02 22:26:41.07 ncJUEcFA.net
Err: の前で Exit Sub しないと

908:デフォルトの名無しさん
25/06/03 07:35:55.27 o/OLh2ct.net
異常が起きる前にファイル開いてた場合、closeしないで終了してしまうとかある

909:デフォルトの名無しさん
25/06/03 07:39:00.03 /ZJ1mBw3.net
VBAのツール作りは時間がかかるのが当たり前でしょうか?
作り方は分かっているし、作るツールもたいしたものではないのに、それでも1日2日では終わらないです

910:デフォルトの名無しさん
25/06/03 10:48:59.43 Kk3A2bVT.net
ものによる、人による、まともにテストしてるかにもよる

911:デフォルトの名無しさん
25/06/03 10:57:06.67 Q0vXXWY4.net
どうせ著作権侵害や不正アクセスツールだろ

912:デフォルトの名無しさん
25/06/03 19:25:30.47 gpacmpqZ.net
>>890
まぁそうだね
だから綺麗に部品化しておくことが大事なんだよ
それを後で使い回せるようにね

913:デフォルトの名無しさん
25/06/03 20:26:44.49 /ZJ1mBw3.net
自分が勤めている会社で理解者や協力者を増やそうと、少しでもVBAに興味を示した人や、VBAを齧っている人を相手に勉強会を開催しても、結局VBAがわかる人は少ない
という話を聞きますが、やっぱりVBAといえど、難しいのでしょうか?
Power Queryでもそういう話を聞きます

914:デフォルトの名無しさん
25/06/03 21:02:42.93 cgHky4oh.net
VBAが難しくないんだったらさっさとVBA卒業して本職のITエンジニアになった方が稼げるからねえ
向上心がありすぎてもいけない、中途半端なツールなので

915:デフォルトの名無しさん
25/06/03 21:09:44.47 Kk3A2bVT.net
チンタラ残業代稼いでる人にとって効率化は最大の敵
VBAにしろRPAにしろ最大の抵抗勢力よ

916:デフォルトの名無しさん
25/06/03 22:04:21.82 gr7bEf2i.net
>>872 で愚痴って終わりなのもアレだから一応書いとく

・事象
 FileSystemObject.TextStream.ReadLine と ADODB.Stream.ReadText(adReadLine) が同じ結果にならない

・原因
 改行コードが CRLF と LF が混じったお行儀のよろしくないファイルだった

・対処
 LineSeparator = adLF として Replace(ReadText(adReadLine), vbCr, "")
 とやったらOKだった

917:デフォルトの名無しさん
25/06/03 23:26:25.06 aKU11sxP.net
>>897
Microsoftのマニュアルよりも詳しい説明
ADODB.Stream: URLリンク(atsumitm.iobb.net)
TextStream:  URLリンク(atsumitm.iobb.net)

918:デフォルトの名無しさん
25/06/03 23:46:58.61 gpacmpqZ.net
>>894
VBAは比較的間口が広くてとっつき易い言語ではあるとは思うよ
ただ、何の言語でもそうだけど教える人がいると受動的になりがちで聞いてりゃ分かるようになると思ってしまうのはマズい
聞いてりゃ分かるようになる言語なんて存在しない
分かる人が少ないのは結局、VBAを本当に必要であることを迫られる立場に無いからだと思う
VBA出来なきゃ今いる会社をクビになるくらいに迫られたら大概の人は理解する
でも教えてくれる人がいるということは恵まれたことだと思うよ
このスレにいる大多数の人は恐らく独学で仕事場で使えるようにならざるを得なかった立場なんじゃないかな

919:デフォルトの名無しさん
25/06/03 23:58:42.71 /ZJ1mBw3.net
>>899
私も完全独学で覚えました
というプログラミングは独学で学んでいる人ばかりではないのですか?
プログラミングスクールは役に立たないし、かと言って会社は教えてくれない

920:897
25/06/04 00:06:22.21 /Ak3M73b.net
>>898
このサイトぐぐるとよく見かけるようになったけど、詳しすぎて理解できないw

921:デフォルトの名無しさん
25/06/04 00:40:57.38 b8XC2mTd.net
自学できない人はダメだよね

922:デフォルトの名無しさん
25/06/04 05:30:19.54 3c6clsCg.net
独学って、大半の人は言語に固有の文法と、開発環境に依存する実行方法を覚えただけでしょ
だからデータ型の違いとか文字コードとかアルゴリズムとかファイルシステムとか、基本がわかってないから別の言語に手を出せない

923:デフォルトの名無しさん
25/06/04 06:02:44.09 /hC9EQXc.net
ここ見てりゃわかるけど、コピペで動いて偉くなったつもりの馬鹿ばっかだから

924:デフォルトの名無しさん
25/06/04 07:11:35.77 jKpT1SFo.net
>>903
そうね
それはその通りだと思うわ
だから>>894の言ってる教えている人が
そもそものVBAの基本的な型やら
分岐や演算とかよく使うObjectの扱いとかを
最初に教えていることを切に願うわ

925:デフォルトの名無しさん
25/06/04 07:34:51.95 BFbm2+Cn.net
>>900
覚えるのは自分、教わったのに覚えてないようでは学べてない
あと文法は覚えてもアルゴリズムは考えるもの
教わってないからできないって言ってるのは初心者以下な

926:デフォルトの名無しさん
25/06/04 07:44:26.54 f2CAL3f8.net
やる必要性がないからやらないけど、Pythonが簡単というならPythonだってわかる気がするし、C言語がFor eachもない様な単純な言語だというならそれはそれでできそうな気もする(Copilotがあるから尚更)。
ローコードにしろスクラッチにしろそれは同じ。

既製品のソフトウェアを導入するか、VBAで作成するかならどちらが安いと思いますか?
もしVBAの方が安いなら世の中マクロだらけだと思うのです。

927:デフォルトの名無しさん
25/06/04 08:21:45.39 B6zQeN2g.net
誰も責任を負いたくない、率先して矢面に立ちたくない方々だらけだから

928:デフォルトの名無しさん
25/06/04 08:50:54.30 yTwvetl9.net
>>907
マクロだらけだよ
それらを管理する人(作成者)が抜けていくから管理不能になる
そういった事象を解決する銀の弾丸としてRPAやノーコードツールが喧伝されたけど、
管理する人がいないって意味では同じなので同じことが繰り返されてる

929:デフォルトの名無しさん
25/06/04 10:16:27.04 pOYKhOcI.net
>改行コードが CRLF と LF が混じったお行儀のよろしくないファイル

CSVなら普通にあるな
行儀の問題じゃない

930:デフォルトの名無しさん
25/06/04 10:36:26.59 yTwvetl9.net
行儀だよ
少なくともRFC上においては行末がCRLFであると規定されてる
ファイルの最後のみがどうでもよい

931:デフォルトの名無しさん
25/06/04 11:22:31.03 ZuFYF6Nx.net
>>907
どっちが安いって、保守コストまで考えて言ってる?
そりゃ作りっぱなしならVBAのが安上がりだけど、それじゃ後で困るって話をしてるんでしょ

932:デフォルトの名無しさん
25/06/04 12:21:29.23 pOYKhOcI.net
LFは行末じゃないよ

933:デフォルトの名無しさん
25/06/04 14:36:42.79 p0LJP29f.net
CSVの行改行と項目内改行が使い分けられてないわけが無い
使い分けられてなければ復元不可能になる

934:デフォルトの名無しさん
25/06/04 14:39:56.22 p0LJP29f.net
>>914
"あれば可能だが無いの見たことあるのよね…

935:デフォルトの名無しさん
25/06/04 16:28:29.01 3c6clsCg.net
標準の改行コードはOSによって違う
CR、LF、CR+LF、LF+CR、すべてのパターンが実在する
フィールドに改行やコンマを含めたい場合、レコードの区切りと違うコードを割り当てる場合もあれば、クォートなどの記号でフィールドの範囲を明示する場合もある
Windows版Excelはダブルクォートでフィールドの範囲を指定するのが基本

936:デフォルトの名無しさん
25/06/04 16:30:20.58 3c6clsCg.net
>>915
それは固定長かセパレータ(コンマ)の数をカウントしてるかどっちかかな

937:デフォルトの名無しさん
25/06/04 18:23:31.04 RQn0r/Lq.net
>>916
CR MacOS(UNIX化前)
LF UNIX、MacOS(UNIX化後)
CR+LF Windows、DOS
LF+CR ← なんてOS?

938:デフォルトの名無しさん
25/06/04 18:39:20.47 f2CAL3f8.net
>>909
RPAにしろ、ノーコードにしろ、なんにしろ、そうなりますよね。
結局社内でどれだけ学習意欲のある人を揃えるかによりそう。

939:デフォルトの名無しさん
25/06/04 19:22:49.50 7S8kDVf/.net
>>913
由来のタイプライターを鑑みたらLFは本来行頭に来るべきものだけど、
現実的には行末

940:デフォルトの名無しさん
25/06/04 19:55:51.24 frrYvMiA.net
頑張ってVBA勉強したところでプログラミングスキルとしては流石に時代遅れ&最底辺だし、
事務員としてスキルアップしたいならツールに入れ込むより業務知識を強化した方がいいし、
組織の中で出世したいなら自分でVBA書くより他人に書かせて継続的にスケールする仕組みを作るべき
そして、めでたく業務効率化できたとして、いず」行き着く先は「脱Excelで属人化解消&業務効率化」でVBA職人は悪者扱いだ
本当にVBAを広めたいのなら、個人の意欲に頼るのではなく、組織として適切なインセンティブを設けることだな

941:デフォルトの名無しさん
25/06/04 20:02:53.71 f2CAL3f8.net
>>921
結局、経営者次第だよね
まるでITや業務効率化に興味がないなら何もできない
社員の進言に耳を傾けないなら騙されもするし、せ


942:っかく導入したツールは社員にとって非常に使いづらい



943:デフォルトの名無しさん
25/06/05 00:29:50.41 Nu77Yg2O.net
>>921
そっか
あなたはこのスレ卒業だね

944:デフォルトの名無しさん
25/06/05 08:17:29.72 FSpPjL7A.net
四行目までは自虐だろ? 言いたいのは五行目だけって意味と捉えたが、どうなんだ
まあ、ちょっと過剰に反応し過ぎなきらいは否めないが

945:デフォルトの名無しさん
25/06/05 08:45:28.01 Lp1WVm/I.net
>>921
組織の中で継続してスケールする仕組み作ったなら属人化してないんだから悪者になる理由なくない?

946:デフォルトの名無しさん
25/06/05 09:07:39.20 FSpPjL7A.net
お利口さんに成ろうとしてアタマでっかちに成り過ぎ
大工だっていろんなレベルもあるし色んな層が大工してる
その場しのぎのやっつけ大工も居れば、客の要望を叶えるために青写真から描ける熟練大工もいる
新人大工なら木の特性とか部材同士の相性とかもよく理解しないまま最新部材使って威張ってみたり
ガルバリウムには使ってはいけない釘平気で使って1~2年後にはその部分からサビを拡げる原因作って顰蹙買うし
それでも世の中は回ってる
改善なんか数年で変化してくものだ、という前提を踏まえてれば、それに見合うコストで運用出来てれば御の字

947:デフォルトの名無しさん
25/06/05 10:31:37.20 1teg7ITB.net
>>925
コンサルはいわゆるExcelバケツリレーの非効率さを指摘してくるのが常道
VBAで個々人の作業が省力化されてようとフローは変わらないので、実際非合理だから仕方ない
その上で現行業務の調査として関係者全員にヒアリングして介在するワークシートやマクロをつぶさに調査するのにかかる莫大な費用の見積りを提示されると、
もう経営層からはVBA職人なんて非効率な業務を助長するだけの排除すべき敵としか見えなくなるわけよ

948:デフォルトの名無しさん
25/06/05 10:49:41.34 1teg7ITB.net
あと、業務を見直してシステム化しようとした際にVBAが悪者になる大きな原因として、
一見簡単な処理に見えて蓋を開けたらたまに複雑怪奇な難攻不落の化け物が出てくる、ってのがある
これ、Excel中心のワークフローをシステム化する際にはよくある話で、スケジュール遅延や予算超過を引き起こすことが多い
そうなるとシステム部門や現場が経営層に頭下げるのは当然として、上場企業だと株主に経営層が謝罪なんてケースもある
ここまでくるともうVBAなんて悪者もいいとこよ

949:デフォルトの名無しさん
25/06/05 10:55:09.32 Lp1WVm/I.net
それらは継続してスケールする仕組みを作れていない場合の話じゃないの?
複雑怪奇な難攻不落の化け物って、それスケールできる仕組み作れてなくない?
そもそもの話が噛み合ってないよ

950:デフォルトの名無しさん
25/06/05 11:09:55.37 1teg7ITB.net
>>929
隅々まで適切にガバナンスを効かせながら使うならいいんじゃない?
それができるほどの優秀なリーダーがVBAを選ぶかは疑問だけどな
どんな組織でも、人が増えれば馬鹿も増えるし目も行き届かなくなるものだ

951:デフォルトの名無しさん
25/06/05 11:27:50.93 Z5osrhWk.net
Excelバケツリレーは業務や人員を追加していく分にはスケールするよ
後から変更するのが困難でありシステム化が前提なら極めて非合理だけ

952:デフォルトの名無しさん
25/06/05 17:48:57.22 lb5raFks.net
>>928
IR出すレベルのVBAは確実に一見簡単そうな処理では無いと思います。
そこまでの規模のシステムなら、それこそ何かしらの製品やサービスを導入してください。

953:デフォルトの名無しさん
25/06/05 17:54:18.01 lb5raFks.net
ローコードツールや多言語の方がいいのはその通りだと思います
VBAはOfficeしか扱えないのだから

954:デフォルトの名無しさん
25/06/05 18:20:52.21 uYkJABQ4.net
> VBAはOfficeしか扱えないのだから
AutoCAD、SOLIDWORKS、・・・

955:デフォルトの名無しさん
25/06/05 18:33:57.70 Lp1WVm/I.net
>>933
そうなんだ?知らなかった

956:デフォルトの名無しさん
25/06/05 20:15:40.58 r0Qxvap7.net
そもそもパッケージやクラウドサービス使えば、中身は全くわからない
手の出しようがない
自前なら何とかなる
そこをどう捉えるかよ
そもそも基幹システムをVBAで作らないし
(小企業は知らんが)
作っても枝葉よ

957:デフォルトの名無しさん
25/06/05 20:29:53.99 lb5raFks.net
>>936
C、CSVで吐き出せればなんとか(震え声)

TYPEを全く使ってこなかったのです。
しかし、この度同じモジュールで多数のstring型の変数を宣言する必要があります。
TYPEデビューしようと思うのですがどうでしょうか?

958:デフォルトの名無しさん
25/06/05 23:29:45.76 fxlZJI+h.net
ここで聞かなきゃいけないような馬鹿はやめとけ

959:デフォルトの名無しさん
25/06/05 23:53:54.23 r0Qxvap7.net
>>937
type稀にしか使わないので調べたら
CollectionやDictionaryに格納できないと
マジか、知らなかったわ
これに使うならクラスにしたらいいかもね

960:デフォルトの名無しさん
25/06/05 23:57:55.29 0HOZWCXV.net
>>920
リアルタイプライターではLFの位置は任意だよ
行頭とか行末とか関係なく、行の途中でも好きな所でline feedは可能

961:デフォルトの名無しさん
25/06/06 01:00:59.18 gfk/0ela.net
>>940
CRLFはCRが来る時点でLFが行末じゃなくなるって話

962:デフォルトの名無しさん
25/06/06 08:39:00.12 cx/TERMm.net
Enterキーの矢印ってLF-CRだよね
  ↓

CR-LFならこういう向きじゃないとおかしい
  ←


963:デフォルトの名無しさん
25/06/06 09:32:23.47 rGtsPzUl.net
VBAでクラスモジュールを使っていろいろやるのもなしとは言わないけれど、それなら正直JavaとかPythonとかの普通の言語を勉強した方が良いような気もするかな。クラスモジュールって、よくある普通の言語とはちょっと違ったVBA固有の仕様に過ぎないし。

964:デフォルトの名無しさん
25/06/06 09:44:39.10 4a1tHPn5.net
>>943
JavaScript様のプロトタイプに喧嘩売る気か

965:デフォルトの名無しさん
25/06/06 10:07:22.76 NfW6LToZ.net
クラスモジュールはVBA固有というかCOMの仕様
COMの絡まない処理で無理に使う必要は全く無いし、COMを理解してないと不可解な仕様が多い

966:デフォルトの名無しさん
25/06/06 10:45:07.80 c6RrnkVo.net
他言語でクラス使ってたらクラスモジュール作りたくなる病

967:デフォルトの名無しさん
25/06/06 11:16:07.96 FmZludjM.net
COMってどう勉強するんだろ
漠として簡潔な説明がなかなかなく
IUnknownやらなんやら、

968:デフォルトの名無しさん
25/06/06 11:35:48.78 3VaYoART.net
InsideCOMを辛抱強く読むのが唯一の道
それ以上の資料もかみくだいた解説書もない

969:デフォルトの名無しさん
25/06/06 18:33:04.93 lAxJJHmL.net
URLリンク(learn.microsoft.com)
URLリンク(learn.microsoft.com)

970:デフォルトの名無しさん
25/06/06 18:52:09.71 4a1tHPn5.net
COMの解説
URLリンク(learn.microsoft.com)

971:デフォルトの名無しさん
25/06/06 19:13:06.68 fJneNGsq.net
>>939
TYPEは他のオブジェクトに引き渡せないとは聞いていました

結局ディクショナリーで登録しました

972:デフォルトの名無しさん
25/06/06 20:17:15.03 tc8PGxli.net
>>951
ディクショナリだとインテリ使えんけど、まあそれでいいなら

973:デフォルトの名無しさん
25/06/06 20:34:48.52 2QLQ97JJ.net
たまにいる勘違い人間 「自分、CやJavaできるから低レベルのVBA(笑)なんてすぐマスターできるし」とか豪語するヤツ

974:デフォルトの名無しさん
25/06/06 21:03:29.16 fJneNGsq.net
私はファイルパスやフォルダパスの取得や設定、ファイル名やフォルダ名の作成に冗長なコードを書いている気がしてならないのですが、何かいいコードはないでしょうか?

975:897
25/06/06 21:52:26.62 CfJ/EVmD.net
Typeの代わりにRecordSet使ったりする Field設定いちいちするの面倒だけど
Filterとか使えるしCopyFromRecorSetとかできるし

976:デフォルトの名無しさん
25/06/07 01:20:40.40 hTJ86lb5.net
>>954
昔はdirやnameだったけど、今はfso使ってればいいんじゃね

977:デフォルトの名無しさん
25/06/07 04:19:49.26 GCIZhVy1.net
>>954
その程度の処理なら、冗長で困ることなんかほとんどないよ
自分に理解できる形で書くのが、長い目で見れば一番保守性が高いんだから
ちゃんと


978:動いてる物を直そうとして壊すことも多いから、そっとしとけ



979:デフォルトの名無しさん
25/06/07 07:03:08.54 QQtzQfGp.net
>>954
末尾の円マーク有無で毎回処理を分岐させてるのならBuildPathを使え

980:デフォルトの名無しさん
25/06/07 09:36:28.54 zGsllLLl.net
>>954
その冗長なコードとやらを貼ってみれば何が悪いか指摘してもらえると思うぞ

981:デフォルトの名無しさん
25/06/07 10:26:27.74 pGBLBsE0.net
.netの文字列操作ライブラリとか見たらいたせりつくせりで贅沢過ぎるわ!って怒り出しそう

982:デフォルトの名無しさん
25/06/07 12:33:58.98 NHsDgqoS.net
タスクバーのアイコンを取得したくて、下記のサイトのC#をVBAに移植しても、Excelがハングアップする
C#ではちゃんと動く
なぜ?

Dim pUIAutomation As New CUIAutomation
Dim windowElementTray As IUIAutomationElement
Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hTaskBar)


URLリンク(learn.microsoft.com)

983:デフォルトの名無しさん
25/06/07 13:25:32.25 QQtzQfGp.net
URLリンク(qiita.com)
↑ここの人がVBAで似たようなことやってますね
GetReferenceElementという関数の中に >>961 と同等のコードが書かれているから
hTaskBarの値がおかしいんじゃないの?

これでブラウザの自動操縦できるのかぁ 便利そうだな

984:デフォルトの名無しさん
25/06/07 13:32:49.76 NHsDgqoS.net
>>962
このサイトも見た
hTaskBarの値は、C#版とVBA版で同じ値だったので、正しいと思う。

Chromeのウィンドウハンドルでやった場合は、ちゃんと動いた

985:デフォルトの名無しさん
25/06/07 13:58:10.47 QQtzQfGp.net
これで最後の行まで動いたよ

Dim hWndTray As LongPtr: hWndTray = FindWindow("Shell_TrayWnd", vbNullString)
Dim hWndRebar As LongPtr: hWndRebar = FindWindowEx(hWndTray, 0, "ReBarWindow32", vbNullString)
Dim hWndMSTaskSwWClass As LongPtr: hWndMSTaskSwWClass = FindWindowEx(hWndRebar, 0, "MSTaskSwWClass", vbNullString)
Dim hWndMSTaskListWClass As LongPtr: hWndMSTaskListWClass = FindWindowEx(hWndMSTaskSwWClass, 0, "MSTaskListWClass", vbNullString)

Dim pUIAutomation As New CUIAutomation
Dim windowElementTray As IUIAutomationElement
Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hWndMSTaskListWClass)
MsgBox "終わり"

986:デフォルトの名無しさん
25/06/07 14:07:56.34 QQtzQfGp.net
もうひとつの方もこれで動いた

Dim hWndTray As LongPtr: hWndTray = FindWindow("Shell_TrayWnd", vbNullString0)
Dim hWndTrayNotify As LongPtr: hWndTrayNotify = FindWindowEx(hWndTray, 0, "TrayNotifyWnd", vbNullString)
Dim hWndSysPager As LongPtr: hWndSysPager = FindWindowEx(hWndTrayNotify, 0, "SysPager", vbNullString)
Dim hWndToolbar As LongPtr: hWndToolbar = FindWindowEx(hWndSysPager, 0, "ToolbarWindow32", vbNullString)

Dim pUIAutomation As New CUIAutomation
Dim windowElementTray As IUIAutomationElement
Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hWndToolbar)
MsgBox "終わり"

987:デフォルトの名無しさん
25/06/07 15:15:58.64 NHsDgqoS.net
>>965
あ、
Windows 11だと動かないな…

>>964のタスクバーのボタンは動いたけど、
>>965のトレイアイコンは、最後の1行で、やっぱExcelごとハングアップで強制終了するわ
(Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hWndToolbar))

C#版は、>>965のトレイアイコンもちゃんと動くんだけど…

988:デフォルトの名無しさん
25/06/07 16:04:31.64 I++ihMYF.net
>>959
例えばファイルシステムで
フォルダ1の中から指定の文字列を含むフォルダを探して
見つかったフォルダのパスを取得して
さらにそのフォルダの中から指定の文字列を含むフォルダを探して
見つかったフォルダのパスを取得して
そのフォルダの中に指定のフォルダがあるか確認してなかった場合はフォルダを作成するコードです
2〜3回同じ様な事を繰り返しているので冗長な気がしてなりません

989:デフォルトの名無しさん
25/06/07 16:09:10.87 WTKqP7i+.net
>>967
それそのままAIに投げたら一瞬で書いてくれるよ

990:947
25/06/07 16:28:51.74 ADmBeqPj.net
>>948, 949, 950
ありがとうございます

マイクロソフトのサイトは機械翻訳がどうも…、と敬遠していましたが、参照してみます
それから洋書、かぁ…

991:デフォルトの名無しさん
25/06/07 17:36:52.86 hTJ86lb5.net
>>967
それを平で書いてるなら冗長
再帰処理でやるのがあるべき姿
まずは指定フォルダ下の全フォルダを出力する再帰処理書いてみ
(全てが再帰処理ではない。呼び出し元処理と再帰処理の2つ書くことになる。念の為)

992:デフォルトの名無しさん
25/06/07 17:47:31.26 QQtzQfGp.net
>>966
Windows11はタスクバーに使われてるクラスが変わってるらしいから関係あるかもよ
URLリンク(www.autohotkey.com)
AHKにクラス名を調べるツールがついてたような

993:デフォルトの名無しさん
25/06/07 17:55:49.45 nK7i38Q0.net
>>967
こんなのかな
>フォルダ1(Path1)の中から指定の文字列を含むフォルダ(Pattern1)を探して見つかったフォルダのパス(Path2)を取得する

Path2 = GetPatternPath(Path1, Pattern1) As String

>さらにそのフォルダ(Path2)の中から指定の文字列(Pattern2)を含むフォルダを探して
>見つかったフォルダのパス(Path3)を取得する

Path3 = FindPatternPath(Path2, Pattern2) As String

>そのフォルダ(Path3)の中に指定のフォルダ(Pattern3)があるか確認してなかった場合はフォルダを作成するコードです

result = CheckPatternPath(Path3, Pattern3) As Boolean
If result Then
Call MakePatternPath(Path3, Pattern3)
End If
あとは関数の中身を書くだけ

994:デフォルトの名無しさん
25/06/07 18:21:21.32 QQtzQfGp.net
>>967
ShiteiNoMojiretsu = "指定の文字列"
Shitei = "指定"
Path = "C:\フォルダ1"
Path = Path & "\" & Dir(Path & "\*" & ShiteiNoMojiretsu & "*", vbDirectory)
Path = Path & "\" & Dir(Path & "\*" & ShiteiNoMojiretsu & "*", vbDirectory)
If Dir(Path & "\" & Shitei, vbDirectory) = "" Then
MkDir Path & "\" & Shitei
End If

995:デフォルトの名無しさん
25/06/07 18:49:45.58 NHsDgqoS.net
>>971
んー

でも、C#ではちゃんと動くので、VBA側の問題な気が…
クラスが変わってるのも知ってる。

996:デフォルトの名無しさん
25/06/07 22:19:45.07 I++ihMYF.net
>>970
やっぱりそうですよね
再帰処理を頑張って覚えます

997:デフォルトの名無しさん
25/06/08 02:30:07.18 bVJzS0fI.net
>>975
そやね
たったこれだけでフォルダ階層どこまでも潜れるのかと感動すると思う
(かもしれないw)
フォルダ再帰ができたら各全ファイル名列挙も再帰処理の中に追加しとき
いつか使う時が来る

998:デフォルトの名無しさん
25/06/08 03:49:16.50 kACuu3za.net
こんなので偉そうにする馬鹿

999:デフォルトの名無しさん
25/06/08 10:13:48.24 szoadHGe.net
>>977
わざわざ「私バカです」って手を挙げて出てきてどうした

1000:897
25/06/08 10:59:09.81 BE7fUg1L.net
>>976
昔だったら stack overflowとか心配してたけど今はあまり気にしなくて良さそうだね

1001:デフォルトの名無しさん
25/06/08 11:01:04.08 j4jIPbHU.net
.netのAPIラッパー関数もソース見ると大抵泥臭い事やってんのよね

1002:デフォルトの名無しさん
25/06/08 11:03:50.75 4qkaLQIW.net
スタック領域は昔からほとんど変わってないから気にする必要はある

1003:デフォルトの名無しさん
25/06/08 11:07:37.10 j4jIPbHU.net
Excel VBA 質問スレ Part83
スレリンク(tech板)

1004:897
25/06/08 11:11:01.02 BE7fUg1L.net
>>982
乙彼
>>981
共有サーバのアドレス変わった時、全フォルダの奥までショートカット探して書き換えたけど
何ともなかったからそんなもんだと思ってた

1005:デフォルトの名無しさん
25/06/08 12:43:48.49 gXHyLlYW.net
>>976
再帰処理のコード自体はわかるのですが、If文で再帰処理をする、しないまでは考えてなかったです

1006:デフォルトの名無しさん
25/06/08 14:43:09.01 bVJzS0fI.net
>>984
if?
途中から折り返す時のこと?
それなら必要

1007:デフォルトの名無しさん
25/06/08 16:28:21.07 46RFXcFD.net
2階層しか掘らないのにわざわざ再帰処理にするかなぁ

1008:デフォルトの名無しさん
25/06/08 16:56:20.91 DI4VVn6/.net
>>978
構ってもらうのも大変なんだぞ
察してあげなきゃ

1009:デフォルトの名無しさん
25/06/08 17:17:56.33 8915HtnW.net
>>983
スタックさせたまま全ファイル走査なんてしないだろうから、
ファイルの数何個あろうが同じでは?

1010:デフォルトの名無しさん
25/06/08 19:19:30.01 4BwIalv3.net
ソース的に簡単にするなら全ファイルのフルパス取って正規表現だな

1011:デフォルトの名無しさん
25/06/09 07:30:24.52 UIpY0QNU.net
フォルダのショートカットファイルがある場合の動作確認はした方がいいぞ

1012:デフォルトの名無しさん
25/06/09 08:19:56.01 EHQrQQev.net
シンボリックリンクとジャンクションとハードリンクも動作確認した方がいいぞ
パスが255文字超えた場合も動作確認した方がいいぞ

1013:デフォルトの名無しさん
25/06/10 20:52:05.68 RKOrDLCJ.net
VBAのfor eachやfor nextでif文を使用して条件に合わなかった時にnext するにはどうしたらいいでしょうか?

1014:デフォルトの名無しさん
25/06/10 21:05:38.20 94f6xD2K.net
forの中をDo-Loopで囲んで脱出したい時はExit Doする

1015:デフォルトの名無しさん
25/06/10 21:05:45.22 zK5HBYNC.net
>>992
VBAでFor EachやFor Nextループ中に条件に合わない場合に次のループに進むには、If文を使い、条件が合致した場合のみ処理を記述します。
' For Each の例
For Each item In collection
If 条件 Then
' 条件に合った場合の処理をここに書く
End If
Next item

' For Next の例
For i = 1 To 10
If 条件 Then
' 条件に合った場合の処理をここに書く
End If
Next i

Elseブロックを記述しないことで、条件が合わない場合は自動的に次のループへ進みます。

1016:デフォルトの名無しさん
25/06/10 21:17:29.25 KLsW+s5l.net
next の手前にgoto

1017:デフォルトの名無しさん
25/06/10 21:35:49.89 chtn5cci.net
gotoでnext前のラベルに飛ぶ。ラベルは
CONTINUE_1:
など

1018:897
25/06/10 21:41:20.79 4RtejL7X.net
C言語の呪いから解けずにGoTo使いにくい俺

1019:デフォルトの名無しさん
25/06/10 21:55:14.34 qJv58WHL.net
無理して使うもんじゃない
そもそもifで処理せずにnextさせたいなら、
逆にifで処理させれば条件に当てはまらなければnextになるんだし

1020:デフォルトの名無しさん
25/06/10 21:57:34.45 YNq6kTxr.net
馬鹿ばっかで呆れるスレ

1021:デフォルトの名無しさん
25/06/10 21:58:07.04 YNq6kTxr.net
馬鹿ばっか

1022:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 137日 18時間 26分 52秒

1023:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch