!extend:checked:vvvvv:1000:512
↑同じ内容を2行貼り付けるナリ
ExcelのVBAに関する質問スレナリ
コード書き込みや作成依頼もOKナリ
※前スレ
Excel VBA 質問スレ Part69
https://mevius.5ch.net/test/read.cgi/tech/1607786543/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
Excel VBA 質問スレ Part70
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ b6da-6NWR)
2021/03/18(木) 22:08:43.71ID:jtngtgXU0329デフォルトの名無しさん (アウアウウー Sa1b-jxZb)
2021/04/21(水) 14:00:48.01ID:aZ4kV5qwa おいおい、エクセルのマクロぐらいで定義書はつくらんだろ
ふつうはマクロができてからしようが決まるから
ふつうはマクロができてからしようが決まるから
330デフォルトの名無しさん (ゲマー MMdf-V0/V)
2021/04/21(水) 17:35:07.95ID:Gd/0Jck0M >>327
さすがにIsDateくらい使おうぜ
さすがにIsDateくらい使おうぜ
331デフォルトの名無しさん (オッペケ Sr8b-nOOc)
2021/04/21(水) 17:53:28.95ID:k6MIIAN/r 年配のジジイ騙して金取れるなら今の体制維持も考慮すべき
332デフォルトの名無しさん (ブーイモ MMcf-B9Iy)
2021/04/21(水) 18:25:58.81ID:2kwhHx0qM >>328
上司に頼まれて作った子会社の人達の作業進捗を確認する為のスケジュール管理ツールなんだ
今まで手書きでやってたのを電子化したかったんだと
要求仕様の箇条書きを渡されて好きに作っていいって言われたから仕様書とかコーディング規約とか諸々自分で用意した
まぁ流石に向こうの課長さんから当事者のおっちゃんに雷落ちたらしいが
>>330
流石に動作前に入力のエラーチェックはかけてるさ
それでlsDateでチェックして日付じゃなけりゃ処理を停止して「No.〇〇の工程の開始予定日が日付じゃねぇから書き直せ」って類のメッセージ出してるんだがメッセージ読んでねぇから「マトモに動かないポンコツツール」って喚き散らしてたんよ
上司に頼まれて作った子会社の人達の作業進捗を確認する為のスケジュール管理ツールなんだ
今まで手書きでやってたのを電子化したかったんだと
要求仕様の箇条書きを渡されて好きに作っていいって言われたから仕様書とかコーディング規約とか諸々自分で用意した
まぁ流石に向こうの課長さんから当事者のおっちゃんに雷落ちたらしいが
>>330
流石に動作前に入力のエラーチェックはかけてるさ
それでlsDateでチェックして日付じゃなけりゃ処理を停止して「No.〇〇の工程の開始予定日が日付じゃねぇから書き直せ」って類のメッセージ出してるんだがメッセージ読んでねぇから「マトモに動かないポンコツツール」って喚き散らしてたんよ
333デフォルトの名無しさん (アウアウウー Sa1b-jxZb)
2021/04/21(水) 19:16:43.30ID:aZ4kV5qwa 中抜きの現場をそのまま見ているような
人の入力チェックはけっこうノウハウいるのね
人の入力チェックはけっこうノウハウいるのね
334デフォルトの名無しさん (アウアウウー Sa1b-jxZb)
2021/04/21(水) 19:18:54.99ID:aZ4kV5qwa 進捗管理ツールてまともな奴はみたことがない
335デフォルトの名無しさん (アウアウウー Sa1b-CpDH)
2021/04/21(水) 20:16:57.95ID:ukt/rEUCa 文句いわれた程度で逆ギレかやっぱゆとりだな
336デフォルトの名無しさん (ワッチョイ 778e-u7Bp)
2021/04/21(水) 20:18:22.64ID:mZ1GtAH60 >>332
やっぱり馬鹿か
やっぱり馬鹿か
337デフォルトの名無しさん (ワッチョイ 9f4f-Xji8)
2021/04/21(水) 21:08:21.14ID:BXHy+8up0 >>332
なるほど大体状況は理解出来た
まぁボロくそに言ってたおっちゃんもおっちゃんだけど、果たして君の作ったツールは
今まで手書きでやってた人がいきなりパソコン使って打ち込めるような優しい設計になっていたのかな?
下請けでしかもスケジューラー作成なんて自由度の高いものを上司が君に振ったのはひょっとしたらその辺の事も兼ねて
君が今回それを通してどんなことを学ぶかを見ていた可能性があるね。
そのおっちゃんはボロくそに言ったかも知れないけどそれが現場で作業している人の正直な意見であることには間違いないよ。厳しいかも知れないけどね。
なるほど大体状況は理解出来た
まぁボロくそに言ってたおっちゃんもおっちゃんだけど、果たして君の作ったツールは
今まで手書きでやってた人がいきなりパソコン使って打ち込めるような優しい設計になっていたのかな?
下請けでしかもスケジューラー作成なんて自由度の高いものを上司が君に振ったのはひょっとしたらその辺の事も兼ねて
君が今回それを通してどんなことを学ぶかを見ていた可能性があるね。
そのおっちゃんはボロくそに言ったかも知れないけどそれが現場で作業している人の正直な意見であることには間違いないよ。厳しいかも知れないけどね。
338デフォルトの名無しさん (ゲマー MM4f-V0/V)
2021/04/22(木) 07:33:17.38ID:7heM3Ej5M まあVBAじゃなくとも自分が便利だと思っている価値観を人に理解してもらうのは難しい
339デフォルトの名無しさん (アウアウクー MM8b-pIuX)
2021/04/22(木) 09:34:46.13ID:gwtiqwMsM340デフォルトの名無しさん (ワッチョイ ffda-CpDH)
2021/04/22(木) 12:44:53.98ID:hcaPQHcf0 自分の給料がどこから来るのかを考えれば適当な対応はできないとおもうが
341デフォルトの名無しさん (ワッチョイ d7b1-4RQ2)
2021/04/22(木) 17:31:38.77ID:voAAUW4i0 VBAでは非0は真として扱われるということでいいですか?
342デフォルトの名無しさん (ワッチョイ 9f4f-Xji8)
2021/04/22(木) 17:54:34.03ID:aG329xgw0 >>341
型による
型による
343デフォルトの名無しさん (ワッチョイ d7b1-4RQ2)
2021/04/22(木) 18:05:18.29ID:voAAUW4i0 >>342
整数です
整数です
344デフォルトの名無しさん (ワッチョイ d7b1-4RQ2)
2021/04/22(木) 18:08:01.13ID:voAAUW4i0 あーけど
エラー値も判定の対象になるかもです
エラー値も判定の対象になるかもです
345デフォルトの名無しさん (ワッチョイ d7b1-4RQ2)
2021/04/22(木) 18:25:55.35ID:voAAUW4i0 ごめんなさい回りくどい質問せずに
直球で質問すると
if instr(str1,str2)>0 then
の>0って要らなくないか?ってことです
直球で質問すると
if instr(str1,str2)>0 then
の>0って要らなくないか?ってことです
346デフォルトの名無しさん (ワッチョイ 9f4f-Xji8)
2021/04/22(木) 18:47:47.49ID:aG329xgw0 >>345
やめとけ。まずInstrで何が返ってくるのか確認するんだ
http://officetanaka.net/excel/vba/function/instr.htm
NULLが入って来ることもあるからLEN関数で囲む感じになるのか?
どちらにしても可読性が落ちるようなものやトリッキーなことはなるべく避けた方がいい
そんなこと全般に渡ってやってたら
1月後には自分が作ったソースが読めなくなるぞ
やめとけ。まずInstrで何が返ってくるのか確認するんだ
http://officetanaka.net/excel/vba/function/instr.htm
NULLが入って来ることもあるからLEN関数で囲む感じになるのか?
どちらにしても可読性が落ちるようなものやトリッキーなことはなるべく避けた方がいい
そんなこと全般に渡ってやってたら
1月後には自分が作ったソースが読めなくなるぞ
347デフォルトの名無しさん (アウアウウー Sa1b-jxZb)
2021/04/22(木) 19:10:26.59ID:+FKRqhM4a うむ
理系のひとはなんでも yes/Noで考えががちだけと
そういう論理式はむつかしい
現実にはyes/No/無回答 /cancelの4値だから
それに否定<>もあまり多用しないほうがよい
A<>false or B<>false or C<>false
こういうのわけわからんから
IF A=true and B=true and C=true then
else
×××××××
ENDIF
こうしておく、終電に間に合うぞ
理系のひとはなんでも yes/Noで考えががちだけと
そういう論理式はむつかしい
現実にはyes/No/無回答 /cancelの4値だから
それに否定<>もあまり多用しないほうがよい
A<>false or B<>false or C<>false
こういうのわけわからんから
IF A=true and B=true and C=true then
else
×××××××
ENDIF
こうしておく、終電に間に合うぞ
348デフォルトの名無しさん (JP 0Hbb-tdH6)
2021/04/22(木) 19:52:34.43ID:UidQzhn6H349デフォルトの名無しさん (スププ Sdbf-wmn0)
2021/04/22(木) 21:01:52.31ID:hn+92ycNd 理系文系家系関係あるかそれ
350デフォルトの名無しさん (アウアウウー Sa1b-DjtJ)
2021/04/22(木) 23:02:56.56ID:vfns6Sdda VBAでは問題ないのだろうけど、TRUE をイコールで判定するのはどうも…
351デフォルトの名無しさん (ワッチョイ d7b1-4RQ2)
2021/04/22(木) 23:11:41.16ID:voAAUW4i0 ありがとうございます
素直に省略せずに比較演算子を使うことにします
素直に省略せずに比較演算子を使うことにします
352デフォルトの名無しさん (アウアウウー Sab5-4hJQ)
2021/04/23(金) 01:03:06.83ID:ftZ+9Vdga >>349
体育会系もついか
体育会系もついか
353デフォルトの名無しさん (ワッチョイ f64f-Opq7)
2021/04/23(金) 04:16:22.24ID:IAv7U8Ah0 >>350
そうだね
まぁそういうときによく話に上がるコードだけども
Dim A As Boolean
Dim B As Boolean
Dim C As Boolean
A = False
B = False
C = False
A = B = C
こんなコードがあったとして
VBAではこれはエラーにならない
慣れてる人ならAにTrueが入ることが
すぐ分かるけど
慣れていない人はAにFalseが入ると
思ってしまうこともある
単純な式だから「そんなバカいねーよ」と
思うかも知れないけど
これを複雑な式に混ぜられた場合を考えると
結構キツいことになったりもするよ
そうだね
まぁそういうときによく話に上がるコードだけども
Dim A As Boolean
Dim B As Boolean
Dim C As Boolean
A = False
B = False
C = False
A = B = C
こんなコードがあったとして
VBAではこれはエラーにならない
慣れてる人ならAにTrueが入ることが
すぐ分かるけど
慣れていない人はAにFalseが入ると
思ってしまうこともある
単純な式だから「そんなバカいねーよ」と
思うかも知れないけど
これを複雑な式に混ぜられた場合を考えると
結構キツいことになったりもするよ
354デフォルトの名無しさん (ワッチョイ bd10-y5Lq)
2021/04/23(金) 05:12:18.96ID:Rqoeq7ma0 話の主旨が分からん
代入じゃないんだから「==」にしたいって話?
それならBooleanは関係ないよな…
代入じゃないんだから「==」にしたいって話?
それならBooleanは関係ないよな…
355デフォルトの名無しさん (ワッチョイ f64f-Opq7)
2021/04/23(金) 05:41:22.55ID:IAv7U8Ah0356デフォルトの名無しさん (ワッチョイ f64f-Opq7)
2021/04/23(金) 05:51:27.06ID:IAv7U8Ah0 手前側のイコールが代入で後ろのイコールが比較演算子だから他の言語だと
A = B == C;
みたいな書き方になったりするのかな
ただVBAではどっちもイコールひとつで分かり辛いから、その辺ちゃんと分かるように書いた方がいいよと言うのが話の趣旨だね
A = B == C;
みたいな書き方になったりするのかな
ただVBAではどっちもイコールひとつで分かり辛いから、その辺ちゃんと分かるように書いた方がいいよと言うのが話の趣旨だね
357デフォルトの名無しさん (JP 0H98-On6t)
2021/04/23(金) 06:24:58.47ID:TaQs1RgsH それは文法の話であって論理(式)の話ではないな
途中で混ざってすり変わってる
途中で混ざってすり変わってる
358デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/23(金) 06:27:12.51ID:P8K+Jhr50 5
359デフォルトの名無しさん (JP 0H98-On6t)
2021/04/23(金) 06:40:22.74ID:TaQs1RgsH a=b=cがすべて代入になる言語もあるからややこしいって話だと思うけど
手を抜かずに式を分けたりカッコを付ければいいだけ
コメントを書いたり変数名をわかりやすくするのと同列で、ミスを減らす工夫はプログラマーの義務
すべて代入したい時
b=c
a=b
比較したい時
a=(b=c)
手を抜かずに式を分けたりカッコを付ければいいだけ
コメントを書いたり変数名をわかりやすくするのと同列で、ミスを減らす工夫はプログラマーの義務
すべて代入したい時
b=c
a=b
比較したい時
a=(b=c)
360デフォルトの名無しさん (アウアウウー Sab5-4hJQ)
2021/04/23(金) 07:36:07.75ID:F+E5VVCoa プログラム上の論理式は2値論理がほとんどだから
じっさいは仕様によっていくらでも沢山あるからあるから
そういうのは丁寧にコメントをいくしかない
じっさいは仕様によっていくらでも沢山あるからあるから
そういうのは丁寧にコメントをいくしかない
361350 (アウアウウー Sa83-jiG2)
2021/04/23(金) 09:30:59.30ID:fSz9RP/oa 僕が言ったのは次のようなことです
VBAでいうと、True は -1 だが
Dim i As Long
i = 123
If i = True Then
はイコールと評価される
内部的には CBool(i) = True と評価されているのだと思う
C言語では TRUE は 1 と定義されていて、
int i = 123:
if (i == TRUE) {
では i を暗黙裡に論理型に変換しないので、イコールと評価されない(非0が真である直感に反する)
ということでした(123 と 1 を愚直に比較する)
FALSE は 0 と定義されていて、これは比較に用いてもよい
VBAでいうと、True は -1 だが
Dim i As Long
i = 123
If i = True Then
はイコールと評価される
内部的には CBool(i) = True と評価されているのだと思う
C言語では TRUE は 1 と定義されていて、
int i = 123:
if (i == TRUE) {
では i を暗黙裡に論理型に変換しないので、イコールと評価されない(非0が真である直感に反する)
ということでした(123 と 1 を愚直に比較する)
FALSE は 0 と定義されていて、これは比較に用いてもよい
362デフォルトの名無しさん (テテンテンテン MM34-TKdI)
2021/04/23(金) 09:32:37.82ID:ze7VlHimM363350 (アウアウウー Sa83-jiG2)
2021/04/23(金) 09:32:48.97ID:fSz9RP/oa 間違ってたらごめんなさい
364350 (アウアウウー Sa83-jiG2)
2021/04/23(金) 09:35:24.69ID:fSz9RP/oa a = b = c = 0
で、a、b、c すべてに 0 を代入したいとか
で、a、b、c すべてに 0 を代入したいとか
365デフォルトの名無しさん (ワッチョイ f64f-Opq7)
2021/04/23(金) 09:46:20.67ID:IAv7U8Ah0 >>363
それで合ってるよ
ちなみに-1なのは変数の内容を
ビットとして見たとき全て立っていると
言うことの名残りだって
昔このスレの誰かが言ってた
もっとも今内部的にPコードで
ビットがどれか立っていればって
判断しているかは知らんけど
それで合ってるよ
ちなみに-1なのは変数の内容を
ビットとして見たとき全て立っていると
言うことの名残りだって
昔このスレの誰かが言ってた
もっとも今内部的にPコードで
ビットがどれか立っていればって
判断しているかは知らんけど
366デフォルトの名無しさん (JP 0H98-On6t)
2021/04/23(金) 09:48:01.57ID:TaQs1RgsH VBやVBAだと0だけがfalse、それ以外はみんなtrueとみなされる
たとえば
a = 100
If a Then
だとaはtrueになってIfの中が実行される
たとえば
a = 100
If a Then
だとaはtrueになってIfの中が実行される
367デフォルトの名無しさん (アウアウウー Sab5-4hJQ)
2021/04/23(金) 12:40:15.83ID:F+E5VVCoa 2値論理はむかし60年から70年台のワイヤーロジック時代にもて囃されたけど
もう令和なんだし、古すぎるよね
80歳のおじいさんならともかく
若い人は使わないようにしましょ
もう令和なんだし、古すぎるよね
80歳のおじいさんならともかく
若い人は使わないようにしましょ
368デフォルトの名無しさん (アウアウウー Sab5-4hJQ)
2021/04/23(金) 12:45:24.75ID:F+E5VVCoa リレーやSWを組み合わせてコンピュータをつくろう
そんなチャレンジャーはいるかな
そんなチャレンジャーはいるかな
369デフォルトの名無しさん (ワッチョイ 412f-1bRV)
2021/04/23(金) 14:08:52.13ID:tTrKrHtH0 Falseが0とかいうのは正確には正しくない
Falseを数値として評価すると0というのが正しくて
暗黙の変換を無視して話すとおかしなことになるぞ
Trueが0以外というのはもっと間違ってて
Trueは数値として評価すると-1
0以外の数値をBooleanとして評価するとTrueというのが正しい
型にゆるいというBASICの伝統を引き継いで暗黙の変換って仕様があるせいなんだが
まあ今更その仕様にどうこう言ってもなぁ
Falseを数値として評価すると0というのが正しくて
暗黙の変換を無視して話すとおかしなことになるぞ
Trueが0以外というのはもっと間違ってて
Trueは数値として評価すると-1
0以外の数値をBooleanとして評価するとTrueというのが正しい
型にゆるいというBASICの伝統を引き継いで暗黙の変換って仕様があるせいなんだが
まあ今更その仕様にどうこう言ってもなぁ
370デフォルトの名無しさん (アウアウウー Saab-edqc)
2021/04/23(金) 14:38:37.17ID:fkUQFj8fa 結局のところ3ヶ月後の自分がコードの理解ができるかどうかってところよね
371デフォルトの名無しさん (ワッチョイ 2cda-On6t)
2021/04/23(金) 19:44:06.36ID:8NALutx50 別の奴が新しいの作ってるに1ガバチョ
372デフォルトの名無しさん (ワッチョイ b701-Bsub)
2021/04/23(金) 21:55:04.78ID:TCRfyG2B0 VBAで書くようなコードは変数名をちゃんと書いておけば大体問題ないよ
質問しにくる人のコード見ると、aみたいな意味のない変数名や省略してたりするのが多いんで・・・
VBAってプログラミングの入口になる事が多いので、
妙な向上心から変なテク(特に処理速度関係)を導入しがちだけど、
バカみたいに基本に忠実かつ丁寧にするのがいいと思います。
質問しにくる人のコード見ると、aみたいな意味のない変数名や省略してたりするのが多いんで・・・
VBAってプログラミングの入口になる事が多いので、
妙な向上心から変なテク(特に処理速度関係)を導入しがちだけど、
バカみたいに基本に忠実かつ丁寧にするのがいいと思います。
373デフォルトの名無しさん (ワッチョイ a68f-On6t)
2021/04/23(金) 21:58:49.34ID:g1z9C06A0 >>370
至言だよな。
至言だよな。
374デフォルトの名無しさん (ワッチョイ a68f-On6t)
2021/04/23(金) 22:02:08.91ID:g1z9C06A0 >>372
w
仕事で使わされてる「しすてむ」のvba部分のソース開いたらまさに
If c = r/2 then
cc = r/2
rr = r/4
End If
みたいな感じで、しかもノーコメントだったわ。何してるルーチンなのかも
説明なくて読む気になれなかった。
w
仕事で使わされてる「しすてむ」のvba部分のソース開いたらまさに
If c = r/2 then
cc = r/2
rr = r/4
End If
みたいな感じで、しかもノーコメントだったわ。何してるルーチンなのかも
説明なくて読む気になれなかった。
375デフォルトの名無しさん (ワッチョイ a868-8KU9)
2021/04/23(金) 22:29:27.77ID:lNHxMJRv0 色々なデータを引っ張ってきて、加工してピボット作って集計して・・・結局使ってねー!
ってコードを見た時はずっこけた
改修前になにかで使ってたのかもしれないけど
ってコードを見た時はずっこけた
改修前になにかで使ってたのかもしれないけど
376デフォルトの名無しさん (ワッチョイ 154f-0NDc)
2021/04/24(土) 01:19:16.60ID:zm0BIqCc0 配列を引数にしたときに関数側でVariant()で受け取れないのは何故?
Variantカッコなしなら問題ないんだけど理屈が分からない
Variantカッコなしなら問題ないんだけど理屈が分からない
377デフォルトの名無しさん (ワッチョイ 70da-wusC)
2021/04/24(土) 02:14:07.08ID:4BGM8nym0378デフォルトの名無しさん (アウアウウー Sab5-4hJQ)
2021/04/24(土) 08:12:03.15ID:nm6+mfpAa379デフォルトの名無しさん (アウアウウー Sab5-4hJQ)
2021/04/24(土) 08:30:08.06ID:nm6+mfpAa だから他人のつくったソフトを治すのがけっこう好き
380デフォルトの名無しさん (ワッチョイ f64f-Opq7)
2021/04/24(土) 08:59:02.95ID:hh64S9E70 俺は嫌い
大体人のもの直せって話が降ってくるときは
他の人が見た後で、ぐっちゃぐちゃで
どんだけスパゲティが好きなんだよ、
お前はこの関数に何をやらせたかったんだよ!
みたいのばっかり
そして大概作り直した方が早い
大体人のもの直せって話が降ってくるときは
他の人が見た後で、ぐっちゃぐちゃで
どんだけスパゲティが好きなんだよ、
お前はこの関数に何をやらせたかったんだよ!
みたいのばっかり
そして大概作り直した方が早い
381デフォルトの名無しさん (ワッチョイ 7349-5yyl)
2021/04/24(土) 09:29:33.79ID:B50KhnoE0 早いというか素直に作れる
382デフォルトの名無しさん (ブーイモ MM5e-i9BS)
2021/04/24(土) 09:30:19.42ID:y3ko2vbIM >>380
おバカ自慢は要らない
おバカ自慢は要らない
383デフォルトの名無しさん (アウアウウー Sab5-4hJQ)
2021/04/24(土) 09:44:22.09ID:nm6+mfpAa www
それをバージョンアップと言うんだよ
それをバージョンアップと言うんだよ
384デフォルトの名無しさん (JP 0H98-On6t)
2021/04/24(土) 14:07:12.02ID:K1BlKgeMH 言わない、かな
385デフォルトの名無しさん (ワッチョイ 9b5f-APZP)
2021/04/24(土) 16:44:37.66ID:0Etp2+DY0386デフォルトの名無しさん (ワッチョイ f64f-Opq7)
2021/04/24(土) 16:54:39.75ID:hh64S9E70 後、稀にあるのが
頭にOption Scriptを書かずに変数宣言で型を付けない奴
はぁ?VBScriptですか?JavaScriptですか?
バカなの?死ぬの?
ってなるのもある
後は比較的軽症なんでそんなに文句垂れるほどじゃないんだけど
変数宣言をIfやFor文の中にその括りで書く人
ああ、何かのObject指向言語やってたのね
とはなるけど、その場合あまりスパゲティソースになっていることが少ないので
ある意味少し安心出来る。
後お客さんが自分で作ったけどよく分からないから直して欲しいと言ってくる奴
これは比較的小さいし面白いことが多いから逆にウエルカムのパターン
まず変数名や関数名が日本語の場合が多い。
まぁこれは別にいい。いや、良くはないけど見てて分かるし。
ただその名称が「豚コマ150g」とか「ハウスバー○モンドカレー」とかになっていると
え、夕食カレーだったの?ジャワやゴールデンじゃ駄目なんですか?ってなる
頭にOption Scriptを書かずに変数宣言で型を付けない奴
はぁ?VBScriptですか?JavaScriptですか?
バカなの?死ぬの?
ってなるのもある
後は比較的軽症なんでそんなに文句垂れるほどじゃないんだけど
変数宣言をIfやFor文の中にその括りで書く人
ああ、何かのObject指向言語やってたのね
とはなるけど、その場合あまりスパゲティソースになっていることが少ないので
ある意味少し安心出来る。
後お客さんが自分で作ったけどよく分からないから直して欲しいと言ってくる奴
これは比較的小さいし面白いことが多いから逆にウエルカムのパターン
まず変数名や関数名が日本語の場合が多い。
まぁこれは別にいい。いや、良くはないけど見てて分かるし。
ただその名称が「豚コマ150g」とか「ハウスバー○モンドカレー」とかになっていると
え、夕食カレーだったの?ジャワやゴールデンじゃ駄目なんですか?ってなる
387デフォルトの名無しさん (ワッチョイ f64f-Opq7)
2021/04/24(土) 17:10:21.36ID:hh64S9E70 >>385
そこは認識の違いだね
まぁ別の言語もやってるせいかも知れないけど
俺の中では単一責任原則に沿って作られていない場合、既にスパゲティコードの臭いを感じとって
つらつらと見て行くと5000行くらいの関数とか作っている時点で少しキレ掛かる
俺の中ではFor Nextの中にGoto文で飛ぶことは構造化言語として組むものとして
既に破綻していることを意味している。
その部分は完全に作り直しにするわ。
そこは認識の違いだね
まぁ別の言語もやってるせいかも知れないけど
俺の中では単一責任原則に沿って作られていない場合、既にスパゲティコードの臭いを感じとって
つらつらと見て行くと5000行くらいの関数とか作っている時点で少しキレ掛かる
俺の中ではFor Nextの中にGoto文で飛ぶことは構造化言語として組むものとして
既に破綻していることを意味している。
その部分は完全に作り直しにするわ。
388デフォルトの名無しさん (ワッチョイ 9b5f-APZP)
2021/04/24(土) 20:41:03.69ID:0Etp2+DY0 そんなレベルじゃ、仕事にならないだろ。
389デフォルトの名無しさん (スププ Sd94-OSX5)
2021/04/24(土) 21:36:02.54ID:rN7nWBsMd 一身上の都合によりIfやForやGoto以下でワザとDimを書く場合もご察しください
390デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/24(土) 22:10:18.46ID:S/MxMxKT0 vbaやり始めてから世界が変わった
正直関数じゃマジで簡単なの以外はどうにもならんし
下手に複雑な式作っても気まぐれですぐ消されるし
正直関数じゃマジで簡単なの以外はどうにもならんし
下手に複雑な式作っても気まぐれですぐ消されるし
391デフォルトの名無しさん (ワッチョイ 70da-wusC)
2021/04/24(土) 22:26:59.54ID:4BGM8nym0 そして嫌われるし
392デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 00:02:34.42ID:trooC9Gj0 特にすごいのが他のアプリの操作機能
今まで月に4時間へばりつかないといけなかったのへばり付かないといけなかったの作業が40分で済む
その間することないからスマホいじるか昼食中に動かしても良い
エクセル神すぎん?
今まで月に4時間へばりつかないといけなかったのへばり付かないといけなかったの作業が40分で済む
その間することないからスマホいじるか昼食中に動かしても良い
エクセル神すぎん?
393デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 00:03:25.63ID:trooC9Gj0 ごめん誤字
今まで月に4時間へばりつかないといけなかった作業が40分で済む
今まで月に4時間へばりつかないといけなかった作業が40分で済む
394デフォルトの名無しさん (アウアウエー Sa6a-rwsx)
2021/04/25(日) 01:50:00.98ID:RbwSHn/Ua 可読性ゼロの複雑な関数書いて悦に入ってるヤツは無能
395デフォルトの名無しさん (ワッチョイ 2cda-wusC)
2021/04/25(日) 06:48:34.57ID:rqvjO/ad0 本当の地獄はこれから
396デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 09:13:58.07ID:CqRWqB530 Sub 文字列から日付()
ThisWorkbook.Worksheets("1").Activate
With ActiveSheet
Dim yy As Integer, mm As Integer, dd As Integer
yy = Worksheets("1").Range("A1").Value
mm = Worksheets("1").Range("B1").Value
dd = Worksheets("1").Range("C1").Value
Worksheets("1").Range("B2") = DateSerial(Year:=yy, Month:=mm, Day:=dd)
End With
End Sub
自動でB2の日付が変更するようにしたいのですが
どうしたらいいかわかりません
ActivateではなくChangrイベントだと思いますが
どこにどのように記述したらいいのでしょうか?
ここの先生たちにいつもお世話になってます
初心者にご教授してください
ThisWorkbook.Worksheets("1").Activate
With ActiveSheet
Dim yy As Integer, mm As Integer, dd As Integer
yy = Worksheets("1").Range("A1").Value
mm = Worksheets("1").Range("B1").Value
dd = Worksheets("1").Range("C1").Value
Worksheets("1").Range("B2") = DateSerial(Year:=yy, Month:=mm, Day:=dd)
End With
End Sub
自動でB2の日付が変更するようにしたいのですが
どうしたらいいかわかりません
ActivateではなくChangrイベントだと思いますが
どこにどのように記述したらいいのでしょうか?
ここの先生たちにいつもお世話になってます
初心者にご教授してください
397デフォルトの名無しさん (ワッチョイ 245f-QM0T)
2021/04/25(日) 09:26:59.35ID:4pLy3lS70 ワークシートのDATE関数が手っ取り早い
398デフォルトの名無しさん (ワッチョイ 4642-8KU9)
2021/04/25(日) 10:00:44.54ID:iVVOnnBO0 そもそも文字列を即日付に変換するぐらいなら最初から日付を入力するようにしてたほうが面倒くさくなくていいと思うが
399デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 10:04:58.97ID:CqRWqB530 DATE関数?
=DATE(A1,A2,A3)
↑これですか?
やってみたのですが、なぜか自動計算されないときがあったので
ユーザーフォームからA1、B1、C1に入力しB2に日付1を表示させ
もう一つA2、B2、C2にもユーザーフォームから入力し日付2を表示させ
日付1から日付2までの期間のすべての日付をD1〜D999に表示したいのですが
初心者過ぎてむずかしいです
=DATE(A1,A2,A3)
↑これですか?
やってみたのですが、なぜか自動計算されないときがあったので
ユーザーフォームからA1、B1、C1に入力しB2に日付1を表示させ
もう一つA2、B2、C2にもユーザーフォームから入力し日付2を表示させ
日付1から日付2までの期間のすべての日付をD1〜D999に表示したいのですが
初心者過ぎてむずかしいです
400デフォルトの名無しさん (アウアウウー Sa08-wusC)
2021/04/25(日) 10:15:36.34ID:eytlE9OXa >>399
閏年が大変だな
閏年が大変だな
401デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 10:23:41.87ID:CqRWqB530 D999としてますが実際はD7ぐらいしかつかわないので
閏年は考慮しなくても大丈夫です
閏年は考慮しなくても大丈夫です
402デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 10:27:00.72ID:trooC9Gj0 注意
標準モジュールではなくお目当てのシートモジュールに記載すること
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:C1")) Is Nothing Or Target.Cells.Count > 3 Then Exit Sub
Application.EnableEvents = False
Dim yy As Integer, mm As Integer, dd As Integer
yy = Range("A1").Value
mm = Range("B1").Value
dd = Range("C1").Value
Range("B2") = DateSerial(Year:=yy, Month:=mm, Day:=dd)
Application.EnableEvents = True
End Sub
標準モジュールではなくお目当てのシートモジュールに記載すること
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:C1")) Is Nothing Or Target.Cells.Count > 3 Then Exit Sub
Application.EnableEvents = False
Dim yy As Integer, mm As Integer, dd As Integer
yy = Range("A1").Value
mm = Range("B1").Value
dd = Range("C1").Value
Range("B2") = DateSerial(Year:=yy, Month:=mm, Day:=dd)
Application.EnableEvents = True
End Sub
403デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 10:28:07.28ID:trooC9Gj0 あ、ごめんこれ違うわ
404デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 10:32:09.85ID:trooC9Gj0 ユーザーフォームは経由は処理が面倒だしエクセルいま手元にないから検証が俺には無理だわ
ただのシート経由ならまだ行けるけど
ただのシート経由ならまだ行けるけど
405デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 10:36:16.85ID:trooC9Gj0 あとB2への処理がすでに日付と月の入力で重複しとるやん
どうしろと
初心者ならユーザーフォームなんてクソ面倒なもの
使わないほうがいいと思うけど
どうしろと
初心者ならユーザーフォームなんてクソ面倒なもの
使わないほうがいいと思うけど
406デフォルトの名無しさん (ワッチョイ 245f-QM0T)
2021/04/25(日) 10:39:05.26ID:4pLy3lS70 >>399
とりあえずこんな感じかなあ
変数宣言は省略
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For day = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = day
Next d
とりあえずこんな感じかなあ
変数宣言は省略
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For day = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = day
Next d
407デフォルトの名無しさん (ワッチョイ 245f-QM0T)
2021/04/25(日) 10:40:46.57ID:4pLy3lS70 ↑
Next d ×
Next day ○
Next d ×
Next day ○
408デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 10:42:21.10ID:trooC9Gj0 For d = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = d
Next d
R = R + 1
Cell(R , "D").Value = d
Next d
409デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 10:49:18.11ID:trooC9Gj0 修正
columns("d").clearcontents
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For d = 日付1 To 日付2
R = R + 1
Cells(R , "D").Value = d
Next d
columns("d").clearcontents
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For d = 日付1 To 日付2
R = R + 1
Cells(R , "D").Value = d
Next d
410デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 10:58:25.82ID:CqRWqB530 >>406
アドバイスありがとうございます!
初心者なのですが業務上ユーザーフォームを使わなければならなくて(泣
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 日付1 As Integer, 日付2 As Integer
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For day = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = day
Next d
End Sub
↑こんな感じでしょうか?初心者すぎて変数宣言とかむずかしいです
アドバイスありがとうございます!
初心者なのですが業務上ユーザーフォームを使わなければならなくて(泣
Private Sub Worksheet_Change(ByVal Target As Range)
Dim 日付1 As Integer, 日付2 As Integer
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For day = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = day
Next d
End Sub
↑こんな感じでしょうか?初心者すぎて変数宣言とかむずかしいです
411デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 11:09:05.98ID:trooC9Gj0 まずあの上の命令はWorksheet changeじゃなくてユーザーフォームに書き込む
ユーザーフォームを作らないといけないけど、適当に欄作って
その空欄へ
a1からc2の内容をすべて転記しないといせない
ユーザーフォームの変更があったら逆にa1-c2へ反映
その上で入力用のユーザーフォームをどうにかして表示するところからスタートだね
絶対面倒くさい
ユーザーフォームを作らないといけないけど、適当に欄作って
その空欄へ
a1からc2の内容をすべて転記しないといせない
ユーザーフォームの変更があったら逆にa1-c2へ反映
その上で入力用のユーザーフォームをどうにかして表示するところからスタートだね
絶対面倒くさい
412デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 11:14:02.50ID:CqRWqB530 ユーザーフォームからA1、B1、C1に入力しB2に日付1を表示させ
もう一つA2、B2、C2にもユーザーフォームから入力し日付2を表示させ
日付1から日付2までの期間のすべての日付をD1〜D7に表示したいのですが
初心者過ぎてむずかしいです
↑ユーザーフォーム経由じゃなくても
上記のようなエクセル表を作りたいのですが
簡単な方法ありますか?
もう一つA2、B2、C2にもユーザーフォームから入力し日付2を表示させ
日付1から日付2までの期間のすべての日付をD1〜D7に表示したいのですが
初心者過ぎてむずかしいです
↑ユーザーフォーム経由じゃなくても
上記のようなエクセル表を作りたいのですが
簡単な方法ありますか?
413デフォルトの名無しさん (ワッチョイ 245f-QM0T)
2021/04/25(日) 11:14:40.82ID:4pLy3lS70414デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 11:16:40.69ID:trooC9Gj0 変数名がdayだとvbaの標準命令のday(シリアル値)とかぶるからエラー起こさない?
415350 (アウアウウー Sa83-jiG2)
2021/04/25(日) 11:25:35.70ID:kagSPvTda 予約語じゃなく関数名だから大丈夫じゃないかな
ただ、関数を書いたときに頭文字が小文字になったり嫌だから避けるかな
ただ、関数を書いたときに頭文字が小文字になったり嫌だから避けるかな
416デフォルトの名無しさん (ワッチョイ 245f-hDy1)
2021/04/25(日) 11:39:20.76ID:4pLy3lS70417350 (アウアウウー Sa83-jiG2)
2021/04/25(日) 11:40:49.20ID:kagSPvTda 試してみると、同一スコープ内だと
Dim day As Long
day = VBA.day(Now())
Debug.Print day
のように関数名を修飾しないとでした
当たり前か
Dim day As Long
day = VBA.day(Now())
Debug.Print day
のように関数名を修飾しないとでした
当たり前か
418デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 12:09:23.12ID:CqRWqB530 Private Sub Worksheet_Change(ByVal Target As Range)
Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For day = 日付1 To 日付2
Dim R As Long
R = R + 1
Cell(R , "D").Value = day
Next day
End Sub
こんな感じでしょうか?
Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For day = 日付1 To 日付2
Dim R As Long
R = R + 1
Cell(R , "D").Value = day
Next day
End Sub
こんな感じでしょうか?
419デフォルトの名無しさん (アウアウウー Sa08-wusC)
2021/04/25(日) 12:12:35.21ID:eytlE9OXa 変数に日付1とかやるならdayも日付でよくね
420デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 12:36:35.37ID:CqRWqB530 Private Sub Worksheet_Change(ByVal Target As Range)
Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For day = 日付1 To 日付2
Dim R As Long
R = R + 1
Cell(R , "D").Value = day
Next day
End Sub
Changeしたいシートに記述してみたんですけど構文エラーになりました
Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = Datesirial(適当に)
日付2 = Datesirial(適当に)
For day = 日付1 To 日付2
Dim R As Long
R = R + 1
Cell(R , "D").Value = day
Next day
End Sub
Changeしたいシートに記述してみたんですけど構文エラーになりました
421デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 12:41:57.46ID:trooC9Gj0 適当にってのは自分で好きな変数に書き換えろってことだぞ…
あとapplication.enableevents=falseにしないと無限ループになるぞ
処理後はtrue
あとdimをループの中に入れないで
詳しくはググって
あとapplication.enableevents=falseにしないと無限ループになるぞ
処理後はtrue
あとdimをループの中に入れないで
詳しくはググって
422デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 12:43:38.04ID:trooC9Gj0 あと
If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
こういうようなのを冒頭に入れないと、どこに何を入れても命令が実行されるから遅くなる
If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
こういうようなのを冒頭に入れないと、どこに何を入れても命令が実行されるから遅くなる
423デフォルトの名無しさん (アウアウウー Sa83-jiG2)
2021/04/25(日) 12:59:50.89ID:kagSPvTda 結果として上手くいっているのかもしれないけど、
R がループ内で宣言されていると、毎回初期化を期待しているみたいでイヤですね
この場合、R の宣言はプロシジャの先頭にあるものとみなされるのだろうけど
R がループ内で宣言されていると、毎回初期化を期待しているみたいでイヤですね
この場合、R の宣言はプロシジャの先頭にあるものとみなされるのだろうけど
424デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 13:05:39.55ID:CqRWqB530 Private Sub Worksheet_Change(ByVal Target As Range)
application.enableevents=false
If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = Datesirial(Long)
日付2 = Datesirial(Long)
For day = 日付1 To 日付2
Dim R As Long
R = R + 1
Cell(R , "D").Value = day
Next day
End Sub
↑こんな感じでしょうか?
初心者すぎてすいません(汗
application.enableevents=false
If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = Datesirial(Long)
日付2 = Datesirial(Long)
For day = 日付1 To 日付2
Dim R As Long
R = R + 1
Cell(R , "D").Value = day
Next day
End Sub
↑こんな感じでしょうか?
初心者すぎてすいません(汗
425デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 13:12:30.82ID:trooC9Gj0 エナブルイベントの場所が違う
exti subのあとにエナブル入れるべきだし
命令終了後にエナブルイベントをtrueにしないとチェンジイベントが実行されなくなる
dateserialの構文はそもそも(変数年、変数月、変数日)
ロングとかいう変数型をぶちこまれても困っちゃうのでは
いっそダイレクトに日付1=(range("a1"),range("b1"),range("c1"))
とかにしてもいいかもね
とりあえず命令一個一個を自分で調べてから実行しないと身にならないよ
exti subのあとにエナブル入れるべきだし
命令終了後にエナブルイベントをtrueにしないとチェンジイベントが実行されなくなる
dateserialの構文はそもそも(変数年、変数月、変数日)
ロングとかいう変数型をぶちこまれても困っちゃうのでは
いっそダイレクトに日付1=(range("a1"),range("b1"),range("c1"))
とかにしてもいいかもね
とりあえず命令一個一個を自分で調べてから実行しないと身にならないよ
426デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 13:16:06.52ID:trooC9Gj0 間違えた
日付1=dateserial(range("a1"),range("b1"),range("c1"))
そもそもcellはスペルミスだからcellsじゃないと実行されないと思う
Cellsなどの命令は頭文字が大文字、残りは少文字になるはずだから、そうならないならスペルミスを疑ったほうが良い
日付1=dateserial(range("a1"),range("b1"),range("c1"))
そもそもcellはスペルミスだからcellsじゃないと実行されないと思う
Cellsなどの命令は頭文字が大文字、残りは少文字になるはずだから、そうならないならスペルミスを疑ったほうが良い
427デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 13:37:02.20ID:CqRWqB530 Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
application.enableevents=false
Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = dateserial(range("a1"),range("b1"),range("c1"))
日付2 = dateserial(range("a2"),range("b2"),range("c2"))
For day = 日付1 To 日付2
Dim R As Long
R = R + 1
Cell(R , "D").Value = day
Next day
End Sub
こんな感じでしょうか?
エナブルイベントについてググってみます
If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
application.enableevents=false
Dim 日付1 As Long Integer, 日付2 As Integer
日付1 = dateserial(range("a1"),range("b1"),range("c1"))
日付2 = dateserial(range("a2"),range("b2"),range("c2"))
For day = 日付1 To 日付2
Dim R As Long
R = R + 1
Cell(R , "D").Value = day
Next day
End Sub
こんな感じでしょうか?
エナブルイベントについてググってみます
428デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 13:39:40.44ID:trooC9Gj0 application.enableevents=trueをさいごにつけてくれ
あとdim r as longの宣言は日付と一緒におこなって
あとdim r as longの宣言は日付と一緒におこなって
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 ★2 [Hitzeschleier★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★2 [ぐれ★]
- 【中国局長】両国関係に「深刻な影響」 首相発言の撤回要求 [蚤の市★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★3 [BFU★]
- 日経平均の下落率3%超す、財政懸念で長期金利上昇 ★2 [お断り★]
- 【インバウンド】中国人観光客の日本での消費額は年間約2兆円超…中国政府は公務員の出張取り消し [1ゲットロボ★]
- 【実況】博衣こよりのえちえち歌枠🧪
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- 【雑談】暇人集会所part18
- 高市早苗「支持者の理解を得られないので台湾発言を撤回できない」 [931948549]
- 外務省局長、よくわからないまま帰国へ [834922174]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
