1 名前:デフォルトの名無しさん mailto:sage [2021/03/18(木) 22:08:43.71 ID:jtngtgXU0.net] !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
321 名前:デフォルトの名無しさん mailto:sage [2021/04/20(火) 21:33:10.03 ID:grfVULwwa.net] 文章のきほんは5w1H
322 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 00:03:03.35 ID:VYKRrHWq0.net] 現場のためにマクロ作ってて 性能確認は現場に投げてるけど どういう処理をしてるとか一切考慮してなくて正常な処理をバグ言われてちょっと辛い わかる人いる?
323 名前:デフォルトの名無しさん [2021/04/21(水) 00:28:41.53 ID:mZ1GtAH60.net] わかる。仕様も確定できない馬鹿だと。
324 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 00:48:54.24 ID:VYKRrHWq0.net] すごく突っ込みたいけどかなーり年上のおじいちゃんばっかでちょっと言いづらかったり ありがとう、ちょっと楽になった 明日ガツンと言ってやる(笑)
325 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 02:31:17.44 ID:QPNAyMuU0.net] >>321 わからんな コミュニケーション不足なだけだろ
326 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 04:00:51.54 ID:KhV9jsbh0.net] 正常な処理なら伝えりゃいいだけだろ MsgBox出すなり、シートに書いとくなり、口で言うなりして
327 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 11:09:16.06 ID:aZ4kV5qwa.net] わからんものを説明するときは5w1hでよいから 聞いているほうも分かった気になる
328 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 12:00:56.40 ID:TWzI1JIsM.net] エラーメッセージ出そうが絵本みたいなマニュアル作ろうが「ちゃんと動かないぞ!ポンコツめ!」って騒ぐオヤジがおる。んでよくよく聞いてみたらメッセージは読まずに閉じるわマニュアルは開くことすらしてねぇわ日付入力しろって書いてある項目に「多分5/10」とか書いてくれちゃうわであぁ何やっても無駄な時は無駄なんだなぁってなった事が何度もある
329 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 12:37:02.29 ID:BXHy+8up0.net] >>327 直接お客さんとやり取りしてるの? そうで無ければ上司か島のリーダーさんに 中間に入ってもらえば? もし直接お客さんとやり取りしているなら そもそもプログラマーとお客さんが 窓口も介さず直接やり取りを行う 形態自体に問題があると思うけど リーダーさんとか上司に相談するべき もっとも、自分がその窓口ですと言うのなら 最初っからどこをどうして欲しいか よーく聞いてから作る方がいい。 どうせ用件定義書なんて存在して いないんでしょ?
330 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 14:00:48.01 ID:aZ4kV5qwa.net] おいおい、エクセルのマクロぐらいで定義書はつくらんだろ ふつうはマクロができてからしようが決まるから
331 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 17:35:07.95 ID:Gd/0Jck0M.net] >>327 さすがにIsDateくらい使おうぜ
332 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 17:53:28.95 ID:k6MIIAN/r.net] 年配のジジイ騙して金取れるなら今の体制維持も考慮すべき
333 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 18:25:58.81 ID:2kwhHx0qM.net] >>328 上司に頼まれて作った子会社の人達の作業進捗を確認する為のスケジュール管理ツールなんだ 今まで手書きでやってたのを電子化したかったんだと 要求仕様の箇条書きを渡されて好きに作っていいって言われたから仕様書とかコーディング規約とか諸々自分で用意した まぁ流石に向こうの課長さんから当事者のおっちゃんに雷落ちたらしいが >>330 流石に動作前に入力のエラーチェックはかけてるさ それでlsDateでチェックして日付じゃなけりゃ処理を停止して「No.〇〇の工程の開始予定日が日付じゃねぇから書き直せ」って類のメッセージ出してるんだがメッセージ読んでねぇから「マトモに動かないポンコツツール」って喚き散らしてたんよ
334 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 19:16:43.30 ID:aZ4kV5qwa.net] 中抜きの現場をそのまま見ているような 人の入力チェックはけっこうノウハウいるのね
335 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 19:18:54.99 ID:aZ4kV5qwa.net] 進捗管理ツールてまともな奴はみたことがない
336 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 20:16:57.95 ID:ukt/rEUCa.net] 文句いわれた程度で逆ギレかやっぱゆとりだな
337 名前:デフォルトの名無しさん [2021/04/21(水) 20:18:22.64 ID:mZ1GtAH60.net] >>332 やっぱり馬鹿か
338 名前:デフォルトの名無しさん mailto:sage [2021/04/21(水) 21:08:21.14 ID:BXHy+8up0.net] >>332 なるほど大体状況は理解出来た まぁボロくそに言ってたおっちゃんもおっちゃんだけど、果たして君の作ったツールは 今まで手書きでやってた人がいきなりパソコン使って打ち込めるような優しい設計になっていたのかな? 下請けでしかもスケジューラー作成なんて自由度の高いものを上司が君に振ったのはひょっとしたらその辺の事も兼ねて 君が今回それを通してどんなことを学ぶかを見ていた可能性があるね。 そのおっちゃんはボロくそに言ったかも知れないけどそれが現場で作業している人の正直な意見であることには間違いないよ。厳しいかも知れないけどね。
339 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 07:33:17.38 ID:7heM3Ej5M.net] まあVBAじゃなくとも自分が便利だと思っている価値観を人に理解してもらうのは難しい
340 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 09:34:46.13 ID:gwtiqwMsM.net] >>329 仕様書はどういう形式で作るかによる マクロも仕様書に載せるとルール付けしたら必要になる
341 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 12:44:53.98 ID:hcaPQHcf0.net] 自分の給料がどこから来るのかを考えれば適当な対応はできないとおもうが
342 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 17:31:38.77 ID:voAAUW4i0.net] VBAでは非0は真として扱われるということでいいですか?
343 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 17:54:34.03 ID:aG329xgw0.net] >>341 型による
344 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:05:18.29 ID:voAAUW4i0.net] >>342 整数です
345 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:08:01.13 ID:voAAUW4i0.net] あーけど エラー値も判定の対象になるかもです
346 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:25:55.35 ID:voAAUW4i0.net] ごめんなさい回りくどい質問せずに 直球で質問すると if instr(str1,str2)>0 then の>0って要らなくないか?ってことです
347 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 18:47:47.49 ID:aG329xgw0.net] >>345 やめとけ。まずInstrで何が返ってくるのか確認するんだ officetanaka.net/excel/vba/function/instr.htm NULLが入って来ることもあるからLEN関数で囲む感じになるのか? どちらにしても可読性が落ちるようなものやトリッキーなことはなるべく避けた方がいい そんなこと全般に渡ってやってたら 1月後には自分が作ったソースが読めなくなるぞ
348 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 19:10:26.59 ID:+FKRqhM4a.net] うむ 理系のひとはなんでも 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 こうしておく、終電に間に合うぞ
349 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 19:52:34.43 ID:UidQzhn6H.net] >>347 演算子や論理式は、何を判定したいかに合わせて使い分けろ そしてコメントを書け
350 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 21:01:52.31 ID:hn+92ycNd.net] 理系文系家系関係あるかそれ
351 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 23:02:56.56 ID:vfns6Sdda.net] VBAでは問題ないのだろうけど、TRUE をイコールで判定するのはどうも…
352 名前:デフォルトの名無しさん mailto:sage [2021/04/22(木) 23:11:41.16 ID:voAAUW4i0.net] ありがとうございます 素直に省略せずに比較演算子を使うことにします
353 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 01:03:06.83 ID:ftZ+9Vdga.net] >>349 体育会
354 名前:系もついか [] [ここ壊れてます]
355 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 04:16:22.24 ID:IAv7U8Ah0.net] >>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が入ると 思ってしまうこともある 単純な式だから「そんなバカいねーよ」と 思うかも知れないけど これを複雑な式に混ぜられた場合を考えると 結構キツいことになったりもするよ
356 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 05:12:18.96 ID:Rqoeq7ma0.net] 話の主旨が分からん 代入じゃないんだから「==」にしたいって話? それならBooleanは関係ないよな…
357 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 05:41:22.55 ID:IAv7U8Ah0.net] >>354 すまん。 最初Integerで書こうかなとも思ったんだけど それだと本当にエラーにならないか自信がなかったんだ。
358 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 05:51:27.06 ID:IAv7U8Ah0.net] 手前側のイコールが代入で後ろのイコールが比較演算子だから他の言語だと A = B == C; みたいな書き方になったりするのかな ただVBAではどっちもイコールひとつで分かり辛いから、その辺ちゃんと分かるように書いた方がいいよと言うのが話の趣旨だね
359 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 06:24:58.47 ID:TaQs1RgsH.net] それは文法の話であって論理(式)の話ではないな 途中で混ざってすり変わってる
360 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 06:27:12.51 ID:P8K+Jhr50.net] 5
361 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 06:40:22.74 ID:TaQs1RgsH.net] a=b=cがすべて代入になる言語もあるからややこしいって話だと思うけど 手を抜かずに式を分けたりカッコを付ければいいだけ コメントを書いたり変数名をわかりやすくするのと同列で、ミスを減らす工夫はプログラマーの義務 すべて代入したい時 b=c a=b 比較したい時 a=(b=c)
362 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 07:36:07.75 ID:F+E5VVCoa.net] プログラム上の論理式は2値論理がほとんどだから じっさいは仕様によっていくらでも沢山あるからあるから そういうのは丁寧にコメントをいくしかない
363 名前:350 mailto:sage [2021/04/23(金) 09:30:59.30 ID:fSz9RP/oa.net] 僕が言ったのは次のようなことです 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 と定義されていて、これは比較に用いてもよい
364 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 09:32:37.82 ID:ze7VlHimM.net] >>359 > 比較したい時 > a=(b=c) それは… > a=b=cがすべて代入になる言語 だと、結局代入になるからあまり意味はないよ
365 名前:350 mailto:sage [2021/04/23(金) 09:32:48.97 ID:fSz9RP/oa.net] 間違ってたらごめんなさい
366 名前:350 mailto:sage [2021/04/23(金) 09:35:24.69 ID:fSz9RP/oa.net] a = b = c = 0 で、a、b、c すべてに 0 を代入したいとか
367 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 09:46:20.67 ID:IAv7U8Ah0.net] >>363 それで合ってるよ ちなみに-1なのは変数の内容を ビットとして見たとき全て立っていると 言うことの名残りだって 昔このスレの誰かが言ってた もっとも今内部的にPコードで ビットがどれか立っていればって 判断しているかは知らんけど
368 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 09:48:01.57 ID:TaQs1RgsH.net] VBやVBAだと0だけがfalse、それ以外はみんなtrueとみなされる たとえば a = 100 If a Then だとaはtrueになってIfの中が実行される
369 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 12:40:15.83 ID:F+E5VVCoa.net] 2値論理はむかし60年から70年台のワイヤーロジック時代にもて囃されたけど もう令和なんだし、古すぎるよね 80歳のおじいさんならともかく 若い人は使わないようにしましょ
370 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 12:45:24.75 ID:F+E5VVCoa.net] リレーやSWを組み合わせてコンピュータをつくろう そんなチャレンジャーはいるかな
371 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 14:08:52.13 ID:tTrKrHtH0.net] Falseが0とかいうのは正確には正しくない Falseを数値として評価すると0というのが正しくて 暗黙の変換を無視して話すとおかしなことになるぞ Trueが0以外というのはもっと間違ってて Trueは数値として評価すると-1 0以外の数値をBooleanとして評価するとTrueというのが正しい 型にゆるいというBASICの伝統を引き継いで暗黙の変換って仕様があるせいなんだが まあ今更その仕様にどうこう言ってもなぁ
372 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 14:38:37.17 ID:fkUQFj8fa.net] 結局のところ3ヶ月後の自分がコードの理解ができるかどうかってところよね
373 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 19:44:06.36 ID:8NALutx50.net] 別の奴が新しいの作ってるに1ガバチョ
374 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 21:55:04.78 ID:TCRfyG2B0.net] VBAで書くようなコードは変数名をちゃんと書いておけば大体問題ないよ 質問しにくる人のコード見ると、aみたいな意味のない変数名や省略してたりするのが多いんで・・・ VBAってプログラミングの入口になる事が多いので、 妙な向上心から変なテク(特に処理速度関係)を導入しがちだけど、 バカみたいに基本に忠実かつ丁寧にするのがいいと思います。
375 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 21:58:49.34 ID:g1z9C06A0.net] >>370 至言だよな。
376 名前:デフォルトの名無しさん mailto:sage [2021/04/23(金) 22:02:08.91 ID:g1z9C06A0.net] >>372 w 仕事で使わされてる「しすてむ」のvba部分のソース開いたらまさに If c = r/2 then cc = r/2 rr = r/4 End If みたいな感じで、しかもノーコメントだったわ。何してるルーチンなのかも 説明なくて読む気になれなかった。
377 名前:デフォルトの名無しさん [2021/04/23(金) 22:29:27.77 ID:lNHxMJRv0.net] 色々なデータを引っ張ってきて、加工してピボット作って集計して・・・結局使ってねー! ってコードを見た時はずっこけた 改修前になにかで使ってたのかもしれないけど
378 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 01:19:16.60 ID:zm0BIqCc0.net] 配列を引数にしたときに関数側でVariant()で受け取れないのは何故? Variantカッコなしなら問題ないんだけど理屈が分からない
379 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 02:14:07.08 ID:4BGM8nym0.net] >>294 カワいい〜 どのコが好みなのよ?
380 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:12:03.15 ID:nm6+mfpAa.net] >>370 いいね、 他人がつくったやつを動かんから直してくれ、のほうが多いもんな でも、直してくれというのはユーザーが居るのだから需要は確実だよな
381 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:30:08.06 ID:nm6+mfpAa.net] だから他人のつくったソフトを治すのがけっこう好き
382 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:59:02.95 ID:hh64S9E70.net] 俺は嫌い 大体人のもの直せって話が降ってくるときは 他の人が見た後で、ぐっちゃぐちゃで どんだけスパゲティが好きなんだよ、 お前はこの関数に何をやらせたかったんだよ! みたいのばっかり そして大概作り直した方が早い
383 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 09:29:33.79 ID:B50KhnoE0.net] 早いというか素直に作れる
384 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 09:30:19.42 ID:y3ko2vbIM.net] >>380 おバカ自慢は要らない
385 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 09:44:22.09 ID:nm6+mfpAa.net] www それをバージョンアップと言うんだよ
386 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 14:07:12.02 ID:K1BlKgeMH.net] 言わない、かな
387 名前:デフォルトの名無しさん [2021/04/24(土) 16:44:37.66 ID:0Etp2+DY0.net] >>380 スパゲティっていうのはあんたが思っているようなレベルじゃないよ。 GoTo文で前のループのif文の中に飛んだりするのがスパゲティで、いまの時代は解析困難なコードはほぼない。
388 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 16:54:39.75 ID:hh64S9E70.net] 後、稀にあるのが 頭にOption Scriptを書かずに変数宣言で型を付けない奴 はぁ?VBScriptですか?JavaScriptですか? バカなの?死ぬの? ってなるのもある 後は比較的軽症なんでそんなに文句垂れるほどじゃないんだけど 変数宣言をIfやFor文の中にその括りで書く人 ああ、何かのObject指向言語やってたのね とはなるけど、その場合あまりスパゲティソースになっていることが少ないので ある意味少し安心出来る。 後お客さんが自分で作ったけどよく分からないから直して欲しいと言ってくる奴 これは比較的小さいし面白いことが多いから逆にウエルカムのパターン まず変数名や関数名が日本語の場合が多い。 まぁこれは別にいい。いや、良くはないけど見てて分かるし。 ただその名称が「豚コマ150g」とか「ハウスバー○モンドカレー」とかになっていると え、夕食カレーだったの?ジャワやゴールデンじゃ駄目なんですか?ってなる
389 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 17:10:21.36 ID:hh64S9E70.net] >>385 そこは認識の違いだね まぁ別の言語もやってるせいかも知れないけど 俺の中では単一責任原則に沿って作られていない場合、既にスパゲティコードの臭いを感じとって つらつらと見て行くと5000行くらいの関数とか作っている時点で少しキレ掛かる 俺の中ではFor Nextの中にGoto文で飛ぶことは構造化言語として組むものとして 既に破綻していることを意味している。 その部分は完全に作り直しにするわ。
390 名前:デフォルトの名無しさん [2021/04/24(土) 20:41:03.69 ID:0Etp2+DY0.net] そんなレベルじゃ、仕事にならないだろ。
391 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 21:36:02.54 ID:rN7nWBsMd.net] 一身上の都合によりIfやForやGoto以下でワザとDimを書く場合もご察しください
392 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 22:10:18.46 ID:S/MxMxKT0.net] vbaやり始めてから世界が変わった 正直関数じゃマジで簡単なの以外はどうにもならんし 下手に複雑な式作っても気まぐれですぐ消されるし
393 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 22:26:59.54 ID:4BGM8nym0.net] そして嫌われるし
394 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 00:02:34.42 ID:trooC9Gj0.net] 特にすごいのが他のアプリの操作機能 今まで月に4時間へばりつかないといけなかったのへばり付かないといけなかったの作業が40分で済む その間することないからスマホいじるか昼食中に動かしても良い エクセル神すぎん?
395 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 00:03:25.63 ID:trooC9Gj0.net] ごめん誤字 今まで月に4時間へばりつかないといけなかった作業が40分で済む
396 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 01:50:00.98 ID:RbwSHn/Ua.net] 可読性ゼロの複雑な関数書いて悦に入ってるヤツは無能
397 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 06:48:34.57 ID:rqvjO/ad0.net] 本当の地獄はこれから
398 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 09:13:58.07 ID:CqRWqB530.net] 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
399 名前:, Month:=mm, Day:=dd) End With End Sub 自動でB2の日付が変更するようにしたいのですが どうしたらいいかわかりません ActivateではなくChangrイベントだと思いますが どこにどのように記述したらいいのでしょうか? ここの先生たちにいつもお世話になってます 初心者にご教授してください [] [ここ壊れてます]
400 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 09:26:59.35 ID:4pLy3lS70.net] ワークシートのDATE関数が手っ取り早い
401 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:00:44.54 ID:iVVOnnBO0.net] そもそも文字列を即日付に変換するぐらいなら最初から日付を入力するようにしてたほうが面倒くさくなくていいと思うが
402 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:04:58.97 ID:CqRWqB530.net] DATE関数? =DATE(A1,A2,A3) ↑これですか? やってみたのですが、なぜか自動計算されないときがあったので ユーザーフォームからA1、B1、C1に入力しB2に日付1を表示させ もう一つA2、B2、C2にもユーザーフォームから入力し日付2を表示させ 日付1から日付2までの期間のすべての日付をD1〜D999に表示したいのですが 初心者過ぎてむずかしいです
403 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:15:36.34 ID:eytlE9OXa.net] >>399 閏年が大変だな
404 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:23:41.87 ID:CqRWqB530.net] D999としてますが実際はD7ぐらいしかつかわないので 閏年は考慮しなくても大丈夫です
405 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:27:00.72 ID:trooC9Gj0.net] 注意 標準モジュールではなくお目当てのシートモジュールに記載すること 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
406 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:28:07.28 ID:trooC9Gj0.net] あ、ごめんこれ違うわ
407 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:32:09.85 ID:trooC9Gj0.net] ユーザーフォームは経由は処理が面倒だしエクセルいま手元にないから検証が俺には無理だわ ただのシート経由ならまだ行けるけど
408 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:36:16.85 ID:trooC9Gj0.net] あとB2への処理がすでに日付と月の入力で重複しとるやん どうしろと 初心者ならユーザーフォームなんてクソ面倒なもの 使わないほうがいいと思うけど
409 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:39:05.26 ID:4pLy3lS70.net] >>399 とりあえずこんな感じかなあ 変数宣言は省略 日付1 = Datesirial(適当に) 日付2 = Datesirial(適当に) For day = 日付1 To 日付2 R = R + 1 Cell(R , "D").Value = day Next d
410 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:40:46.57 ID:4pLy3lS70.net] ↑ Next d × Next day ○
411 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:42:21.10 ID:trooC9Gj0.net] For d = 日付1 To 日付2 R = R + 1 Cell(R , "D").Value = d Next d
412 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:49:18.11 ID:trooC9Gj0.net] 修正 columns("d").clearcontents 日付1 = Datesirial(適当に) 日付2 = Datesirial(適当に) For d = 日付1 To 日付2 R = R + 1 Cells(R , "D").Value = d Next d
413 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 10:58:25.82 ID:CqRWqB530.net] >>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 ↑こんな感じでしょうか?初心者すぎて変数宣言とかむずかしいです
414 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 11:09:05.98 ID:trooC9Gj0.net] まずあの上の命令はWorksheet changeじゃなくてユーザーフォームに書き込む ユーザーフォームを作らないといけないけど、適当に欄作って その空欄へ a1からc2の内容をすべて転記しないといせない ユーザーフォームの変更があったら逆にa1-c2へ反映 その上で入力用のユーザーフォームをどうにかして表示するところからスタートだね 絶対面倒くさい
415 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 11:14:02.50 ID:CqRWqB530.net] ユーザーフォームからA1、B1、C1に入力しB2に日付1を表示させ もう一つA2、B2、C2にもユーザーフォームから入力し日付2を表示させ 日付1から日付2までの期間のすべての日付をD1〜D7に表示したいのですが 初心者過ぎてむずかしいです ↑ユーザーフォーム経由じゃなくても 上記のようなエクセル表を作りたいのですが 簡単な方法ありますか?
416 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 11:14:40.82 ID:4pLy3lS70.net] >>410 全部Long型で宣言しないと あとはこれも宣言する Dim day As Long Dim R As Long そしてNext dayに直す
417 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 11:16:40.69 ID:trooC9Gj0.net] 変数名がdayだとvbaの標準命令のday(シリアル値)とかぶるからエラー起こさない?
418 名前:350 mailto:sage [2021/04/25(日) 11:25:35.70 ID:kagSPvTda.net] 予約語じゃなく関数名だから大丈夫じゃないかな ただ、関数を書いたときに頭文字が小文字になったり嫌だから避けるかな
419 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 11:39:20.76 ID:4pLy3lS70.net] >>414 あーそういう心配もあるのね 分かりやすく書いたつもりなんだけど
420 名前:350 mailto:sage [2021/04/25(日) 11:40:49.20 ID:kagSPvTda.net] 試してみると、同一スコープ内だと Dim day As Long day = VBA.day(Now()) Debug.Print day のように関数名を修飾しないとでした 当たり前か
421 名前:デフォルトの名無しさん mailto:sage [2021/04/25(日) 12:09:23.12 ID:CqRWqB530.net] 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 こんな感じでしょうか?