[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 01/10 11:15 / Filesize : 313 KB / Number-of Response : 1008
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA 質問スレ Part72



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

552 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 05:14:26.01 ID:XafigDS10.net]
EXCEL以外の言語なら簡単にできるとかいう人っていつもの人ですか?

553 名前:デフォルトの名無しさん mailto:sage [2021/08/16(月) 20:23:33.18 ID:pkWTpyDW0.net]
少なくとも一番ムキになってるアレがそうなんでしょうね

554 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 02:14:38.57 ID:XfCCEtxD0.net]
昔はこのスレまともだったのに、変な荒らしが現れてからおかしくなっただけ

555 名前:デフォルトの名無しさん [2021/08/17(火) 14:49:45.30 ID:n4WKWZLba.net]
昔?あ、俺生まれてないや

556 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 15:23:12.86 ID:2f/o9RsTM.net]
>>552
いつ生まれたの?w

557 名前:デフォルトの名無しさん mailto:sage [2021/08/17(火) 20:35:18.63 ID:4IURpNomM.net]
>>552
5chは年寄りの巣窟ですよ。
子供は他所で遊んだ方が良いですよ。

558 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 01:46:41.56 ID:GJSA9V5J0.net]
す、巣窟?

559 名前:デフォルトの名無しさん mailto:sage [2021/08/19(木) 12:48:42.55 ID:gPE31PeS0.net]
そ う だ よ

560 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 00:11:44.24 ID:YzPl1p2A0.net]
Dim mysubfiles As Files
Dim mysubfile As File

For Each mysubfile In mysubfiles
 中略
Next

このループ中で作成したファイルも
このループ内の処理を通したいのですが
どうしたらよいでしょうか。
具体的な状況は以下のとおりです。
・ループ内では拡張子xlsxのファイルを加工したい。
・しかしxlsmで保存されている場合もある。
・ループの最初にxlsmを開いてxlsxとして保存する処理を入れたものの
 そのxlsxが加工されない



561 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 00:21:12.76 ID:EM+6hHZh0.net]
>>557
xlsmがあればフラグをTrueにして、最後までループしたらもう一度その処理をするとか?
それなら「元々xlsmだったもの のみ」の処理はできないが、中略の中身によってはOKでしょう

「元々xlsmだったもの のみ」処理するのであれば、xlsm処理時点でDictionaryにファイル名をAddして、ループ終わった後に再度ループさせ、Dictionaryにあるファイルのみ処理する

になるかな
読みづらくはなると思うけど仕方ない

562 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 03:30:46.68 ID:fkNLvzJY0.net]
>>557
ループ中で新たに作成したxlsxファイルも、
元々xlsxだっとファイルと同じ処理を行いたいって事でいいでしょうか。

編集するファイル用の変数(例えばTargetFile)を新たに用意して、
中略部分は mysubfile ではなく TargetFile を処理するというコードにしておきます。

冒頭にその TargetFile を何に割り当てるかを決定するコードを書きます。
・mysubfileがxlsxである場合は、mysubfileの参照をTargetFileへそのまま代入
・そうでない場合はxlsxとして保存しなおして、保存したxlsxを取得してTargetFileへ代入

条件によって反復子から取得した値がそのまま扱えない場合はこういう書き方をするのが一般的かと思います。
中略部分を関数にして引数に渡す値を変えるといった表現方法でもいいでしょう。

563 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 06:44:10.09 ID:O2iQQ7aA0.net]
>>557
情況よくわからん
> ・ループの最初にxlsmを開いてxlsxとして保存する処理を入れたものの
保存してるんならファイル名わかってるんだしそのまま処理すればいいと思うんだが…

564 名前:デフォルトの名無しさん mailto:sage [2021/08/20(金) 07:35:23.32 ID:+liSrGPN0.net]
自分で配列なりコレクションなり用意してDoでループ回せよ

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でリスト開いた時だけじゃなくて、アイテム選択したときもイベントが発生していることがわかる






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<313KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef