1 名前:デフォルトの名無しさん mailto:sage [2021/07/18(日) 08:42:15.37 ID:KskL7bEXd.net] !extend:checked:vvvvv:1000:512 ↑同じ内容を2行貼り付けるナリ ExcelのVBAに関する質問スレナリ コード書き込みや作成依頼もOKナリ ※前スレ Excel VBA 質問スレ Part70 https://mevius.5ch.net/test/read.cgi/tech/1616072923/ Excel VBA 質問スレ Part71 https://mevius.5ch.net/test/read.cgi/tech/1621914481/ VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
565 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 07:43:25.84 ID:6SYvdNEC0.net] ループの中で処理するんじゃなく、サブルーチンにして呼び出す方がいいな
566 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 14:52:28.33 ID:+liSrGPN0.net] そのサブルーチンを呼び出すのにどうやってループさせるの? もしくは そのサブルーチンのなかでどうやって列挙させるの? って話だと思うんだが
567 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 14:57:01.36 ID:01P72Y3qM.net] xlsmだったらxlsxにしてそのファイルを引数にして渡す xlsxだったらそのまま渡す それだけのこと
568 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 15:39:01.41 ID:fkNLvzJY0.net] 前々から思ってたんだけど、抽象的に質問書く人多いね あと謎用語作ったり(この前も「打ちあがる」とか何とか) テンプレ作った方がいいんじゃないか?
569 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 15:48:44.06 ID:XV1yMITLa.net] 別に適当に質問してくるなら適当に返せばいいでしょ それなりの回答を求めるならそれなりに質問するのが常識では
570 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 18:27:44.18 ID:pH4dbDdN0.net] >>565 そういうのはいつもの奴だと思ってスルーで良いかと 抽象的に書くのはコードだけにしてほしいね
571 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 19:51:09.61 ID:qaJDzmMG0.net] 質問スレなのに質問しにくい雰囲気を作っていくぅ〜
572 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 22:28:26.67 ID:tsSDUWXI0.net] 問題ない
573 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 00:15:10.89 ID:fb/04mNm0.net] >>568 質問しにくい雰囲気の中であっても質問できる力を身につけて欲しい というこのスレの思いやりがわからんのかね。
574 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 03:34:48.94 ID:ezVaAvb40.net] >>557 んだよコレクションにFileオブジェクト積み立ててFor Eachの最中にコレクションにFile追加したら追加した分だけループしねーのかと思っちまったじゃねーか。 普通に回るわ。 コレクションに積み立てたFileがxlsmのときはxlsxでセーブしてコレクションの中身の参照をそっちに置き換えて開いて加工してセーブすりゃいいだけじゃねーか。 ループし切らないと思ったから、ファイル情報を抱えるエンティティクラス作って、そんなかに加工済みフラグとか設けて、ファイル追加したときにループ処理再帰してもう加工済みだったら処理飛ばすとかしなきゃいけないとか思ったから実は結構骨のある質問じゃないのか?とか思ってバカ見たわ。 いや、単に俺の知識不足だな。すまんかったな。もう寝るわ。
575 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 11:04:58.97 ID:zxg8KyYK0.net] For Eachの順序はファイル名か何かだから、 既にforeachの処理が過ぎたファイル名だと実行されないぞ
576 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 17:09:47.50 ID:aaIGTne20.net] >>557 ループ内で.xlsm→.xlsxに変換したファイル名を配列に追加しておき、 ループを抜けた後で、その配列に格納されたファイルに対して加工処理を行えばいいのでは?
577 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 20:04:21.12 ID:NaiRsfJYH.net] 最初のループは一覧を2セット作るだけにして次のループで処理したら?
578 名前:デフォルトの名無しさん [2021/08/21(土) 20:35:14.71 ID:7GAoG1Iq0.net] Rustのメモリ安全性はボローチェッカーによって担保されているが、 Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、 GC無しでView types参照の有効性を検証することによってメモリ安全性を保証しつつ 限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか? Nimの実験的特徴 著者: アンドレアス・ルンプ バージョン: 1.5.1 nim-lang.github.io/Nim/manual_experimental.html Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し ているにもかかわらず、Cのソースコードを吐き出せるのでC言語でリモートワークされ ている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる 「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
579 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 23:03:58.45 ID:ezVaAvb40.net] >>572 んなこたぁない。 実際やってみてコレクションに追加されたもんは頭から順にファイル名に関係なくFor Eachで拾えるのは確認済み。 ソース展開してもいいけどどっかにソース張り付けて展開出来るサイトない? そこそこ大きくなったのと5chに貼り付けると連続した半角スペースが1個になるから見づらいもんね。
580 名前:デフォルトの名無しさん mailto:sage [2021/08/21(土) 23:17:33.77 ID:ezVaAvb40.net] >>575 ぶっちゃけ始めるのにいい言語スレの誤爆だろうが、Rustは新し過ぎて本とかも殆ど出てないから初心者には向かないよ。 て言うかVisual Studio Codeで開発環境構築しようとしたけど動かん。 手順教えてくれるとありがたいんだがのう。 ま、スレ違いになるからそっちのスレ行くか。
581 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 00:09:36.86 ID:3/Qg+sLj0.net] >>576 foreachは順序の保証は無いから途中で追加したり削除するとどうなるか分からない。 言語によってはエラー出るぐらいの変な挙動 試しにworksheetsでやってみたけど、途中で追加したものは処理されない Sub foo() flg = True For Each x In Worksheets '1周目の時だけworksheetを追加する If flg Then Worksheets.Add flg = False End If Debug.Print x.Name Next End Sub
582 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 00:11:00.32 ID:3/Qg+sLj0.net] >>578 の続き 追加したものに対してもforeach内の処理かましたければ、 サブルーチンとして外に出して個別に実行した方が良い ※arrayに入れてから別のfoeachループにしたほうが良いかもしれない Sub foo() flg = True For Each x In Worksheets '各シートの処理 Call print_worksheets_name(x) If flg Then Set 新シート = Worksheets.Add '新シートの処理 Call print_worksheets_name(新シート) flg = False End If Next End Sub 'メインの処理はここ Function print_worksheets_name(x) Debug.Print x.Name End Function
583 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 00:39:14.99 ID:vfl1uW7oa.net] ググったらサンプルがあったから試してみた。コードはこれ Sub Sample_Files() Dim FSO As Object Set FSO = CreateObject("Scripting.FileSystemObject") Dim myFiles As Object Dim myFile As Object Dim strFiles As String Set myFiles = FSO.GetFolder("D:\test\").Files strFiles = "ファイル数:" & myFiles.Count & vbCrLf For Each myFile In myFiles strFiles = strFiles & myFile.Name & vbCrLf '★ Next MsgBox strFiles End Sub 対象のフォルダに「新しいテキスト ドキュメント2.txt」「新しいテキスト ドキュメント4.txt」の2ファイルを格納 ★にブレークポイントを設定して止まった時点で 対象のフォルダに「新しいテキスト ドキュメント1.txt」「新しいテキスト ドキュメント3.txt」の2ファイルを格納 この結果はMsgBoxは最初に格納されていたファイルのみが表示された これを踏まえたらファイルを新たに保存しても保存したファイルはループ中は参照されないのでは
584 名前:デフォルトの名無しさん [2021/08/22(日) 04:22:11.55 ID:HSx9B6Zm0.net] >>578-580 なるほど言いたいことは分かった。 確かにFor Eachの取得順が保証されないのは正しい。 だがその話には続きがある。 For Each の取得順序が保証されていないのは、 取得元のObjectに依存するから。 https://thom.hateblo.jp/entry/2018/08/11/194900 そしてくだすれでソース展開用サイト教えてもらったから ソース貼っといた。 https://pastebin.com/RBXU7SyT Test3.xlsmとTest4.xlsx作って先にコレクションに登録。 ループ途中でTest1.xlsmとTest2.xlsxを作成して追加しているが、 挙動がおかしいようであれば言ってくれ。
585 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 08:13:33.74 ID:bz4GO5A/0.net] FileSystemObjectのFilesの話だけどCollectionで問題ないから俺の勝ちー ってか?w
586 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 08:38:21.01 ID:HSx9B6Zm0.net] >>582 そもそもループしてる最中の母数を弄るようなことをするのってどうなのよ?っていうのはあるが、 気に食わなければ>>571 で言ったような方法をとればいい。多分少し考えれば他にも色々方法はあるだろうが、 他の人にはともかく、その凄く悔しそうなレス見るとどうやら君は知らない内に勝手に負けてしまったのだろう。
587 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 09:40:51.11 ID:bz4GO5A/0.net] >>576 の話な >>572 はFilesの話だからコレクションでそんなことないとか言われても困るってこと コレクションにしろ保証されてる動作じゃないからうまく行った事例があってもあまり意味はない
588 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 09:49:45.02 ID:AgYnuzAe0.net] いつもの質問に相手した時点で負け
589 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 10:04:31.73 ID:HSx9B6Zm0.net] >>584 別にコレクションじゃなくても配列だろうがディクショナリだろうが何でもいいよ。Filesの中身を最初に積み立て直してループしてやればいいこと。 詰め込み対象のループの動作保証が欲しいなら>571で言った通りエンティティクラス用意して何かに詰め込んで一度加工したかどうかのフラグ持って、追加したらエンティティクラスも追加しといて、ファイル追加したらループ再帰して加工したフラグが立っていれば処理飛ばせばいいこと。 まぁ何故Filesを持ち回ることにそんなに執着しているのか知らんけど、そうでなければこの方法で実現出来るのは確か。 そんなにFiles持ち回ることに拘るなら人の作ったもんに文句ばかり言ってないでそれで実現出来るコード晒せばいい。
590 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 10:46:11.18 ID:vfl1uW7oa.net] こうすればいいよって回答してあげるのはかまわないけど そもそもなぜそれがダメなのかを指摘してあげたるのも大事では 当初の質問であれば >・ループの最初にxlsmを開いてxlsxとして保存する処理を入れたものの > そのxlsxが加工されない 「ループの中で新たなファイルを作ってもFilesではそのファイルが取得できないようだ」という問題点を教えて そのうえで中略のコードをSub化してループで取得したファイルもループの中で作成したファイルも そのSubを呼び出すようにするとか解決策を提示したほうがいいんじゃないかねえ
591 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 11:08:18.32 ID:bz4GO5A/0.net] >>586 何をカリカリしてんのか知らんけどFilesの話にコレクション持ち出して「んなこたぁない。」とか言うのが頓珍漢だって言うだけの話 あと>>571 は積み立てるとかの謎用語使われてて読み飛ばしてるので悪しからず
592 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 11:11:26.73 ID:HSx9B6Zm0.net] >>588 なんだソース晒さないのか。 ならこの会話はここで終わりだな。
593 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 11:39:16.64 ID:bz4GO5A/0.net] はじめから頓珍漢だっていう指摘だから誰かさんにまともな理解力あれば既に終わってた話なんだけどねw
594 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 11:51:49.66 ID:w9I0Mw1ep.net] >>589 バカはほっといてFilesのループだけで何とかする方法ない?
595 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 12:02:21.45 ID:tt5sChhUM.net] 別の配列を用意して、追加と処理を別々にすればいいだけ
596 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 12:08:29.70 ID:vfl1uW7oa.net] >>591 中略で何をしてるか不明だからそこの話題の解決は難しいのでは ループでどんなファイルをFilesに含めているかわからないがループのファイルには拡張子xlsmとxlsxが対象になっているなら ・xlsm→加工してxlsxに変換して保存(元のxlsmは何もしない) ・xlsx→加工してxlsxのまま保存 ・それ以外→何もしない これだけの話にも見えるよね
597 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 12:35:51.87 ID:bz4GO5A/0.net] >>591 > バカはほっといてFilesのループだけで何とかする方法ない? .xlsm ⇒ .xlsx にした時点でFilesの内容がどうなるかはわからんから一旦Filesの内容を配列なりコレクションなりに取り込んでおくしかないと思う
598 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 12:37:07.40 ID:fq28dqqO0.net] リスト構造みたいなのは?
599 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 13:02:31.83 ID:HhgXzLK4H.net] 配列だろうがリストだろうがそこは自由 とにかくループ中で母集団をいじらなければいいだけの話だから
600 名前:デフォルトの名無しさん [2021/08/22(日) 13:03:46.65 ID:0Cz6ueFz0.net] Rustのメモリ安全性はボローチェッカーによって担保されているが、 Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、 GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ 限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか? Nimの実験的特徴 バージョン1.5.1 nim-lang.github.io/Nim/manual_experimental.html 第二プログラミング言語として Rust はオススメしません Nim をやるのです https://wolfbash.hateblo.jp/entry/2017/07/30/193412 Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる 「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
601 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 13:08:21.86 ID:bz4GO5A/0.net] >>595 リストでもいいけどVBAで簡単に扱えるものある?
602 名前:デフォルトの名無しさん [2021/08/22(日) 19:40:10.48 ID:HSx9B6Zm0.net] >>591 遅くなってすまない。 そうだな、バカはほっといて Filesのループだけで何とかする方法か。 Filesのループだけで何とかすることは出来ないことはないが、 綺麗に一重のループという方法は今すぐには思いつかないな。 だが、フォルダから直でやり取りしたいからというのであれば、 方法としては>>571 で書いた方法とほぼ一緒だが、 Filesのループであればエンティティクラスは使えない。 ではどうするか、といったところで、ループで加工を終了したxlsxのパス名、 または加工する際に使ったxlsmのパス名を何等かの形で保持して、 後はファイルを作った際にループを再帰して加工が終わった ファイルの処理は飛ばしてしまえばいい。 そうすれファイルを追加した後のファイルの順序やどこからループするか、 どこまでループするかをあまり気にする必要はない。 ただ、その分ループの回数は増える。が、もし現在の Collectionの仕様が変わったとしても使うことが出来るだろう。 前回作ったソースを少し弄ってそんな感じにしたので、 展開しておこう。 https://pastebin.com/9QVrJDjF
603 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 19:51:55.58 ID:QHUWYA/B0.net] いちおうVBAにCollectionってあるけどな .Net FrameworkのArrayListとかQueueとかつかえばいいんじゃね
604 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 20:00:01.46 ID:QHUWYA/B0.net] まずFilesってのが何なのかはっきりしとけ まあFileSystemObjectのやつだろうけど あれは、位置指定で取り出したり出来なかったりする、かなり特殊な列挙だった気がする つか、追加処理でディレクトリ舐めて、そのあともう1回ディレクトリ舐めて処理すればいいだけじゃないのか? 再帰とか意味不明なんだが たんに2回ループ回すことを再帰と言ってる?
605 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 20:18:32.39 ID:QHUWYA/B0.net] >>596 For Eachでのループ中に、な Filesの列挙が実質For Eachでしかできないのがまあ困ったところなんだが
606 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 20:44:15.61 ID:3/Qg+sLj0.net] >>579 あかんのかねぇ xlsmをxlsxにするだけなら再帰処理は不要なはず
607 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 21:49:43.11 ID:aqCRpfAk0.net] 配列をループ中に、要素を追加・削除するのは、 すべての言語で、バグるから禁止 要素の追加・削除で、要素がずれるから、どうなるか分からない
608 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 21:56:43.26 ID:Dh2ra7Yx0.net] 最終手段はGoToでループ抜けることになるけど、xlsmの時の処理とxlsxの時の処理を分岐させればいいだけよね
609 名前:デフォルトの名無しさん [2021/08/22(日) 22:19:55.50 ID:xquIY43qa.net] 好きなように作れよ
610 名前:デフォルトの名無しさん mailto:sage [2021/08/22(日) 22:29:56.81 ID:fZZZNArf0.net] >>605 だよね そもそもループに拡張子を変えたファイルを追加しようって考えがズレてるだけだよな
611 名前:604 mailto:sage [2021/08/22(日) 23:15:55.98 ID:aqCRpfAk0.net] 完全に、処理を分けて作る まず、拡張子だけを変える。 これで処理対象のファイルを確定させる その後、処理対象のファイルだけを処理すればよい。 この手順なら、処理中に処理対象のファイル数が増減することはない とにかく、バグらないような手順を作ることが大事
612 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 08:26:55.69 ID:LGNn5NAE0.net] >>605 Goto文使うのはエラーのときと エラーとエラーじゃないときの 同じ後始末の部分以外は使うなって 死んだばあちゃんが言ってた
613 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 08:53:51.78 ID:cXrkxB5+0.net] >>609 初心者にはそれしか解法がわからない場合もあるかなと思って プロシージャ分割とかも理解できない場合は、とりあえず動くプログラム作れたらなと
614 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 10:54:22.12 ID:FgZeCk1s0.net] goto finaly
615 名前:デフォルトの名無しさん mailto:sage [2021/08/23(月) 23:10:58.58 ID:JXgHy/i50.net] ちょっとスレ違いで恐縮ですが知ってる方がいたら教えてください 3D CAD(catia v5、ソリッドワークス、NXなど)のVBAについて話題にしてるスレとかご存知の方いれば教えてください
616 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 01:04:28.30 ID:O47VPk1P0.net] そんなものはない
617 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 01:15:14.20 ID:F5g8S0IPM.net] >>612 これらの3D CADにVBAが載ってるの?
618 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 04:11:27.55 ID:daNQErAcH.net] エスパーするとマクロのことだろ
619 名前:デフォルトの名無しさん [2021/08/24(火) 05:20:46.31 ID:TjlSba9p0.net] >>612 馬鹿は死ね
620 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 08:13:34.81 ID:klPKE9MS0.net] >>612 そんなスレは存在しないし立てたとしても誰もレスしないだろう。 質問があるならこっちで聞けばひょっとすると誰か答えてくれるかもな スレ立てるまでもない質問はここで 157匹目 https://mevius.5ch.net/test/read.cgi/tech/1624024239/
621 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 08:30:12.55 ID:g24P+U87M.net] 調べたら、SolidWorksはAPIでVBAとかC(++)とかから呼び出せるみたいだから、Excel VBA で呼ぶ範囲ならこのスレでも良いんじゃない? CAD ソフト側の特有の動作は答えられる人少ないか居ないだろうけど
622 名前:デフォルトの名無しさん [2021/08/24(火) 09:09:24.64 ID:4r51bMHN0.net] >>618 そんな質問してないだろ
623 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 12:58:36.89 ID:v4BujoFfM.net] SolidWorksのAPI呼んでなにかしようとするような奴がこんfなスレでVBAの質問なんてしないだろw
624 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 13:07:40.15 ID:Ggt7zoavM.net] でも、3D CADのVBAって言っちゃうレベルの質問者さんだし...
625 名前:デフォルトの名無しさん [2021/08/24(火) 15:14:02.93 ID:WZMj7UxVF.net] 馬鹿には無理
626 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 18:59:28.08 ID:Tulkbq4hM.net] 最悪go toもありだろ
627 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 20:36:36.02 ID:DkRvLF/FM.net] おまいら、質問者を馬鹿にするのやめろよ
628 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 21:11:06.89 ID:4FqDVhnYM.net] 「貴方には無理」と言ってあげるのも親切 馬鹿が諦めず無理してるおかげで周囲は迷惑してる
629 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 21:17:10.14 ID:PotHtuTn0.net] dllやAPIアリならもうなんでもvbaのような
630 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 21:17:46.98 ID:PotHtuTn0.net] 知ってたら答えるけど、あまりにも知ってる人が少なすぎる メーカーに聞いた方が早いとおもう
631 名前:デフォルトの名無しさん mailto:sage [2021/08/24(火) 22:24:25.02 ID:EnLftN4na.net] >>612 話題になってませんが聞くならこっちのスレかな? VBAなんでも質問スレ Part2 [転載禁止]©2ch.net https://itest.5ch.net/mevius/test/read.cgi/tech/1432173164 0001 デフォルトの名無しさん 2015/05/21 10:52:44 VBAを使った質問ならなんでもござれ 本来の対象であるオフィスアプリを操作する以外の話もOK ゲーム作り、Webアクセス、外部アプリの操作 COM(ActiveX)、Win32API、.NET Framework、DirectXなどなど VBAで実行するものであればなんでも質問してください
632 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 00:31:39.65 ID:1unhm7rk0.net] VBEの入力支援で「WorksheetFunction」って邪魔ですよね。 「Worksheets」が第一候補に表示されればいいのに。
633 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 01:55:37.60 ID:7J8MKXIfa.net] 辞書順だから仕方がないよね
634 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 07:25:33.24 ID:SRu++D3OM.net] 客先のお偉いさんにコンテンツの有効化を行わずにマクロを動かせと無茶振りされるなどした 決してデジタル署名云々をなどという話ではなく 既存のツールのコードをいじらずにWorkbook_Openのイベントを回避せよとのご指示を頂いたのだ どうしたものか
635 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 07:35:04.03 ID:ltkpDR880.net] >>631 他のブックにマクロを書いて ・イベント停止 ・ブックopen Sub foo() Application.EnableEvents = False Workbooks.Open (ThisWorkbook.Path & "\book1.xlsm") Application.EnableEvents = True End Sub
636 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 07:39:39.81 ID:SRu++D3OM.net] あ、他ファイルの新規作成も一切ダメだそうです
637 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 07:50:37.91 ID:ltkpDR880.net] じゃあ基本イベント停止にしてマクロを動かしたい時だけ Application.EnableEvents = True だな
638 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 08:12:30.95 ID:SRu++D3OM.net] 既存のツールのコードに手を加えるのはNG、別のファイルを作成するのもNG、数百人ほどいる作業員に配布してるツールだからExcelの設定を変更して回るのも現実的ではない 要するに作業工数を発生させずにイレギュラーに対応出来る特殊仕様用のツールを作れって事みたい
639 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 09:17:10.78 ID:ZSU75DCm0.net] なんか話おかしくね そのイレギュラー対応ツールはどこに置いて誰が使うことを想定してんだ
640 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 09:40:43.13 ID:ZqZAJ3QxM.net] 相手すんなよ偉いさんに振られた内容を盛って語ってるだけだろ そもそも客先からの要請なら普通にできないって断ればいいだけだし
641 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 10:21:16.42 ID:SRu++D3OM.net] いやまぁ断るんだけどさ 逐一ネットワークドライブのファイルとやりとりをしてるツールを社外の下請け業者にも使わせたいんだと まぁ当然ながら下請け業者からはネットワークドライブに接続はできないんよ だから何するにしてもエラーが出ます。なんならファイルを開いた時にコンテンツの有効化を押した時点でエラー出ますよ。って言ったらコンテンツの有効化を押さずにマクロを動かせば良いじゃないかって怒鳴りながら台パンされたのが昨日の話
642 名前:デフォルトの名無しさん [2021/08/25(水) 10:33:09.92 ID:PF+Wtj1u0.net] それで金もらうんでしょ
643 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 13:39:00.29 ID:9wT7W/qy0.net] >>638 断るという方針を決めているなら解決だな
644 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 14:41:15.54 ID:j973WKJq0.net] ユーザーフォームのコンボボックスでドロップボタンをおすと実行され、リストができるのですが、項目を選択しても反映されず空欄になってしまいます。 反映されるにはどうしたらいいでしょうか Private Sub ComboBox3_DropButtonClick() Dim LastDay As Long, MyYear As Long, MyMonth As Long, r As Long With UserForm1 .ComboBox3.Clear MyYear = Val(Replace(ComboBox1.Value, "年", "")) MyMonth = Val(Replace(ComboBox2.Value, "月", "")) '来月1日の1日前から今月の対象月の終了日を算出する LastDay = Day(DateSerial(MyYear, MyMonth + 1, 0)) 'リストボックス3に今日の日付リストを入れる For r = 1 To LastDay .ComboBox3.AddItem r & "日" Next r End With End Sub
645 名前:デフォルトの名無しさん [2021/08/25(水) 14:45:50.68 ID:vgh3MVy/M.net] しらんけど 月の変更時にやるもんじゃね?
646 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 15:11:25.13 ID:9wT7W/qy0.net] 知らんけど変数の頭によくMyとかmyとか付ける人いるけど私の年とか私の月なの?
647 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 15:32:21.08 ID:KYWpPte7M.net] mousedown でやるとか?
648 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 15:50:44.79 ID:ZSU75DCm0.net] ComboBox3のイベントでやることじゃないんじゃね
649 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 17:16:17.54 ID:92U/3Tama.net] DropButtonClickが発火していない可能性をまず見る Combobox1とCombobox2の頭に「.」が付いていないことが原因か調べる 来月1日の1日前から今月の対象月の終了日…の日本語がよくわからんが、仮にMyMonthが12ならどうなるの?というのは気になる そもそもDay関数で0日を指定しているんだから、どうやってもLastDayって0になるんでは? 最後のが原因かとは思うが、とりあえず気になったところを
650 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 17:19:41.69 ID:92U/3Tama.net] >>646 どうやら0日を指定すると前月末になる仕様なのね 誤った理解で申し訳ない https://vbabeginner.net/find-number-of-days-in-month/
651 名前:デフォルトの名無しさん mailto:sage [2021/08/25(水) 18:17:55.62 ID:7AvRhiNY0.net] >>419 「100点取らなきゃいけない数学のテストが延々と続く」って 表現したことあるけど、あんたの表現は簡にして要を得てるな。
652 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 01:04:55.66 ID:3Wwx5xcw0.net] >>641 まぁなんでもいいんだけどこういうテストしてみる TextBox1を設置してプロパティのmultilineをtrueにしておく んでコンボボックスのイベントの下の方にちょい付け加えてこうする Private Sub ComboBox3_DropButtonClick() Dim MyYear As Integer Dim MyMonth As Integer Dim LastDay As Integer With UserForm1 .ComboBox3.Clear MyYear = Val(Replace(ComboBox1.Value, "年", "")) MyMonth = Val(Replace(ComboBox2.Value, "月", "")) '来月1日の1日前から今月の対象月の終了日を算出する LastDay = Day(DateSerial(MyYear, MyMonth + 1, 0)) 'リストボックス3に今日の日付リストを入れる Dim r As Integer For r = 1 To LastDay .ComboBox3.AddItem r & "日" Next r End With TextBox1.Text = TextBox1.Text & Now & vbNewLine'←これ End Sub すると、combobox3でリスト開いた時だけじゃなくて、アイテム選択したときもイベントが発生していることがわかる
653 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 01:06:07.22 ID:3Wwx5xcw0.net] そもそもcombobox3は結果表示のコントロールだから、ここに余計なもの置くべきじゃないわ Option Explicit Private Sub ComboBox1_Change() If ComboBox1.Value <> "" And ComboBox2.Value <> "" Then AddItemToComboBox3 End If End Sub Private Sub ComboBox2_Change() If ComboBox1.Value <> "" And ComboBox2.Value <> "" Then AddItemToComboBox3 End If End Sub Sub AddItemToComboBox3() Dim MyYear As Integer Dim MyMonth As Integer Dim LastDay As Integer With UserForm1 .ComboBox3.Clear MyYear = Val(Replace(ComboBox1.Value, "年", "")) MyMonth = Val(Replace(ComboBox2.Value, "月", "")) '来月1日の1日前から今月の対象月の終了日を算出する LastDay = Day(DateSerial(MyYear, MyMonth + 1, 0)) 'リストボックス3に今日の日付リストを入れる Dim r As Integer For r = 1 To LastDay .ComboBox3.AddItem r & "日" Next r End With End Sub
654 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 01:06:23.79 ID:3Wwx5xcw0.net] >>650 続き Private Sub ComboBox3_DropButtonClick() '空にする End Sub Private Sub UserForm_Initialize() ComboBox1.AddItem "2021年" ComboBox2.AddItem "8月" End Sub
655 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 01:08:23.20 ID:3Wwx5xcw0.net] Option Explicitつけないのがはやりなんかね 宣言しねぇのがはやりなんかね
656 名前:デフォルトの名無しさん [2021/08/26(木) 10:50:03.92 ID:3EUdzNHVM.net] 質問には必要だが 回答には不要
657 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 14:29:16.05 ID:/k4Lkr6/0.net] VBAのコードを書くウインドウが何かのタイミングで個別ウインドウ表示に切り替わり、バラバラになって元に戻らなくなってしまったのですが、 プロジェクト一覧などが左側にある初期状態に戻すにはどうすれば良いのでしょうか?
658 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 14:59:17.57 ID:2GwscEzmH.net] >>654 KYCU\SOFTWARE\Microsoft\VBA\7.1\Common\Dockを削除 完全な初期状態だと使いにくいから、自分流にカスタマイズした後Common以下を保存しとくといい
659 名前:641 mailto:sage [2021/08/26(木) 17:19:31.21 ID:eaDIsBK00.net] 皆様ありがとうございます。年と月の変更時に組み替えてできるようになりました >>642 それに変更しました >>644 試しましたが、リストの表示すらされませんでした >>645 その通りでした >>650 ありがとうございます。
660 名前:デフォルトの名無しさん mailto:sage [2021/08/26(木) 19:24:12.66 ID:/k4Lkr6/0.net] >>655 ありがとうございます!リセット機能が無いのですねぇ
661 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 02:17:56.45 ID:XzPbf7xa0.net] 請求書つくってて1行ごとに仕切り線を挿れたいです 入力があるセルのセルの下に、オートシェイプ(0.75ptなどの線)を引くことはできませんか? 規定の線では太すぎて表がごちゃごちゃになってしまいます(細線では複数のプリンターでかすれて出ませんでした) Excelでは線の種類が少ないので望みの書類をつくれない、力技でオートシェイプで引きたいけど手作業では大変 請求書データをコピペしてボタンおしたらオートシェイプの線がセルに沿ってしかれる、としたいです
662 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 02:53:29.63 ID:K563/rxVd.net] >>658 できます
663 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 02:57:38.41 ID:K97Q7PgmM.net] 条件付き書式で罫線を引いて 線の太さは色をグレーにしてごまかす VBA使わないなw
664 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 03:20:48.79 ID:k0s+jeSJH.net] >>658 '何か入力済のセルにオートシェイプで下線を引く Sub Macro1() For Each c In ActiveSheet.UsedRange If c.Text <> "" Then Call セルに下線(c.Row, c.Column) Next End Sub Sub セルに下線(r, c) x1 = Cells(1, c).Left x2 = Cells(1, c + 1).Left y1 = Cells(r + 1, 1).Top y2 = y1 ActiveSheet.Shapes.AddConnector(msoConnectorStraight, x1, y1, x2, y2).Select With Selection.ShapeRange.Line .ForeColor.RGB = RGB(0, 0, 0) '黒 .Weight = 0.75 '太さpt End With End Sub
665 名前:デフォルトの名無しさん mailto:sage [2021/08/28(土) 03:32:32.93 ID:XzPbf7xa0.net] >>660 それだとモノクロプリンタに対応できません あと太いのは太いのでやぼったいですよね >>661 休み明けに頑張ってみます オートシェイプで選択できる太さはすべて指定出来ますよね?