Excel VBA 質問スレ Part52

1デフォルトの名無しさん2018/01/27(土) 20:25:05.67ID:Xe+uGT7T
スレ立ての際は一行目に
!extend:checked:vvvvv:1000:512
と入れてスレ立てして下さい

ExcelのVBAに関する質問スレです
コード書き込みや作成依頼もOK

※関連スレ
VBAなんでも質問スレ Part2
http://mevius.2ch.net/test/read.cgi/tech/1432173164/
Access VBA 質問スレ Part1
http://mevius.2ch.net/test/read.cgi/tech/1328536426/

※前スレ
Excel VBA 質問スレ Part51
http://mevius.2ch.net/test/read.cgi/tech/1510107990/

153デフォルトの名無しさん2018/02/11(日) 18:02:54.57ID:zWT4td5V
メゾット君も負けを認められるほど成長したかと感心したもののレス見ると何で勝利宣言してんのか分からなかった

154デフォルトの名無しさん2018/02/11(日) 21:45:11.45ID:jnjDiTfu
今回の使い方は良いのか悪いのか
ちょっと判断つきかねるなぁ
可読性がちょっとね

扱い方そのものは悪いとは思わない
書いてる人も気付いているか分からないけど
やってることはデコレータパターンの
それにかなり近いんだよね
洗練されればそれなりに便利かも知れないね

155デフォルトの名無しさん2018/02/11(日) 22:48:44.70ID:49jQhb5f
タスクスケジューラで、Private Sub Workbook_Open()、の記述のあるブックを開くと、
Private Sub Workbook_Open()が実行されるときもあれば、実行されないときもある。
なんでなんだろ?
その違いが今のところ掴めないでいるんですが、どなたか何か情報をお持ちではないですか?

156デフォルトの名無しさん2018/02/11(日) 23:09:13.81ID:S5L6PYJ0
>>155
ログオフしてるときに動かしたいなら事前にちょっと設定が必要だけどそこら辺は大丈夫?
http://gagaj.hateblo.jp/entry/2015/03/21/162218

157デフォルトの名無しさん2018/02/11(日) 23:28:58.59ID:49jQhb5f
>>156
ユーザーがログオンしているときのみ実行する、にチェックが入っていますので違うと思います。
念のため、紹介してもらったサイトに従いフォルダを作成しましたがそれでも変わらずです。
他に情報ありましたらお知らせください。ありがとうございました。

158デフォルトの名無しさん2018/02/12(月) 07:06:15.59ID:Mlpgnb6c
>>155
実行されない時があるってことは実行される時もあるの?
auto_open()も試してみてよ。
微妙に挙動が異なるので動くかも。
詳しくは違いでググって下さい

159デフォルトの名無しさん2018/02/12(月) 08:05:14.90ID:xQy5Bsyb
あほやなあオープンマクロが動かんのはオープンしとらんからにきまっとるんやがw

160デフォルトの名無しさん2018/02/12(月) 08:30:35.08ID:F3ZoN7fb
>>157
> 他に情報ありましたらお知らせください。ありがとうございました。
て言うかまずお前が情報書けよ

> ユーザーがログオンしているときのみ実行する、にチェックが入っていますので違うと思います。
なんて後から言われても困る

161デフォルトの名無しさん2018/02/12(月) 10:49:27.81ID:fd37PB9t
スケジュールで走らせるのが目的なら
イベントにたよらなくても
VBSからVBAのプロシージャを直で指定して呼べた気がする
でVBSの方をスケジューラーに登録しておく
ググれば方法が見つかると思うのでお試しあれ

162デフォルトの名無しさん2018/02/12(月) 11:56:54.51ID:ovw7+iFl
>>86
おまえはどんなショボいPCを使っているのか?Windows95でCPUは486DXか?

163デフォルトの名無しさん2018/02/12(月) 12:41:45.34ID:F3ZoN7fb
>>161
COM経由で操作するなら似たようなもん

164デフォルトの名無しさん2018/02/12(月) 14:28:15.32ID:RHpKon14
へーsystemアカウント用のDesktopフォルダ作るのか
なるほどね

165デフォルトの名無しさん2018/02/15(木) 10:49:13.30ID:n3ZAbmwK
VBE起動したあとVBEのウィンドウを最大化するんだけど、
ブックを閉じてVBEを開くと小さいウィンドウで開くから、また最大化する・・・のが面倒なんですが、
前回終了時のウィンドウサイズを記憶させることってできます?

166デフォルトの名無しさん2018/02/15(木) 12:06:52.20ID:tgIxQ6Uj
>>165
標準機能では無理
【気軽に「こんなソフトありませんか?」Part.176】
https://egg.5ch.net/test/read.cgi/software/1511329804/

167デフォルトの名無しさん2018/02/17(土) 18:05:06.20ID:XvsvycnR
vbaで正規表現書いていたのですが(?:)って使えないんでしょうか?
キャプチャして欲しくない部分が結果に混ざるのでできれば最初から消しておきたいんですが
結果に対して処理するしかないんですかね

168デフォルトの名無しさん2018/02/17(土) 18:26:45.53ID:DOQJ47ER
>>167
いま手元に環境ないから試せないけどRegExp (Microsoft VBScript Regular Expressions 5.5)使ってるなら使えるはずだが...

169デフォルトの名無しさん2018/02/17(土) 18:39:43.21
>>167
普通にキャプチャしてSubMachesで必要な部分だけ取り出せばいい

170デフォルトの名無しさん2018/02/17(土) 20:20:00.39ID:XvsvycnR
できました
ありがとうございました

171デフォルトの名無しさん2018/02/18(日) 00:43:49.98ID:trAPtbQv
>>170
礼などいらんよ

172デフォルトの名無しさん2018/02/18(日) 09:52:01.75ID:VPiCj08E
>>170
いいってことよ(´・ω・`)b

173デフォルトの名無しさん2018/02/20(火) 20:34:05.33ID:po95iPWj
派遣先の親分がVBAの動作速度の改善のためにHDDをSSDに替えよう
なんて言っているけれど
VBAとSSDって動作速度の面で関係ありますか?

これってSATA接続のHDD上のExcelファイルを編集するのとUSBメモリ(USB2.0接続)では速度差が出ると言っているようなものだろうけれど
いかんせんUSBメモリはすべて捨ててしまって検証が出来ないです…

174デフォルトの名無しさん2018/02/20(火) 20:46:01.61ID:D3Dd0C9m
>>173
派遣先の親分に対して何がしたくて、どういう裏付けのための「お言葉」を貰いに来たの?

175デフォルトの名無しさん2018/02/20(火) 20:51:34.56ID:po95iPWj
>>174
SSDには拘らずPC全てを新調する流れに誘導したいです

176デフォルトの名無しさん2018/02/20(火) 20:54:53.19ID:egNrIJ1q
ファイルを100個作って保存するとかなら効果あるかも?
誤差の範囲だと思うけど

VBAの速度を上げるならCPUパワーとロジックに力をそそぐべき

177デフォルトの名無しさん2018/02/20(火) 21:13:27.65ID:qLAJwQw3
やっぱり、そう思いますよねー
ちなみに10シート1000行50列をそれぞれ入力規則10種に違反しているものは無いかくまなく調べる…
みたいなマクロなんですけど
開発者は条件分岐はとりあえずIf文をネストすれば良いみたいな考え方らしくSelect文がゼロなんですよ
これってなんか工夫できそうな気がするんですけど
まぁもうちょっと分析してみます

178デフォルトの名無しさん2018/02/20(火) 21:20:14.98ID:qLAJwQw3
ごめんなさいIDかわりました

179デフォルトの名無しさん2018/02/20(火) 21:36:39.55ID:egNrIJ1q
たぶんループ内でセルアクセスしまくってるだろうから
一気に取ってきてメモリで処理して結果をズドン
にすれば1000倍オーダーで高速化するでしょう
健闘をいのる

180デフォルトの名無しさん2018/02/20(火) 21:45:10.31ID:Qs1V/krE
とりあえず親分を立ててSSDにする

ほとんど全て作業が快適になるけど肝心のマクロは変わらず

やっぱりCPUか、でPC新調する

もったいないので新PCにSSD載せる

マクロも他の作業も爆速になる

これしかないやろ

181デフォルトの名無しさん2018/02/20(火) 21:51:41.56ID:qLAJwQw3
>>179
セルアクセス!初耳にして今後のキーワードになりそうな言葉です!
がんばります!

>>180
そこまで景気よく行けたらいいなぁ…

182デフォルトの名無しさん2018/02/20(火) 22:19:42.59ID:kZvvD5Jp
セル.valueを一旦全部配列に取り込んで
メモリ上で処理して
配列を最後にまとめて貼り付けれ
画面描画とイベント抑止も追加な

183デフォルトの名無しさん2018/02/21(水) 07:37:11.81ID:pdEcbkjv
>>177
まぁIf文でもSelect文でも使いどころが見合ってればいいけど
それより気を付けなければいけないのはOrやAndの扱いだね。
.Net系のOrElseやAndAlsoと違って前に設定した条件を満たしていても後続の条件を評価してしまう。

まだ単純な値を比較するなら誤差程度の時間差しか出ないけど
関数やメソッドの戻り値を条件にしていて、
その関数が重い処理であればそれだけ無駄な時間が掛かってしまう。

後はもしクラスに詳しければポリモーフィズムでなるべく無駄な分岐は避けた方が良いかな。
その分処理時間だけでなく改修やテストの時間も削減が見込める。

184デフォルトの名無しさん2018/02/21(水) 23:14:40.16ID:y7Un/hTJ
処理時間の高速化が目的なら
セル範囲をバリアント型配列に代入して配列内で処理をしてから、処理後の結果を配列からセル範囲に出力すれば劇的に早くなるよ

185デフォルトの名無しさん2018/02/22(木) 01:57:42.07ID:gwSYBKpq
エクセルで家計簿作りたいんだけど、みんなどうしてるん?
ものすっごい管理するのが面倒くさくなるんだけど…

家計簿を複式で書きたいから毎回商品名やら収入支出まで全部書くんだけど、
最近面倒臭くなってきたからこの辺の操作を簡略化したいのよ


商品名を全部書くのが面倒くさいから大雑把な商品項目を作って
商品項目の選択制にしたいんだけどどうすりゃいいんだ?

例えば、お茶買ったとしたら、飲み物って項目を選択して
収入支出のどっちかを選択して金額を入れればいいだけ、みたいな
あと、飲み物のグループだけを表示できるようにしたりもしたい
自分がその月に何にお金を一番使ってるのか項目毎に分析したいんだ

186デフォルトの名無しさん2018/02/22(木) 05:34:45.99ID:6+gpZmum
ユーザーフォーム作って選択すればいいんじゃね?
あとはKey に該当する商品だけ合計するとかでおk

187デフォルトの名無しさん2018/02/22(木) 07:11:07.10ID:/kJbMS0V
>>185
セルを選択形式にしたいなら「入力規制」でググれ
だがその項目を決まった位置に書いておけば
それすら必要ないように思える。

多分VBA必要ない。

188デフォルトの名無しさん2018/02/22(木) 07:13:19.54
>>185
つ 「エクセル簿記」

189デフォルトの名無しさん2018/02/22(木) 07:17:47.39ID:FxhP8B8J
>>185
> 自分がその月に何にお金を一番使ってるのか項目毎に分析したいんだ
スレチになるけどそう言う目的あるならフリーの家計簿ソフト使った方がいいと思うよ

190デフォルトの名無しさん2018/02/22(木) 08:05:56.18ID:YVYiWWcv
フリーの家計簿ソフトなんて作ってるのはみんな>>185みたいな奴だぜ
オレオレ便利機能が欲しいから作っちゃいましたみたいな
家計簿なんてそんなもん
作れるなら自分で作っちゃうアプローチのが正解

191デフォルトの名無しさん2018/02/22(木) 10:32:45.75ID:jLYjEY9/
さらにスレチだけど、そもそも複式で書く意味って?
支出と費用計上のタイミングがずれる
収入と収益計上のタイミングがずれる
なんてことがある場合に複式の利点があるんだろうけど
そもそも家計簿作る人ってそこまでやんの?
米を10kg買ってきました
資産計上します
消費の都度費用計上しますとか?

192デフォルトの名無しさん2018/02/22(木) 18:43:19.33ID:VgNmulNi
アスペ感強すぎwww

193デフォルトの名無しさん2018/02/22(木) 19:08:12.44ID:K6gwUVsb
家計簿の無料アプリなんて、いくらでもあるだろ

既にあるものは作るな。
世の中に無いものを作れ

194デフォルトの名無しさん2018/02/22(木) 19:45:49.11ID:1JOjbwTy
ほんと定期的にやばそうな人くるよな

195デフォルトの名無しさん2018/02/22(木) 21:13:28.78ID:c7GHDdxz
++や+=や?みたいな演算子ないんでしょうか?
毎回代入やifしないと駄目?

196デフォルトの名無しさん2018/02/22(木) 21:36:57.24ID:UMUr68HJ
>>195
だめ

197デフォルトの名無しさん2018/02/22(木) 21:45:28.24ID:c7GHDdxz
ありがとう
不便だなあ…('A`)

198デフォルトの名無しさん2018/02/22(木) 22:03:55.07ID:/kJbMS0V
>>197
不便だよ
不便なところをどうやって何とかするのかを
考えるのもVBAの醍醐味

199デフォルトの名無しさん2018/02/22(木) 22:05:36.37ID:6NHeYF5q
>>195
?:(三項演算子)はIIf( )で似たようなことができる
ただしC++の三項演算子と違って関数だから引数はすべて評価される
なので
a = 0
b = IIf(a <> 0, 1 / a, 0)
とかやると0割りエラーになるので注意

200デフォルトの名無しさん2018/02/22(木) 22:31:32.98ID:rSjpq6iH
And や Or も前件だけで真偽判定してくれなくて全文評価するから不便だよな

201デフォルトの名無しさん2018/02/22(木) 22:44:59.91ID:Dms0Es6m
条件式は1本にまとめるよりIfをネストした方が処理が速いこともあるし
C#なんかとは考え方をまるっきり変えてコーディングしないと

202デフォルトの名無しさん2018/02/23(金) 00:01:36.17ID:aLU7NSfS
その内LINQやラムダ式が使えないから不便だって言う人が出てきそうな勢いだな

Pythoneまで待てや

203デフォルトの名無しさん2018/02/23(金) 08:52:34.86ID:AfM26Mh3
「プログラミング環境なんて数年おきに改訂され進化していくもの」
という感覚は正しい。
しかしあたりまえが通じない世界もある。
それが、「廃れた開発環境」と「リソースの足りないプロジェクト」だ。

新着レスの表示
レスを投稿する