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


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

Excel VBA 質問スレ Part70



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]


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



仕事で使わされてる「しすてむ」の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

こんな感じでしょうか?






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

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

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