1 名前:デフォルトの名無しさん [2025/01/24(金) 03:31:15.25 ID:l239yW+P.net] ExcelのVBAに関する質問スレ コード書き込みや作成依頼もOK 次スレは>>980 が立てること 無理なら細かく安価指定 関連スレ Excel VBA 質問スレ Part79(ワッチョイあり) https://mevius.5ch.net/test/read.cgi/tech/1674875532/ Excel VBA 質問スレ Part80(ワッチョイあり) https://mevius.5ch.net/test/read.cgi/tech/1700826110/ ※前スレ Excel VBA 質問スレ Part79 https://mevius.5ch.net/test/read.cgi/tech/1674874007/ Excel VBA 質問スレ Part80 https://mevius.5ch.net/test/read.cgi/tech/1685489018/ Excel VBA 質問スレ Part81 https://mevius.5ch.net/test/read.cgi/tech/1713416618/
799 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 10:16:56.42 ID:38AbBGg0.net] VBAの属人化リスクの議論って、むしろそういう小規模な会社こそが最も意識すべきことでしょ。中規模以上の会社なら、そもそも低質なVBAコードに業務を依存させるような間抜けなこと自体があまりないだろうし、仮にそういう事態を生じさせてしまっても、最悪追加コストで何とかできなくはない。 小規模会社には、VBAを「効率的」な「武器」だと思いこんで飛び付いて、必要な管理もしないまま「フルに活用」した挙句、にっちもさっちもいかない事態にしてしまったところが少なくなかった。その教訓としてVBAの属人化リスクが意識されるようになったんだよ。 「武器」にならないとまでは言わないが、そんなに大したものではないし、トータルで見れば「効率的」でもない。好んで「フルに活用」するようなものでもない。そういうVBAの等身大の実像が会社サイドに把握されるようになっただけの話。 「小規模は、持ち合わせてる武器で戦うのがいちばん効率的なんだが 持ち合わせてるExcelだけで戦えるなら、それをフルに活用しない手は無いだろうに」(>>781 ) 多くの会社はこの後半部分が幻想に過ぎないことに既に気付いているが、VBAerには未だにこの幻想にしがみついている人が居るということ。
800 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 13:22:41.57 ID:oLOrCYhj.net] >必要な管理もしないまま「フルに活用」した挙句、にっちもさっちもいかない事態にしてしまったところが少なくなかった ここの事例を具体的に読ませてくれるサイトとかあるん? 統計とか? 文末を「・・してしまったところはほぼ無い」と書き換えてどっかで紹介して、それを鵜呑みにした読者がヨソでお披露目しても 気付かれないでしょ? おソースプリーズな言説 判り易く例として社員20人だとして、事務要員4人は
801 名前:規模に対して多い 大抵は現場と掛け持ちで4〜5人ならまだ普通 事務専任で1〜2人なのが一般的な見立てだろうと思う そのうち一人が丹精込めてVBA育ててたけどあいにく辞めた 他の人間は便利に使わせてもらってたけど、いざ辞められたらVBAだれもチンプンカンプン ならまだ有り得る だからって、それが直接「だからVBA禁止!SaaSに移行!」って成ると頑なに信じてる?それ薦める? 小規模なら小規模なほど環境の変化を嫌うんだ あるものを何とかして使い続けられるならそうしたいってのが人の世の常 多少の手直し必要に成って助力が必要な状況なら、コネ使うなりしてでもそのものを使い続ける工夫に走る タイミング良く同質のものを安価で提供できる業者とかが出てきて、それのサポートも請け負ってくれたりしたなら ソッチに移行していくことはあったとしても、未知のサービスに賭けて投資してそれが自社の実態に即さなかったら 目も当てられない そっちのがリスキーだしその費用は丸々損害に等しい(授業料てか どこの会社も業種が一緒なら業務も一緒だと思ってたら大間違いで、その会社独自の仕組みを持っていたりする それに即して自在に加工できる道具として見ればExcelほど便利なものは無いのも事実 上では商工業を書いたけど、他にも建設、運輸・運送、士業えtc あらゆる業界で現実にExcel VBAが幅広く活用されてる 現実を鑑みても「ExcelのVBAは属人化しやすいから禁止」を言い張って止まないンなら、言い続けてりゃいいけどさ 書かれるたびにおれがしゃしゃり出てつべこべ反論してりゃいいんだろうし [] [ここ壊れてます]
802 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 13:35:20.91 ID:+XeHUCKJ.net] どのように属人化するか・どの様に防ぐかの話題から、 属人化対策として禁止するか否かの話に
803 名前:デフォルトの名無しさん [2025/05/23(金) 15:19:50.38 ID:eOaMEV2I.net] 最後に 知らんけど ってつけた方がいいんじゃんね 知らんけど
804 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 15:21:21.07 ID:mEX1XvmT.net] >>784 他の手段と比較してどうかはともかく、事実としてVBAが問題を起こすことが多いからあんたに仕事があるんだろ? だったら属人化万歳くらいで流しときゃいいのに、いちいち突っ掛かってたら余計なストレスを作るだけだぞ 心配しなくても、あんたが顧客としているような会社は、全体最適云々を語るコンサルやシステム屋は相手にしない まあSaaSについては結構小さいところもわりと積極的に営業するから敵になるかもね
805 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 15:53:12.83 ID:dHvUhuhP.net] 長くてわかりにくい スパゲッティ文章はやめろ
806 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 16:24:52.89 ID:oLOrCYhj.net] うん、途中からどうも話が噛みあわないな、とかは思っていた ひと頃「ExcelのVBAは属人化しやすいから禁止する企業が増えてる」とかのたまう輩が徘徊してて おま、それ、何もExcelに限らんだろ っつー意味で反抗してたし、そんなアホ論をこのスレで 平気で吹聴してる奴に向けて言葉のげんこつしてたんだけど どっか行っちゃったんか? 所詮、世間は、世の中は属人三昧だろ? それで右往左往世界が悪い方向に向かってる実例を まざまざと目の当たりにしてる真っ最中だろ? で、それが悪かどうかなんか、もう少し様子を 見極めなきゃいけないまである なんでわざわざこのスレをターゲットに、VBAは属人化!!!とか言い募らなきゃならん? どこの回し者だ?、と 細かいこと言えば、じゃあってんでこれでもかっつー関数並べ立てて複雑怪奇な数式を組んだ WorkSheetはどうなんだ? 属人化の極みだけどそれはいいのか? 見た目xlsxならおkなのか? と 至るスレで属人化!属人化!!属人化!!!と連呼してるならまだわかるが、なんでExcelスレ限定 で、こないだ別件で「Excel 売上管理」とかでネットをモゾモゾしてたら、そこら中の売上管理アプリの 宣伝サイトが、形ばかりのExcelのサンプル載せて「しかしExcelは属人化」っつー文言を決まり文句の ように添えてたんだ ははぁ〜ん、とね、ある意味腑に落ちたし別の意味でがっかりしてたんだ 言い募る連中が自分の言葉でその悪弊を語れなくて「ネット見ろ」とか返すしか能が無かった理由が判明 そんなサイトだけじゃ無いのは承知してても、結局自分の意見として主張してンじゃなくて、受け売り 余所で聞きかじったのをなぞってるだけのレベルなんだな、と しかし、少なくともこのスレに居続ける人間なら、ExcelのVBAで効率を図ることに意欲的であって欲しい 他のがいいよ、って奴はその宣伝だけして書き逃げしてて欲しい まだまだExcel もっともっとVBA であり続けることが、このスレの健全化に貢献するはずなんだから すぱげってぃwww 読み飛ばせばいいじゃんか 読んでくれなんて頼んで無いぞ?
807 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 16:44:22.04 ID:HIpPOdnz.net] スレタイ
808 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 16:53:05.49 ID:fshmIkkH.net] xlsmって唐突に未知のウイルスの疑いのあるファイル扱いになったりする事もあるから何も知らない人は扱うのが怖いかもね
809 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 17:18:49.63 ID:4lmOgu2G.net] VBA職人が揶揄されるのも分かるわ。 ところで、仮にVBA職人、Ruby信者、Haskell信者、Rust信者で比べられたら、やっぱりVBA職人が圧倒的に格下扱いされちゃうのかな。ちょっと悲しみ。
810 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 17:28:32.52 ID:U7YdU8g0.net] VBAがそれらと同列に比較されることはないから互いに眼中にないと思うよ Excel VBAはピボットテーブルとか分析関数とかと同列の、Excelの上級スキルの一つに過ぎない 一般的なプログラミングとは別物 そのへんのエンジニアより、むしろBIツールがメインのデータアナリストなんかの方がVBA意識してるよ
811 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 17:34:04.21 ID:4lmOgu2G.net] なるほど、そんなものかねぇ。
812 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 17:39:18.56 ID:+XeHUCKJ.net] >>789 文意の分からん文章書いてて噛み合わないもクソもないだろ 伝える気ないなら書くな 読ませる気無いなら書くな 話を曲解して変な方向に話を誘導してるのはあんた自身だ
813 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 18:31:41.70 ID:5vSRBrjF.net] 言語にすぐ上だ下だ騒ぐ奴いるからな
814 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 18:59:01.81 ID:BlARSTzn.net] 言語じたいは下の下 反論する奴すらいない
815 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 19:12:24.88 ID:K4ioF38n.net] 構文として最低限どんなものがあって欲しいかっていうのは人によって違うからねぇ。いまは、JavascriptとかPython辺りが平均的なラインなのかな。まぁ、関数型言語等のユーザーから見ればJavaScriptとかPytnon辺りでも足りないものだらけということになるんだろうし、VBAでも慣れればそんなに不自由ではないよという人も大勢いるわけだしね。
816 名前:デフォルトの名無しさん [2025/05/23(金) 19:54:42.34 ID:ybuGJY2P.net] C言語育ちのワイ、VBA始めた頃「えっ、ポインタってどうやって使うの?」って戸惑った思い出 自分の仕事が楽になる
817 名前:p途で使いまくってるからまぁ属人化しまくりだけど、 自分が退職した後(2年後)は知らんと思っている [] [ここ壊れてます]
818 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 20:17:02.36 ID:dHvUhuhP.net] この辺がつらい ・tryがない ・for eachがバリアントのみ ・continueがない
819 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 21:01:05.99 ID:61koEGUg.net] まぁ、なければないで何とかやっていけるもんだよ。 このスレではそう言っておくのが無難。
820 名前:デフォルトの名無しさん [2025/05/23(金) 21:05:52.61 ID:fxCKrz9G.net] >>799 C言語にはfor eachがない、なぜならもっと原始的、シンプルな言語だからってCopilotに聞いたのですが本当なのでしょうか?
821 名前:デフォルトの名無しさん mailto:sage [2025/05/23(金) 21:21:09.60 ID:eG6EJpyW.net] >>802 ポインタに++すれば次の要素になるからむしろCのほうが融通が効く
822 名前:デフォルトの名無しさん [2025/05/23(金) 22:01:59.52 ID:ai481srR.net] 4行以上のレスは読む必要無いってマジだな
823 名前:デフォルトの名無しさん [2025/05/23(金) 22:09:05.20 ID:4KSUIwLz.net] ぬるぽ
824 名前:デフォルトの名無しさん [2025/05/23(金) 23:17:20.35 ID:fxCKrz9G.net] >>793 データアナリストならパワークエリーしてほしいな
825 名前:デフォルトの名無しさん [2025/05/24(土) 06:17:34.64 ID:OSW0csek.net] 属人化し易い言語と言うことは融通の利く言語と言うことでもある。 例えば、CやC++ではポインタが使えたけどC#では「それは危険だ」ということで使えなくなってしまった。 代わりにデリゲートを使ってセーフティーに参照しなさい、ってことなんだろうけど、まぁお仕事用の開発だったらそれでもいいのかもしれないけど、 昔PS-VITAってゲーム機があって、これがエクスペリアってスマホとクロスプラットフォームで開発できるように開発言語をC#にしてしまった。 ポインタは確かに参照先間違えると吹っ飛んだりメモリリーク起こしたりと危険なものではあったけど、扱いが面倒ではないし融通の利く機能だった。 それを潰してしまったことがPSPシリーズがVITAで終わってしまった原因ではないかと今でも思ってる。
826 名前:デフォルトの名無しさん [2025/05/24(土) 06:41:52.12 ID:OSW0csek.net] >>798 JavaScriptをやったときには 前から.Net系の言語や、まぁVBAでもそうなんだけど、 何でクラスのインスタンスや文字列とかは変数に入れられるのにメソッドは入れられないんだろ? って思ってた時期があって、 JavaScriptに当たったとき、 あ、出来る言語もあるんだってなって、あれVBAに欲しいなぁとは思った。 後はスクリプト系の言語はスカラー変数で型の指定がないから型の指定に慣れてると逆にそれが面倒だったかな。 VBAで言えば全部Variantで扱ってるようなもんだし。厳密には違うらしいけど。
827 名前:デフォルトの名無しさん mailto:sage [2025/05/24(土) 10:35:16.26 ID:sJ/mZ3mU.net] 若いコにはやっぱPython辺りが人気とか?
828 名前:デフォルトの名無しさん mailto:sage [2025/05/24(土) 13:44:59.73 ID:3VNn3d5Y.net] スピル周りやLET,LAMBDAなどの関数が充実し Excel=ビジュアルな関数型言語だと勝手に思っている
829 名前:デフォルトの名無しさん [2025/05/24(土) 14:39:09.90 ID:a4AdJqTs.net] ビジュアルな関数型言語はemacs-lispだろ
830 名前:デフォルトの名無しさん [2025/05/24(土) 15:44:49.02 ID:0gUvgwlc.net] 表検索するのにSQL使ってたけど、FILTER覚えたら単純な検索ならこれでいいかー、ってなった
831 名前:デフォルトの名無しさん [2025/05/24(土) 20:17:19.55 ID:c7V+L981.net] このスレはバカの話はなぜ長いのか考えるスレになりました
832 名前:デフォルトの名無しさん mailto:sage [2025/05/24(土) 20:41:36.84 ID:6QA0+Pxw.net] 頭の良い人は難しいことを簡単に説明出来る 馬鹿は簡単なことを長々と判り難くする
833 名前:デフォルトの名無しさん [2025/05/24(土) 20:44:24.68 ID:OSW0csek.net] >>813 正直すまんかった 久しぶりにVBAスレ来たからつい・・・ でもVBAはいい言語だと思うよ
834 名前:デフォルトの名無しさん mailto:sage [2025/05/24(土) 21:07:47.86 ID:cYe6QRvj.net] VBAは言語なのだろうか VBは言語だけども
835 名前:デフォルトの名無しさん [2025/05/24(土) 21:42:51.33 ID:ZMjSY/PV.net] A1セルはこのフォルダのパスを記入する A2セルはこのフォルダのパスを記入する 流石にこれは通じる、、、よね?
836 名前:デフォルトの名無しさん [2025/05/24(土) 21:44:12.53 ID:ZMjSY/PV.net] >>816 チューリング完全がプログラム言語の定義なのでしょう? だったらVBAはプログラミング言語なのでは
837 名前:デフォルトの名無しさん mailto:sage [2025/05/24(土) 22:37:10.39 ID:iK5rs3WU.net] A1 Write this folder pass.
838 名前:デフォルトの名無しさん [2025/05/25(日) 12:18:28.20 ID:IvH5YvLQ.net] dictionaryやFileSystemObjectのfunction関数を使っているけど、dictionaryに登録する処理や取得したファイル名やファイルパスに対する操作は事なる こう言う場合、どうすれば個別の条件にも対応できるfunction関数が作れますか?
839 名前:デフォルトの名無しさん mailto:sage [2025/05/25(日) 12:36:22.85 ID:ubpRgCst.net] 異なる操作をひとつの関数で行いたいという質問ですね! まずはどういう操作を行っているのか教えてください!
840 名前:デフォルトの名無しさん mailto:sage [2025/05/25(日) 12:45:27.58 ID:czPn1bap.net] dictionaryは死ぬ予定だから使うのやめなよ
841 名前:デフォルトの名無しさん mailto:sage [2025/05/25(日) 12:53:50.40 ID:ubpRgCst.net] >>822 そうですね! Excelなのだからデータはワークシートに格納するのがスジですね!
842 名前:デフォルトの名無しさん mailto:sage [2025/05/25(日) 13:20:14.05 ID:fZ8kzLje.net] AIみたいな解答ワラタ
843 名前:デフォルトの名無しさん [2025/05/25(日) 16:48:27.92 ID:zOE9ehCa.net] ホントにAIに聞いた。 個別の条件にも柔軟に対応できる function を作るには、いくつかのアプローチが考えられます。例えば、以下のような方法を試してみてはいかがでしょうか。 1. パラメータを活用する 2. Enum または定数を使う 3. コールバック関数を使う
844 名前:デフォルトの名無しさん mailto:sage [2025/05/25(日) 17:36:59.25 ID:QBoxveBd.net] 何をしたいのかが謎 型によって処理を分岐させたいってことかね Function 関数(処理対象) 型名 = TypeName(処理対象) Select Case 型名 Case "Dictionary" Case "File" Case "Folder" End Select End Function
845 名前:デフォルトの名無しさん mailto:sage [2025/05/25(日) 18:31:50.10 ID:czPn1bap.net] >>823 そういう話じゃなくVBS廃止の副作用で連想配列や正規表現が死ぬって話
846 名前:デフォルトの名無しさん [2025/05/25(日) 18:42:26.13 ID:rOBfPREU.net] >>827 VBS廃止の副作用で死ぬのは噂や推測じゃなくて公式の情報なの?
847 名前:デフォルトの名無しさん [2025/05/25(日) 19:07:30.81 ID:IvH5YvLQ.net] ファイルシステムオブジェクトでフォルダの中のファイル名一覧と、ファイルパスを取得したい時もあれば、 ファイル名に部分一致するファイルのパスを取得したい時もある
848 名前:デフォルトの名無しさん [2025/05/25(日) 19:13:49.79 ID:5C/Jye7Q.net] 従来の正規表現の代用って無いの
849 名前:デフォルトの名無しさん mailto:sage [2025/05/25(日) 19:54:07.08 ID:czPn1bap.net] >>828 逆にあれだけ情報出ててなんで死なないと思うの? https://techcommunity.microsoft.com/blog/windows-itpro-blog/vbscript-deprecation-timelines-and-next-steps/4148301 >>830 vba-regex by sihlfallっていう、 RegExp代替のフルVBAで書かれた正規表現エンジンがある
850 名前:デフォルトの名無しさん mailto:sage [2025/05/25(日) 19:58:13.45 ID:bo3VS07C.net] >>829 はい! if文で条件分岐すれば、簡単に実現できます!
851 名前:デフォルトの名無しさん [2025/05/25(日) 20:04:43.89 ID:IvH5YvLQ.net] 私はVBAの正規表現が死んだら、パワークエリーでJavaScriptの正規表現を使うわ set オブジェクト = nothingって必ずした方が動作が確実になるのでしょうか? Wordのドキュメントやアプリ
852 名前:ケーションを処理する時にエラーが出たのでそう思いました。 [] [ここ壊れてます]
853 名前:デフォルトの名無しさん mailto:sage [2025/05/25(日) 22:03:34.39 ID:QBoxveBd.net] 正規表現はREGEX関数が実装されたのでVBAでやる必要なし
854 名前:デフォルトの名無しさん [2025/05/25(日) 22:32:05.60 ID:d/seLvao.net] >>822 知ったか乙 良く調べて書き直せ
855 名前:デフォルトの名無しさん mailto:sage [2025/05/26(月) 02:34:52.38 ID:J879X3+V.net] >>835 Microsoft Scripting Runtimeに依存してるからVBSと共に死ぬ FSOなんかはScripting Runtimeには依存してないから引き続き使える 間違ってるなら指摘して 認識改めるから
856 名前:デフォルトの名無しさん mailto:sage [2025/05/26(月) 09:38:22.00 ID:G1Vrdcz4.net] >>820 が聞きたいのは https://www.limecode.jp/entry/syntax/bind-set-filesystemobject この辺の処理の仕方なんでは? 最後まで精読すれば、どういう書き方をすれば より都合が良くなるか、それなり理解が深まるような
857 名前:デフォルトの名無しさん [2025/05/26(月) 09:53:10.39 ID:wHcYCN0P.net] >>833 >set オブジェクト = nothing それ書かないで過去に何度か問題起きてたような ファイルopenして、close書かなくても勝手に閉じてくれるとしても、書いたほうがいいようなもん たった1行各程度で未然にトラブル防げるなら書いとけと (かと言って、親オブジェクトから連なる小オブジェクトはいちいちnothingせずに、親オブジェクトだけ書いちゃうことも多いけどな。小さい処理だと特に)
858 名前:デフォルトの名無しさん [2025/05/26(月) 12:08:21.83 ID:chNfFSjB.net] >>836 間違えている どのDLLに何が入っているかだ
859 名前:デフォルトの名無しさん [2025/05/26(月) 13:55:33.90 ID:cvwCoF8H.net] >set オブジェクト = nothingって必ずした方が動作が確実になるのでしょうか? した方が良いじゃなくてするべき
860 名前:デフォルトの名無しさん [2025/05/26(月) 17:21:30.90 ID:c1JRhLC0.net] コピペ荒らしこのスレだけ来ないの面白いな
861 名前:デフォルトの名無しさん [2025/05/26(月) 18:35:02.01 ID:FaOK97dk.net] >>837 すみません 今の私は例えばファイルシステムで言えば、 フォルダの中の全てのフォルダ名とフォルダパスを取得 フォルダの中の全てのファイル名とファイルパスを取得 フォルダの中に指定のファイル名と異なるファイルがあれば削除 と言う様に、 それぞれのサブプロシージャを作成する事しかできていません なので、一つのサブプロシージャに条件に応じて複数の処理が行えないかなと思いました 原作論で言えば、一つの処理しかできないサブプロシージャこそ正しいのかもしれませんが あと、それぞれのプロシージャでファイルシステムオブジェクトを宣言とセットをしてしまっています nothingは今までプロシージャを抜けた時点で解放されるから特にする必要がないと思っていましたが、Wordを操作する様になって、nothingをしないと処理が止まってしまうので意識する様になりました
862 名前:デフォルトの名無しさん mailto:sage [2025/05/26(月) 19:11:18.49 ID: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 名前:デフォルトの名無しさん [2025/05/26(月) 20:30:26.44 ID:sP5+kUYx.net] >>842 ご自分で言ってる通り、ひとつのモジュール、関数、メソッド等にはひとつの役割を与えて作るのがセオリーです。ちなみにそれを単一責任原則と言います。 ひとつのプロシージャ内で出来るかと言えば、再起処理やStaticな変数を上手く使えば恐らく出来ないことは無いでしょうが、そうするメリットをあまり感じません。 ひとつのプロシージャで処理するのではなく、ひとつのクラスとしてその辺の処理を行うことを検討しては如何でしょうか? そうすればメンバ変数として宣言したもののインスタンスをコンストラクタで生成することも出来ますし、デストラクタで解放することも出来ますよ
864 名前:デフォルトの名無しさん [2025/05/26(月) 20:36:57.49 ID:sP5+kUYx.net] ×再起処理 ◯再帰処理 誤変換すまんこ
865 名前:デフォルトの名無しさん [2025/05/26(月) 21:18:23.47 ID:FaOK97dk.net] >>844 クラスモジュールを一通りやった事がありますが、いまいちクラスモジュールの使い方を知りません どうすればそれぞれの機能をクラスモジュールで効率的に実装できるでしょうか?
866 名前:デフォルトの名無しさん mailto:sage [2025/05/26(月) 22:59:03.14 ID:Eh03XDLb.net] セルから機種依存文字を直接拾ってくるのは難しいですか? 例えば☐(unicode:2610)が入ってるセルをクリックすると☑(unicode:2611)に書き換える、みたいなのを実装する場合、 if(Range("A1").text="☐")then だとRange("A1").textでセルの文字は取得できませんよね? (もちろん「="☐"」で直接比較することもできませんが) どうにかしてセルの機種依存文字を拾ってきてその種類を判定することは可能でしょうか?
867 名前:デフォルトの名無しさん mailto:sage [2025/05/26(月) 23:15:54.66 ID:MWZ/4kNq.net] >>847 Hex(WorksheetFunction.Unicode(Range("A1")))
868 名前:デフォルトの名無しさん mailto:sage [2025/05/27(火) 15:49:48.18 ID: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 名前:デフォルトの名無しさん mailto:sage [2025/05/27(火) 17:59:07.28 ID:2OPk25Mu.net] >>848 解決しました。 ありがとうございます。
870 名前:デフォルトの名無しさん [2025/05/27(火) 20:17:39.42 ID:3QS90eHP.net] Excelの話ではないからスレ違いなんですが、 Wordのドキュメントの2ページ目の行に文字列を挿入するにはどうしたらいいでしょうか? 2ページ目の〜行目にと言う様な指定はできないのでしょうか?
871 名前:デフォルトの名無しさん [2025/05/27(火) 20:38:35.17 ID:0hlUsnMF.net] >>851 スレチとわかっていて厚かましい 死ね
872 名前:デフォルトの名無しさん [2025/05/27(火) 20:52:46.35 ID:OuONf5SF.net] >>852 この馬鹿モンが! >>851 いい質問ですね ExcelのほうがメジャーでWordはマイナーなのだけど WordのVBAをはじめた人にとっては初期段階でやりたい操作なのではないでしょうか? 簡単ではないですが解決策はあります たしかinformationみたいな名のプロパティを使ったような気がする (もうWordVBAは数年使ってないから忘れた) ChatGPT使えば教えてくれるかも
873 名前:デフォルトの名無しさん mailto:sage [2025/05/27(火) 20:54:35.84 ID:DtCiAPP8.net] >>853 死ね
874 名前:デフォルトの名無しさん mailto:sage [2025/05/27(火) 22:13:59.20 ID:JUnNHiQe.net] >>851 ActiveWindow.ActivePane.Pages(2).Rectangles(1).Range = "文字列" & ActiveWindow.ActivePane.Pages(2).Rectangles(1).Range
875 名前:デフォルトの名無しさん [2025/05/28(水) 00:45:03.58 ID:7WzKj5D7.net] フォームを作るのに標準のコントロールやAPIでは動かないことがあったから、ついにPowershellで作り始めちゃった
876 名前:デフォルトの名無しさん mailto:sage [2025/05/28(水) 01:00:15.46 ID:+7HocyMO.net] PowerShellは System.Collections.Genericが使えるからかなり楽だよなぁ VBAと違ってフォームデザイナが標準で付いてないのが難だが
877 名前:デフォルトの名無しさん [2025/05/28(水) 07:40:29.71 ID:LbsE8EcH.net] VSの方が楽なんでは PS使ったことないけど
878 名前:デフォルトの名無しさん [2025/05/28(水) 08:42:06.86 ID:WNN+73zR.net] PowerShellはbatと違って、一手間や権限設定が必要と聞いたからやめた震え声 本当にそうなのですか?
879 名前:デフォルトの名無しさん [2025/05/28(水) 08:58:57.33 ID:DZlhdmsz.net] 震え声で言ってるの?
880 名前:デフォルトの名無しさん mailto:sage [2025/05/28(水) 09:02:42.36 ID:3/66YXCT.net] スレタイを音読してみよう
881 名前:デフォルトの名無しさん [2025/05/28(水) 09:56:27.88 ID:0RI44N1Y.net] エグザイル ビバ しつもんしる
882 名前:デフォルトの名無しさん [2025/05/28(水) 20:05:51.40 ID:WNN+73zR.net] VBAでファイルやフォルダのパスはいつも一覧表で利用しているのですが、当然属人化するリスクがあるので、もっと柔軟にパスを設定できる方法を探しています。 今考えているのは、ファイルやフォルダが見つからなかった時にダイアログを開いてフォルダやファイルを選択させ、選択したファイルやフォルダのパスをセルに記入する、と言う方法なのですが、もっと簡単で確実で柔軟な方法はないでしょうか?
883 名前:デフォルトの名無しさん mailto:sage [2025/05/28(水) 20:44:52.08 ID:Z5h4paoG.net] 自分は設定シートを用意して、そこに記述してあるものを参照してる
884 名前:デフォルトの名無しさん mailto:sage [2025/05/28(水) 20:50:09.42 ID:bd87TuSw.net] ログインユーザーのマイドキュメントをルートにして開く 具体的には「HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\Personal」 のパス
885 名前:デフォルトの名無しさん [2025/05/28(水) 21:40:10.79 ID:WNN+73zR.net] >>864 その設定用シートに 例えばフォルダやファイルを複数選択した状況で右クリックのパスをコピーでシートに貼り付ける という事さえも出来ない、わからない人も想定しないといけない訳で、、、
886 名前:デフォルトの名無しさん [2025/05/28(水) 21:58:53.67 ID://Fv0twK.net] >>863 エクスプローラーからファイルをドラッグドロップ
887 名前:デフォルトの名無しさん [2025/05/28(水) 22:16:15.52 ID:WNN+73zR.net] >>867 知らなかったです これができるなら本当に希望が見えてきました
888 名前:デフォルトの名無しさん [2025/05/28(水) 22:18:57.59 ID:QfAx2JsO.net] 馬鹿ばっか
889 名前:デフォルトの名無しさん [2025/05/28(水) 23:46:46.18 ID://Fv0twK.net] >>868 https://excel.syogyoumujou.com/memorandum/d_and_d_1.html このやり方が簡単そう
890 名前:デフォルトの名無しさん [2025/05/29(木) 07:11:07.31 ID:cC95Jm/J.net] >>870 よくよく考えれば当たり前なんだけど、ドラッグ&ドロップで追加する機能もあるんだ これは便利だ
891 名前:デフォルトの名無しさん [2025/05/29(木) 17:25:49.51 ID:fp+yAGdo.net] FileSystemObject の TextStream が使えないなら ADODB の Stream を使えばいいじゃない と思ったら挙動が違ってびっくり
892 名前:デフォルトの名無しさん [2025/06/01(日) 20:16:56.40 ID:wTah86rB.net] 初歩的な質問で申し訳ないですが、マクロ実行中にエラーなどでデバック画面、エディタ画面に移動せずに、エラーハンドリングなどを実行してプロシージャを終了するにはどうしたらいいですか?
893 名前:デフォルトの名無しさん mailto:sage [2025/06/01(日) 21:54:45.65 ID:fzXRF4Kq.net] >>873 On Error Resume Next
894 名前:デフォルトの名無しさん mailto:sage [2025/06/02(月) 00:34:11.70 ID:14Td775l.net] [ツール] [オプション] [全般] エラーでトラップ ●エラー処理対象外のエラーで中断 ということではなくて?
895 名前:デフォルトの名無しさん mailto:sage [2025/06/02(月) 00:35:28.23 ID:14Td775l.net] ×エラーでトラップ ◯エラートラップ
896 名前:デフォルトの名無しさん [2025/06/02(月) 07:36:05.35 ID:hx4qvUMZ.net] >>614 on error goto ラベル名 vba エラーハンドリング で検索して例を見た方が早いよ
897 名前:デフォルトの名無しさん mailto:sage [2025/06/02(月) 08:46:36.26 ID:IeMpK/LE.net] >>614 そんなひとつのモジュールに詰め込んだら管理しにくいでしょ。 モジュールは分ける。
898 名前:デフォルトの名無しさん mailto:sage [2025/06/02(月) 09:24:06.39 ID:3Ov4fjqk.net] >>878 何を基準にかを書かかないと役立たずじゃない?
899 名前:デフォルトの名無しさん mailto:sage [2025/06/02(月) 15:03:33.91 ID:DSKTrfoz.net] 馬鹿はそんなことも判らないのか
900 名前:デフォルトの名無しさん mailto:sage [2025/06/02(月) 15:07:32.82 ID:OjGRkHiP.net] >>880 スレタイ読めない馬鹿w
901 名前:デフォルトの名無しさん [2025/06/02(月) 19:50:00.14 ID:K2UVQp3e.net] >>614 ひとつのモジュールにはひとつの役割を ひとつのプロシージャにもひとつの役割を 与えて書けばいいんじゃない? もちろん、モジュールとプロシージャでは 与える役割が全然変わってくるけど 例えばモジュールに車という役割を与えたら プロシージャには走る役割を与えたり 後はセンス
902 名前:デフォルトの名無しさん [2025/06/02(月) 20:06:38.96 ID:Xhmb9taU.net] ありがとうございます やはり on error goto ラベル名 なのですね
903 名前:デフォルトの名無しさん [2025/06/02(月) 20:25:45.14 ID:gI3jZeU7.net] on error resume next ヤバそうな処理 if err.number<>0 then エラーリカバリー end if on error goto0
904 名前:デフォルトの名無しさん [2025/06/02(月) 20:45:44.86 ID:Xhmb9taU.net] >>884 エラーが発生している、あるいはしそうな処理がある、というよりは、マクロ実行中にどんなバグでも発生したら、発生した時点で終了させる必要があります
905 名前:デフォルトの名無しさん mailto:sage [2025/06/02(月) 21:35:59.74 ID:nQl9pEtd.net] 終了前に err.number = エラー番号 をセットしてジャンプさせるハンドラがいる こわー
906 名前:デフォルトの名無しさん mailto:sage [2025/06/02(月) 22:06:18.54 ID:ZCDsMgZ+.net] Sub Div0() On Error GoTo Err MsgBox 1 / 1 MsgBox 1 / 0 MsgBox 1 / -1 Err: MsgBox "ゼロで割るな、クソが" End End Sub
907 名前:デフォルトの名無しさん mailto:sage [2025/06/02(月) 22:26:41.07 ID:ncJUEcFA.net] Err: の前で Exit Sub しないと
908 名前:デフォルトの名無しさん [2025/06/03(火) 07:35:55.27 ID:o/OLh2ct.net] 異常が起きる前にファイル開いてた場合、closeしないで終了してしまうとかある
909 名前:デフォルトの名無しさん [2025/06/03(火) 07:39:00.03 ID:/ZJ1mBw3.net] VBAのツール作りは時間がかかるのが当たり前でしょうか? 作り方は分かっているし、作るツールもたいしたものではないのに、それでも1日2日では終わらないです
910 名前:デフォルトの名無しさん [2025/06/03(火) 10:48:59.43 ID:Kk3A2bVT.net] ものによる、人による、まともにテストしてるかにもよる
911 名前:デフォルトの名無しさん mailto:sage [2025/06/03(火) 10:57:06.67 ID:Q0vXXWY4.net] どうせ著作権侵害や不正アクセスツールだろ
912 名前:デフォルトの名無しさん [2025/06/03(火) 19:25:30.47 ID:gpacmpqZ.net] >>890 まぁそうだね だから綺麗に部品化しておくことが大事なんだよ それを後で使い回せるようにね
913 名前:デフォルトの名無しさん [2025/06/03(火) 20:26:44.49 ID:/ZJ1mBw3.net] 自分が勤めている会社で理解者や協力者を増やそうと、少しでもVBAに興味を示した人や、VBAを齧っている人を相手に勉強会を開催しても、結局VBAがわかる人は少ない という話を聞きますが、やっぱりVBAといえど、難しいのでしょうか? Power Queryでもそういう話を聞きます
914 名前:デフォルトの名無しさん mailto:sage [2025/06/03(火) 21:02:42.93 ID:cgHky4oh.net] VBAが難しくないんだったらさっさとVBA卒業して本職のITエンジニアになった方が稼げるからねえ 向上心がありすぎてもいけない、中途半端なツールなので
915 名前:デフォルトの名無しさん [2025/06/03(火) 21:09:44.47 ID:Kk3A2bVT.net] チンタラ残業代稼いでる人にとって効率化は最大の敵 VBAにしろRPAにしろ最大の抵抗勢力よ
916 名前:デフォルトの名無しさん [2025/06/03(火) 22:04:21.82 ID:gr7bEf2i.net] >>872 で愚痴って終わりなのもアレだから一応書いとく ・事象 FileSystemObject.TextStream.ReadLine と ADODB.Stream.ReadText(adReadLine) が同じ結果にならない ・原因 改行コードが CRLF と LF が混じったお行儀のよろしくないファイルだった ・対処 LineSeparator = adLF として Replace(ReadText(adReadLine), vbCr, "") とやったらOKだった
917 名前:デフォルトの名無しさん mailto:sage [2025/06/03(火) 23:26:25.06 ID:aKU11sxP.net] >>897 Microsoftのマニュアルよりも詳しい説明 ADODB.Stream: https://atsumitm.iobb.net/its/its-050.php TextStream: https://atsumitm.iobb.net/its/its-051.php
918 名前:デフォルトの名無しさん [2025/06/03(火) 23:46:58.61 ID:gpacmpqZ.net] >>894 VBAは比較的間口が広くてとっつき易い言語ではあるとは思うよ ただ、何の言語でもそうだけど教える人がいると受動的になりがちで聞いてりゃ分かるようになると思ってしまうのはマズい 聞いてりゃ分かるようになる言語なんて存在しない 分かる人が少ないのは結局、VBAを本当に必要であることを迫られる立場に無いからだと思う VBA出来なきゃ今いる会社をクビになるくらいに迫られたら大概の人は理解する でも教えてくれる人がいるということは恵まれたことだと思うよ このスレにいる大多数の人は恐らく独学で仕事場で使えるようにならざるを得なかった立場なんじゃないかな
919 名前:デフォルトの名無しさん [2025/06/03(火) 23:58:42.71 ID:/ZJ1mBw3.net] >>899 私も完全独学で覚えました というプログラミングは独学で学んでいる人ばかりではないのですか? プログラミングスクールは役に立たないし、かと言って会社は教えてくれない
920 名前:897 [2025/06/04(水) 00:06:22.21 ID:/Ak3M73b.net] >>898 このサイトぐぐるとよく見かけるようになったけど、詳しすぎて理解できないw
921 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 00:40:57.38 ID:b8XC2mTd.net] 自学できない人はダメだよね
922 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 05:30:19.54 ID:3c6clsCg.net] 独学って、大半の人は言語に固有の文法と、開発環境に依存する実行方法を覚えただけでしょ だからデータ型の違いとか文字コードとかアルゴリズムとかファイルシステムとか、基本がわかってないから別の言語に手を出せない
923 名前:デフォルトの名無しさん [2025/06/04(水) 06:02:44.09 ID:/hC9EQXc.net] ここ見てりゃわかるけど、コピペで動いて偉くなったつもりの馬鹿ばっかだから
924 名前:デフォルトの名無しさん [2025/06/04(水) 07:11:35.77 ID:jKpT1SFo.net] >>903 そうね それはその通りだと思うわ だから>>894 の言ってる教えている人が そもそものVBAの基本的な型やら 分岐や演算とかよく使うObjectの扱いとかを 最初に教えていることを切に願うわ
925 名前:デフォルトの名無しさん [2025/06/04(水) 07:34:51.95 ID:BFbm2+Cn.net] >>900 覚えるのは自分、教わったのに覚えてないようでは学べてない あと文法は覚えてもアルゴリズムは考えるもの 教わってないからできないって言ってるのは初心者以下な
926 名前:デフォルトの名無しさん [2025/06/04(水) 07:44:26.54 ID:f2CAL3f8.net] やる必要性がないからやらないけど、Pythonが簡単というならPythonだってわかる気がするし、C言語がFor eachもない様な単純な言語だというならそれはそれでできそうな気もする(Copilotがあるから尚更)。 ローコードにしろスクラッチにしろそれは同じ。 既製品のソフトウェアを導入するか、VBAで作成するかならどちらが安いと思いますか? もしVBAの方が安いなら世の中マクロだらけだと思うのです。
927 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 08:21:45.39 ID:B6zQeN2g.net] 誰も責任を負いたくない、率先して矢面に立ちたくない方々だらけだから
928 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 08:50:54.30 ID:yTwvetl9.net] >>907 マクロだらけだよ それらを管理する人(作成者)が抜けていくから管理不能になる そういった事象を解決する銀の弾丸としてRPAやノーコードツールが喧伝されたけど、 管理する人がいないって意味では同じなので同じことが繰り返されてる
929 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 10:16:27.04 ID:pOYKhOcI.net] >改行コードが CRLF と LF が混じったお行儀のよろしくないファイル CSVなら普通にあるな 行儀の問題じゃない
930 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 10:36:26.59 ID:yTwvetl9.net] 行儀だよ 少なくともRFC上においては行末がCRLFであると規定されてる ファイルの最後のみがどうでもよい
931 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 11:22:31.03 ID:ZuFYF6Nx.net] >>907 どっちが安いって、保守コストまで考えて言ってる? そりゃ作りっぱなしならVBAのが安上がりだけど、それじゃ後で困るって話をしてるんでしょ
932 名前:デフォルトの名無しさん [2025/06/04(水) 12:21:29.23 ID:pOYKhOcI.net] LFは行末じゃないよ
933 名前:デフォルトの名無しさん [2025/06/04(水) 14:36:42.79 ID:p0LJP29f.net] CSVの行改行と項目内改行が使い分けられてないわけが無い 使い分けられてなければ復元不可能になる
934 名前:デフォルトの名無しさん [2025/06/04(水) 14:39:56.22 ID:p0LJP29f.net] >>914 "あれば可能だが無いの見たことあるのよね…
935 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 16:28:29.01 ID:3c6clsCg.net] 標準の改行コードはOSによって違う CR、LF、CR+LF、LF+CR、すべてのパターンが実在する フィールドに改行やコンマを含めたい場合、レコードの区切りと違うコードを割り当てる場合もあれば、クォートなどの記号でフィールドの範囲を明示する場合もある Windows版Excelはダブルクォートでフィールドの範囲を指定するのが基本
936 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 16:30:20.58 ID:3c6clsCg.net] >>915 それは固定長かセパレータ(コンマ)の数をカウントしてるかどっちかかな
937 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 18:23:31.04 ID:RQn0r/Lq.net] >>916 CR MacOS(UNIX化前) LF UNIX、MacOS(UNIX化後) CR+LF Windows、DOS LF+CR ← なんてOS?
938 名前:デフォルトの名無しさん [2025/06/04(水) 18:39:20.47 ID:f2CAL3f8.net] >>909 RPAにしろ、ノーコードにしろ、なんにしろ、そうなりますよね。 結局社内でどれだけ学習意欲のある人を揃えるかによりそう。
939 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 19:22:49.50 ID:7S8kDVf/.net] >>913 由来のタイプライターを鑑みたらLFは本来行頭に来るべきものだけど、 現実的には行末
940 名前:デフォルトの名無しさん mailto:sage [2025/06/04(水) 19:55:51.24 ID:frrYvMiA.net] 頑張ってVBA勉強したところでプログラミングスキルとしては流石に時代遅れ&最底辺だし、 事務員としてスキルアップしたいならツールに入れ込むより業務知識を強化した方がいいし、 組織の中で出世したいなら自分でVBA書くより他人に書かせて継続的にスケールする仕組みを作るべき そして、めでたく業務効率化できたとして、いず」行き着く先は「脱Excelで属人化解消&業務効率化」でVBA職人は悪者扱いだ 本当にVBAを広めたいのなら、個人の意欲に頼るのではなく、組織として適切なインセンティブを設けることだな
941 名前:デフォルトの名無しさん [2025/06/04(水) 20:02:53.71 ID:f2CAL3f8.net] >>921 結局、経営者次第だよね まるでITや業務効率化に興味がないなら何もできない 社員の進言に耳を傾けないなら騙されもするし、せ
942 名前:っかく導入したツールは社員にとって非常に使いづらい [] [ここ壊れてます]
943 名前:デフォルトの名無しさん [2025/06/05(木) 00:29:50.41 ID:Nu77Yg2O.net] >>921 そっか あなたはこのスレ卒業だね
944 名前:デフォルトの名無しさん mailto:sage [2025/06/05(木) 08:17:29.72 ID:FSpPjL7A.net] 四行目までは自虐だろ? 言いたいのは五行目だけって意味と捉えたが、どうなんだ まあ、ちょっと過剰に反応し過ぎなきらいは否めないが
945 名前:デフォルトの名無しさん mailto:sage [2025/06/05(木) 08:45:28.01 ID:Lp1WVm/I.net] >>921 組織の中で継続してスケールする仕組み作ったなら属人化してないんだから悪者になる理由なくない?
946 名前:デフォルトの名無しさん mailto:sage [2025/06/05(木) 09:07:39.20 ID:FSpPjL7A.net] お利口さんに成ろうとしてアタマでっかちに成り過ぎ 大工だっていろんなレベルもあるし色んな層が大工してる その場しのぎのやっつけ大工も居れば、客の要望を叶えるために青写真から描ける熟練大工もいる 新人大工なら木の特性とか部材同士の相性とかもよく理解しないまま最新部材使って威張ってみたり ガルバリウムには使ってはいけない釘平気で使って1〜2年後にはその部分からサビを拡げる原因作って顰蹙買うし それでも世の中は回ってる 改善なんか数年で変化してくものだ、という前提を踏まえてれば、それに見合うコストで運用出来てれば御の字
947 名前:デフォルトの名無しさん mailto:sage [2025/06/05(木) 10:31:37.20 ID:1teg7ITB.net] >>925 コンサルはいわゆるExcelバケツリレーの非効率さを指摘してくるのが常道 VBAで個々人の作業が省力化されてようとフローは変わらないので、実際非合理だから仕方ない その上で現行業務の調査として関係者全員にヒアリングして介在するワークシートやマクロをつぶさに調査するのにかかる莫大な費用の見積りを提示されると、 もう経営層からはVBA職人なんて非効率な業務を助長するだけの排除すべき敵としか見えなくなるわけよ
948 名前:デフォルトの名無しさん mailto:sage [2025/06/05(木) 10:49:41.34 ID:1teg7ITB.net] あと、業務を見直してシステム化しようとした際にVBAが悪者になる大きな原因として、 一見簡単な処理に見えて蓋を開けたらたまに複雑怪奇な難攻不落の化け物が出てくる、ってのがある これ、Excel中心のワークフローをシステム化する際にはよくある話で、スケジュール遅延や予算超過を引き起こすことが多い そうなるとシステム部門や現場が経営層に頭下げるのは当然として、上場企業だと株主に経営層が謝罪なんてケースもある ここまでくるともうVBAなんて悪者もいいとこよ
949 名前:デフォルトの名無しさん mailto:sage [2025/06/05(木) 10:55:09.32 ID:Lp1WVm/I.net] それらは継続してスケールする仕組みを作れていない場合の話じゃないの? 複雑怪奇な難攻不落の化け物って、それスケールできる仕組み作れてなくない? そもそもの話が噛み合ってないよ
950 名前:デフォルトの名無しさん mailto:sage [2025/06/05(木) 11:09:55.37 ID:1teg7ITB.net] >>929 隅々まで適切にガバナンスを効かせながら使うならいいんじゃない? それができるほどの優秀なリーダーがVBAを選ぶかは疑問だけどな どんな組織でも、人が増えれば馬鹿も増えるし目も行き届かなくなるものだ
951 名前:デフォルトの名無しさん mailto:sage [2025/06/05(木) 11:27:50.93 ID:Z5osrhWk.net] Excelバケツリレーは業務や人員を追加していく分にはスケールするよ 後から変更するのが困難でありシステム化が前提なら極めて非合理だけ
952 名前:デフォルトの名無しさん [2025/06/05(木) 17:48:57.22 ID:lb5raFks.net] >>928 IR出すレベルのVBAは確実に一見簡単そうな処理では無いと思います。 そこまでの規模のシステムなら、それこそ何かしらの製品やサービスを導入してください。
953 名前:デフォルトの名無しさん [2025/06/05(木) 17:54:18.01 ID:lb5raFks.net] ローコードツールや多言語の方がいいのはその通りだと思います VBAはOfficeしか扱えないのだから
954 名前:デフォルトの名無しさん mailto:sage [2025/06/05(木) 18:20:52.21 ID:uYkJABQ4.net] > VBAはOfficeしか扱えないのだから AutoCAD、SOLIDWORKS、・・・
955 名前:デフォルトの名無しさん mailto:sage [2025/06/05(木) 18:33:57.70 ID:Lp1WVm/I.net] >>933 そうなんだ?知らなかった
956 名前:デフォルトの名無しさん [2025/06/05(木) 20:15:40.58 ID:r0Qxvap7.net] そもそもパッケージやクラウドサービス使えば、中身は全くわからない 手の出しようがない 自前なら何とかなる そこをどう捉えるかよ そもそも基幹システムをVBAで作らないし (小企業は知らんが) 作っても枝葉よ
957 名前:デフォルトの名無しさん [2025/06/05(木) 20:29:53.99 ID:lb5raFks.net] >>936 C、CSVで吐き出せればなんとか(震え声) TYPEを全く使ってこなかったのです。 しかし、この度同じモジュールで多数のstring型の変数を宣言する必要があります。 TYPEデビューしようと思うのですがどうでしょうか?
958 名前:デフォルトの名無しさん [2025/06/05(木) 23:29:45.76 ID:fxlZJI+h.net] ここで聞かなきゃいけないような馬鹿はやめとけ
959 名前:デフォルトの名無しさん [2025/06/05(木) 23:53:54.23 ID:r0Qxvap7.net] >>937 type稀にしか使わないので調べたら CollectionやDictionaryに格納できないと マジか、知らなかったわ これに使うならクラスにしたらいいかもね
960 名前:デフォルトの名無しさん mailto:sage [2025/06/05(木) 23:57:55.29 ID:0HOZWCXV.net] >>920 リアルタイプライターではLFの位置は任意だよ 行頭とか行末とか関係なく、行の途中でも好きな所でline feedは可能
961 名前:デフォルトの名無しさん mailto:sage [2025/06/06(金) 01:00:59.18 ID:gfk/0ela.net] >>940 CRLFはCRが来る時点でLFが行末じゃなくなるって話
962 名前:デフォルトの名無しさん mailto:sage [2025/06/06(金) 08:39:00.12 ID:cx/TERMm.net] Enterキーの矢印ってLF-CRだよね ↓ ← CR-LFならこういう向きじゃないとおかしい ← ↓
963 名前:デフォルトの名無しさん mailto:sage [2025/06/06(金) 09:32:23.47 ID:rGtsPzUl.net] VBAでクラスモジュールを使っていろいろやるのもなしとは言わないけれど、それなら正直JavaとかPythonとかの普通の言語を勉強した方が良いような気もするかな。クラスモジュールって、よくある普通の言語とはちょっと違ったVBA固有の仕様に過ぎないし。
964 名前:デフォルトの名無しさん mailto:sage [2025/06/06(金) 09:44:39.10 ID:4a1tHPn5.net] >>943 JavaScript様のプロトタイプに喧嘩売る気か
965 名前:デフォルトの名無しさん mailto:sage [2025/06/06(金) 10:07:22.76 ID:NfW6LToZ.net] クラスモジュールはVBA固有というかCOMの仕様 COMの絡まない処理で無理に使う必要は全く無いし、COMを理解してないと不可解な仕様が多い
966 名前:デフォルトの名無しさん mailto:sage [2025/06/06(金) 10:45:07.80 ID:c6RrnkVo.net] 他言語でクラス使ってたらクラスモジュール作りたくなる病
967 名前:デフォルトの名無しさん mailto:sage [2025/06/06(金) 11:16:07.96 ID:FmZludjM.net] COMってどう勉強するんだろ 漠として簡潔な説明がなかなかなく IUnknownやらなんやら、
968 名前:デフォルトの名無しさん [2025/06/06(金) 11:35:48.78 ID:3VaYoART.net] InsideCOMを辛抱強く読むのが唯一の道 それ以上の資料もかみくだいた解説書もない
969 名前:デフォルトの名無しさん [2025/06/06(金) 18:33:04.93 ID:lAxJJHmL.net] っ https://learn.microsoft.com/ja-jp/cpp/mfc/ole-in-mfc?view=msvc-170 https://learn.microsoft.com/ja-jp/windows/win32/learnwin32/module-2--using-com-in-your-windows-program
970 名前:デフォルトの名無しさん mailto:sage [2025/06/06(金) 18:52:09.71 ID:4a1tHPn5.net] COMの解説 https://learn.microsoft.com/ja-jp/windows/win32/com/component-object-model--com--portal
971 名前:デフォルトの名無しさん [2025/06/06(金) 19:13:06.68 ID:fJneNGsq.net] >>939 TYPEは他のオブジェクトに引き渡せないとは聞いていました 結局ディクショナリーで登録しました
972 名前:デフォルトの名無しさん [2025/06/06(金) 20:17:15.03 ID:tc8PGxli.net] >>951 ディクショナリだとインテリ使えんけど、まあそれでいいなら
973 名前:デフォルトの名無しさん mailto:sage [2025/06/06(金) 20:34:48.52 ID:2QLQ97JJ.net] たまにいる勘違い人間 「自分、CやJavaできるから低レベルのVBA(笑)なんてすぐマスターできるし」とか豪語するヤツ
974 名前:デフォルトの名無しさん [2025/06/06(金) 21:03:29.16 ID:fJneNGsq.net] 私はファイルパスやフォルダパスの取得や設定、ファイル名やフォルダ名の作成に冗長なコードを書いている気がしてならないのですが、何かいいコードはないでしょうか?
975 名前:897 [2025/06/06(金) 21:52:26.62 ID:CfJ/EVmD.net] Typeの代わりにRecordSet使ったりする Field設定いちいちするの面倒だけど Filterとか使えるしCopyFromRecorSetとかできるし
976 名前:デフォルトの名無しさん [2025/06/07(土) 01:20:40.40 ID:hTJ86lb5.net] >>954 昔はdirやnameだったけど、今はfso使ってればいいんじゃね
977 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 04:19:49.26 ID:GCIZhVy1.net] >>954 その程度の処理なら、冗長で困ることなんかほとんどないよ 自分に理解できる形で書くのが、長い目で見れば一番保守性が高いんだから ちゃんと
978 名前:動いてる物を直そうとして壊すことも多いから、そっとしとけ [] [ここ壊れてます]
979 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 07:03:08.54 ID:QQtzQfGp.net] >>954 末尾の円マーク有無で毎回処理を分岐させてるのならBuildPathを使え
980 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 09:36:28.54 ID:zGsllLLl.net] >>954 その冗長なコードとやらを貼ってみれば何が悪いか指摘してもらえると思うぞ
981 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 10:26:27.74 ID:pGBLBsE0.net] .netの文字列操作ライブラリとか見たらいたせりつくせりで贅沢過ぎるわ!って怒り出しそう
982 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 12:33:58.98 ID:NHsDgqoS.net] タスクバーのアイコンを取得したくて、下記のサイトのC#をVBAに移植しても、Excelがハングアップする C#ではちゃんと動く なぜ? Dim pUIAutomation As New CUIAutomation Dim windowElementTray As IUIAutomationElement Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hTaskBar) ↓ https://learn.microsoft.com/en-us/answers/questions/115440/how-to-find-taskbar-button-screen-rect-of-a-window
983 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 13:25:32.25 ID:QQtzQfGp.net] https://qiita.com/Mrs_P/items/5c8070fd880b9deb284a ↑ここの人がVBAで似たようなことやってますね GetReferenceElementという関数の中に >>961 と同等のコードが書かれているから hTaskBarの値がおかしいんじゃないの? これでブラウザの自動操縦できるのかぁ 便利そうだな
984 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 13:32:49.76 ID:NHsDgqoS.net] >>962 このサイトも見た hTaskBarの値は、C#版とVBA版で同じ値だったので、正しいと思う。 Chromeのウィンドウハンドルでやった場合は、ちゃんと動いた
985 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 13:58:10.47 ID: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 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 14:07:56.34 ID: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 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 15:15:58.64 ID:NHsDgqoS.net] >>965 あ、 Windows 11だと動かないな… >>964 のタスクバーのボタンは動いたけど、 >>965 のトレイアイコンは、最後の1行で、やっぱExcelごとハングアップで強制終了するわ (Set windowElementTray = pUIAutomation.ElementFromHandle(ByVal hWndToolbar)) C#版は、>>965 のトレイアイコンもちゃんと動くんだけど…
988 名前:デフォルトの名無しさん [2025/06/07(土) 16:04:31.64 ID:I++ihMYF.net] >>959 例えばファイルシステムで フォルダ1の中から指定の文字列を含むフォルダを探して 見つかったフォルダのパスを取得して さらにそのフォルダの中から指定の文字列を含むフォルダを探して 見つかったフォルダのパスを取得して そのフォルダの中に指定のフォルダがあるか確認してなかった場合はフォルダを作成するコードです 2〜3回同じ様な事を繰り返しているので冗長な気がしてなりません
989 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 16:09:10.87 ID:WTKqP7i+.net] >>967 それそのままAIに投げたら一瞬で書いてくれるよ
990 名前:947 mailto:sage [2025/06/07(土) 16:28:51.74 ID:ADmBeqPj.net] >>948 , 949, 950 ありがとうございます マイクロソフトのサイトは機械翻訳がどうも…、と敬遠していましたが、参照してみます それから洋書、かぁ…
991 名前:デフォルトの名無しさん [2025/06/07(土) 17:36:52.86 ID:hTJ86lb5.net] >>967 それを平で書いてるなら冗長 再帰処理でやるのがあるべき姿 まずは指定フォルダ下の全フォルダを出力する再帰処理書いてみ (全てが再帰処理ではない。呼び出し元処理と再帰処理の2つ書くことになる。念の為)
992 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 17:47:31.26 ID:QQtzQfGp.net] >>966 Windows11はタスクバーに使われてるクラスが変わってるらしいから関係あるかもよ https://www.autohotkey.com/boards/viewtopic.php?style=19&t=108539 AHKにクラス名を調べるツールがついてたような
993 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 17:55:49.45 ID: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 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 18:21:21.32 ID: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 名前:デフォルトの名無しさん mailto:sage [2025/06/07(土) 18:49:45.58 ID:NHsDgqoS.net] >>971 んー でも、C#ではちゃんと動くので、VBA側の問題な気が… クラスが変わってるのも知ってる。
996 名前:デフォルトの名無しさん [2025/06/07(土) 22:19:45.07 ID:I++ihMYF.net] >>970 やっぱりそうですよね 再帰処理を頑張って覚えます
997 名前:デフォルトの名無しさん [2025/06/08(日) 02:30:07.18 ID:bVJzS0fI.net] >>975 そやね たったこれだけでフォルダ階層どこまでも潜れるのかと感動すると思う (かもしれないw) フォルダ再帰ができたら各全ファイル名列挙も再帰処理の中に追加しとき いつか使う時が来る
998 名前:デフォルトの名無しさん [2025/06/08(日) 03:49:16.50 ID:kACuu3za.net] こんなので偉そうにする馬鹿
999 名前:デフォルトの名無しさん [2025/06/08(日) 10:13:48.24 ID:szoadHGe.net] >>977 わざわざ「私バカです」って手を挙げて出てきてどうした
1000 名前:897 [2025/06/08(日) 10:59:09.81 ID:BE7fUg1L.net] >>976 昔だったら stack overflowとか心配してたけど今はあまり気にしなくて良さそうだね
1001 名前:デフォルトの名無しさん mailto:sage [2025/06/08(日) 11:01:04.08 ID:j4jIPbHU.net] .netのAPIラッパー関数もソース見ると大抵泥臭い事やってんのよね
1002 名前:デフォルトの名無しさん mailto:sage [2025/06/08(日) 11:03:50.75 ID:4qkaLQIW.net] スタック領域は昔からほとんど変わってないから気にする必要はある
1003 名前:デフォルトの名無しさん mailto:sage [2025/06/08(日) 11:07:37.10 ID:j4jIPbHU.net] Excel VBA 質問スレ Part83 https://mevius.5ch.net/test/read.cgi/tech/1749348402/
1004 名前:897 [2025/06/08(日) 11:11:01.02 ID:BE7fUg1L.net] >>982 乙彼 >>981 共有サーバのアドレス変わった時、全フォルダの奥までショートカット探して書き換えたけど 何ともなかったからそんなもんだと思ってた
1005 名前:デフォルトの名無しさん [2025/06/08(日) 12:43:48.49 ID:gXHyLlYW.net] >>976 再帰処理のコード自体はわかるのですが、If文で再帰処理をする、しないまでは考えてなかったです
1006 名前:デフォルトの名無しさん [2025/06/08(日) 14:43:09.01 ID:bVJzS0fI.net] >>984 if? 途中から折り返す時のこと? それなら必要
1007 名前:デフォルトの名無しさん mailto:sage [2025/06/08(日) 16:28:21.07 ID:46RFXcFD.net] 2階層しか掘らないのにわざわざ再帰処理にするかなぁ
1008 名前:デフォルトの名無しさん [2025/06/08(日) 16:56:20.91 ID:DI4VVn6/.net] >>978 構ってもらうのも大変なんだぞ 察してあげなきゃ
1009 名前:デフォルトの名無しさん mailto:sage [2025/06/08(日) 17:17:56.33 ID:8915HtnW.net] >>983 スタックさせたまま全ファイル走査なんてしないだろうから、 ファイルの数何個あろうが同じでは?
1010 名前:デフォルトの名無しさん mailto:sage [2025/06/08(日) 19:19:30.01 ID:4BwIalv3.net] ソース的に簡単にするなら全ファイルのフルパス取って正規表現だな
1011 名前:デフォルトの名無しさん [2025/06/09(月) 07:30:24.52 ID:UIpY0QNU.net] フォルダのショートカットファイルがある場合の動作確認はした方がいいぞ
1012 名前:デフォルトの名無しさん mailto:sage [2025/06/09(月) 08:19:56.01 ID:EHQrQQev.net] シンボリックリンクとジャンクションとハードリンクも動作確認した方がいいぞ パスが255文字超えた場合も動作確認した方がいいぞ
1013 名前:デフォルトの名無しさん [2025/06/10(火) 20:52:05.68 ID:RKOrDLCJ.net] VBAのfor eachやfor nextでif文を使用して条件に合わなかった時にnext するにはどうしたらいいでしょうか?
1014 名前:デフォルトの名無しさん mailto:sage [2025/06/10(火) 21:05:38.20 ID:94f6xD2K.net] forの中をDo-Loopで囲んで脱出したい時はExit Doする
1015 名前:デフォルトの名無しさん mailto:sage [2025/06/10(火) 21:05:45.22 ID: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 名前:デフォルトの名無しさん mailto:sage [2025/06/10(火) 21:17:29.25 ID:KLsW+s5l.net] next の手前にgoto
1017 名前:デフォルトの名無しさん [2025/06/10(火) 21:35:49.89 ID:chtn5cci.net] gotoでnext前のラベルに飛ぶ。ラベルは CONTINUE_1: など
1018 名前:897 [2025/06/10(火) 21:41:20.79 ID:4RtejL7X.net] C言語の呪いから解けずにGoTo使いにくい俺
1019 名前:デフォルトの名無しさん mailto:sage [2025/06/10(火) 21:55:14.34 ID:qJv58WHL.net] 無理して使うもんじゃない そもそもifで処理せずにnextさせたいなら、 逆にifで処理させれば条件に当てはまらなければnextになるんだし
1020 名前:デフォルトの名無しさん [2025/06/10(火) 21:57:34.45 ID:YNq6kTxr.net] 馬鹿ばっかで呆れるスレ
1021 名前:デフォルトの名無しさん [2025/06/10(火) 21:58:07.04 ID:YNq6kTxr.net] 馬鹿ばっか
1022 名前:1001 [Over 1000 Thread.net] このスレッドは1000を超えました。 新しいスレッドを立ててください。 life time: 137日 18時間 26分 52秒
1023 名前:過去ログ ★ [[過去ログ]] ■ このスレッドは過去ログ倉庫に格納されています