!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:jtngtgXU0386デフォルトの名無しさん (ワッチョイ 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の宣言は日付と一緒におこなって
429デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 13:44:43.40ID: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
application.enableevents=true
End Sub
>>あとdim r as longの宣言は日付と一緒におこなって
↑まったくわかりません(泣
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
application.enableevents=true
End Sub
>>あとdim r as longの宣言は日付と一緒におこなって
↑まったくわかりません(泣
430デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 14:00:05.29ID:trooC9Gj0 変数宣言の意味がわからないなら
dim系の命令はいっそ全部消しても良いかもね
よくみたら
Dim 日付1 As Long Integer, 日付2 As Integer
ロングインテガーとかいうわけわからん型にしてるし
dim系の命令はいっそ全部消しても良いかもね
よくみたら
Dim 日付1 As Long Integer, 日付2 As Integer
ロングインテガーとかいうわけわからん型にしてるし
431デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 14:15:56.57ID: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
Worksheets("1").Range("D1")= dateserial(range("a1"),range("b1"),range("c1"))
Worksheets("1").Range("D2") = dateserial(range("a2"),range("b2"),range("c2"))
End Sub
こんな感じでしょうか?
If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
application.enableevents=false
Worksheets("1").Range("D1")= dateserial(range("a1"),range("b1"),range("c1"))
Worksheets("1").Range("D2") = dateserial(range("a2"),range("b2"),range("c2"))
End Sub
こんな感じでしょうか?
432デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 14:43:47.53ID:trooC9Gj0 なんでループまで消した!
433デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 14:48:07.76ID: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
Worksheets("1").Range("D1")= dateserial(range("a1"),range("b1"),range("c1"))
Worksheets("1").Range("D2") = dateserial(range("a2"),range("b2"),range("c2"))
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
Worksheets("1").Range("D1")= dateserial(range("a1"),range("b1"),range("c1"))
Worksheets("1").Range("D2") = dateserial(range("a2"),range("b2"),range("c2"))
R = R + 1
Cell(R , "D").Value = day
Next day
End Sub
こんな感じでしょうか?
434デフォルトの名無しさん (アウアウウー Sa08-wusC)
2021/04/25(日) 15:14:07.43ID:c8qfwm7na どうせカッコが全角とかじゃね
435デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 15:22:01.39ID:trooC9Gj0 あーもう
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
日付1 = dateserial(range("a1"),range("b1"),range("c1"))
日付2 = dateserial(range("a2"),range("b2"),range("c2"))
For 日付 = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = 日付
Next
application.enableevents=true
End Sub
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
日付1 = dateserial(range("a1"),range("b1"),range("c1"))
日付2 = dateserial(range("a2"),range("b2"),range("c2"))
For 日付 = 日付1 To 日付2
R = R + 1
Cell(R , "D").Value = 日付
Next
application.enableevents=true
End Sub
436デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/25(日) 15:24:13.50ID:trooC9Gj0 間違えた
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
columns("d").clearcontents
application.enableevents=false
日付1 = dateserial(range("a1"),range("b1"),range("c1"))
日付2 = dateserial(range("a2"),range("b2"),range("c2"))
For 日付 = 日付1 To 日付2
R = R + 1
Cells(R , "D") = 日付
Next
application.enableevents=true
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:C2")) Is Nothing Or Target.Cells.Count > 6 Then Exit Sub
columns("d").clearcontents
application.enableevents=false
日付1 = dateserial(range("a1"),range("b1"),range("c1"))
日付2 = dateserial(range("a2"),range("b2"),range("c2"))
For 日付 = 日付1 To 日付2
R = R + 1
Cells(R , "D") = 日付
Next
application.enableevents=true
End Sub
437デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 15:32:25.96ID:CqRWqB530 >>436
すごい!!
できました!
コードを見て
私がが2ヶ月かかっても出来ないわけですね
こんなむずかしいことに挑戦していたなんて・・・
これからも勉強していつかは人に教えれるようになりたいです。
感謝!!
すごい!!
できました!
コードを見て
私がが2ヶ月かかっても出来ないわけですね
こんなむずかしいことに挑戦していたなんて・・・
これからも勉強していつかは人に教えれるようになりたいです。
感謝!!
438デフォルトの名無しさん (ワッチョイ 4b63-Z8j5)
2021/04/25(日) 15:36:23.25ID:xxLFjq7K0 いつかじゃなくて今すぐ人に教えられるように理解しろ
439デフォルトの名無しさん (ワッチョイ 3af0-3cD6)
2021/04/25(日) 15:37:54.87ID:CqRWqB530440デフォルトの名無しさん (ワッチョイ 70da-wusC)
2021/04/25(日) 17:53:19.26ID:K6WUBqIf0 なんでいつもそんなに上から目線でマウント取ってくるの?
人格破綻者なの??
人格破綻者なの??
441デフォルトの名無しさん (ワッチョイ 968e-iMGS)
2021/04/25(日) 18:16:22.33ID:vAt0cvBk0 いつものあいつだろ
442デフォルトの名無しさん (アウアウウー Sab5-4hJQ)
2021/04/25(日) 18:20:31.60ID:nATm0Zraa なになに役人のつくる書類よりはよほどまし
18ページ手前に書き込む内容が
3ページ後にアドレスをみなから手計算しなければならん
おなじページに書けないのか
こんなのが延々 50ページぐらい続く
ひどいスパゲッテイだよ
18ページ手前に書き込む内容が
3ページ後にアドレスをみなから手計算しなければならん
おなじページに書けないのか
こんなのが延々 50ページぐらい続く
ひどいスパゲッテイだよ
443デフォルトの名無しさん (アウアウウー Sab5-4hJQ)
2021/04/25(日) 18:33:35.35ID:nATm0Zraa 確定申告がこんなひといスパゲッテイだったとは
444デフォルトの名無しさん (ワッチョイ 2cda-On6t)
2021/04/25(日) 18:36:11.53ID:rqvjO/ad0 上から目線でマウントとる人は人格破綻者なのかw
445デフォルトの名無しさん (スッップ Sd70-l6c2)
2021/04/25(日) 21:25:32.74ID:n+Zq8N/Kd >>386
流石に多少やってる奴なら頭に書くのがそれじゃないと知ってる筈だが。
流石に多少やってる奴なら頭に書くのがそれじゃないと知ってる筈だが。
446デフォルトの名無しさん (ワッチョイ f64f-Opq7)
2021/04/25(日) 23:44:44.33ID:B0d72kDU0447デフォルトの名無しさん (ワッチョイ 70da-wusC)
2021/04/26(月) 01:31:30.42ID:0lQeMWYV0 牧野ここにも出没してんか?
暇なのか?あ?
暇なのか?あ?
448デフォルトの名無しさん (ワッチョイ a868-8KU9)
2021/04/26(月) 06:59:23.61ID:lovLRBcK0 だっさw
449デフォルトの名無しさん (ワッチョイ 70da-iXMK)
2021/04/26(月) 16:06:49.39ID:0lQeMWYV0 牧野の人気に嫉妬してるからよ
450デフォルトの名無しさん (アウアウウー Sa30-rqav)
2021/04/26(月) 16:38:43.84ID:g9sbyhzRa どなたかGetOpenFilenameでカレントディレクトリが変更されるの何とかできませんか?
構造体はさっぱり分からんのです
構造体はさっぱり分からんのです
451デフォルトの名無しさん (ワッチョイ bd10-aESV)
2021/04/26(月) 17:20:54.81ID:z51HLtPU0 元のアクティブブックを変数にして
戻せばいいだけだろう
どうせブック複数いじるなら変数のが便利だし
戻せばいいだけだろう
どうせブック複数いじるなら変数のが便利だし
452デフォルトの名無しさん (アウアウウー Sa30-rqav)
2021/04/26(月) 17:49:31.38ID:g9sbyhzRa453デフォルトの名無しさん (ワッチョイ f64f-Opq7)
2021/04/26(月) 17:52:36.88ID:Fs15ZcA/0 これ追加すりゃいいんじゃないの?
ChDir ThisWorkbook.Path
自ブックのパスがいやなら
設定用シートでも作っといて
そこに参照したいパス書いといて
それをChDirに設定しとけば?
ChDir ThisWorkbook.Path
自ブックのパスがいやなら
設定用シートでも作っといて
そこに参照したいパス書いといて
それをChDirに設定しとけば?
454デフォルトの名無しさん (アウアウウー Sa30-rqav)
2021/04/26(月) 18:05:41.03ID:g9sbyhzRa いや、それがダメなんですよね
chdirで設定したあとGetOpenFilenameを実行するとカレントディレクトリが変わって、で初期フォルダがあらぬ所に設定される
直前直後でdebug.print curdir入れて確認してるから、間違いなくGetOpenFilenameの段階で変更されてる……と思う?
ユーザーフォーム上に置いて繰り返し実行してるけど、どうやら1回目に開いたダイアログを変更すると、変更先のディレクトリを覚えて、次から勝手にそこに変えてくれているみたい
chdirで設定したあとGetOpenFilenameを実行するとカレントディレクトリが変わって、で初期フォルダがあらぬ所に設定される
直前直後でdebug.print curdir入れて確認してるから、間違いなくGetOpenFilenameの段階で変更されてる……と思う?
ユーザーフォーム上に置いて繰り返し実行してるけど、どうやら1回目に開いたダイアログを変更すると、変更先のディレクトリを覚えて、次から勝手にそこに変えてくれているみたい
455デフォルトの名無しさん (ワッチョイ 245f-QM0T)
2021/04/26(月) 18:10:37.42ID:qBKi4u1A0 それネットワークドライブ?
456デフォルトの名無しさん (アウアウウー Sa30-rqav)
2021/04/26(月) 18:15:43.70ID:g9sbyhzRa いや、Cです
457デフォルトの名無しさん (アウアウウー Sab5-4hJQ)
2021/04/26(月) 18:27:36.92ID:QRSOMQKpa chdirは古いコマンドだから、なにかエラー出しているのかも
458デフォルトの名無しさん (ワッチョイ ac49-8Khg)
2021/04/26(月) 18:58:56.85ID:+pOfqz7u0 カレントディレクトリを復元する際は、ChDriveとChDirをちゃんと両方やれよ
459デフォルトの名無しさん (ワッチョイ 412f-42zS)
2021/04/26(月) 19:19:25.15ID:/WVOYzSd0 問題がよくわからん
GetOpenFilename実行後にカレントディレクトリが変更されるって話なのか?
だったら実行後に戻せって話
GetOpenFilenameでカレントが変更されるのはヘルプにも明示された仕様だからどうしようもない
GetOpenFilenameの初期値がカレントディレクトリにならんって話なのか?
だったらまずコード曝せ
GetOpenFilename実行後にカレントディレクトリが変更されるって話なのか?
だったら実行後に戻せって話
GetOpenFilenameでカレントが変更されるのはヘルプにも明示された仕様だからどうしようもない
GetOpenFilenameの初期値がカレントディレクトリにならんって話なのか?
だったらまずコード曝せ
460デフォルトの名無しさん (スップ Sd02-On6t)
2021/04/26(月) 21:18:48.90ID:Qb9oKWtLd ステップ実行でChDirとかGetOpenFilenameの引数を全部チェックしたか?
461デフォルトの名無しさん (ワッチョイ a868-8KU9)
2021/04/26(月) 22:36:46.66ID:lovLRBcK0 今の子はもうカレントディレクトリ自体が謎仕様なのか
462デフォルトの名無しさん (ワッチョイ 154f-0NDc)
2021/04/26(月) 23:20:39.12ID:xr7wJCbA0 >>376だけど実引数がVariant型の参照渡しなら仮引数はカッコ付きのVariant型にできるのね
理由がよく分からないけど
配列のVariant型を引数にしたときの指定方法をパターン化したいんだけど全くわからん
理由がよく分からないけど
配列のVariant型を引数にしたときの指定方法をパターン化したいんだけど全くわからん
463デフォルトの名無しさん (ワッチョイ ac49-8Khg)
2021/04/26(月) 23:57:08.69ID:+pOfqz7u0 >>462
配列は配列の参照で受け渡すことが基本で、それはVariant型も同じ。
ただしVariant型は配列を格納できる。
Variant型の配列という意味ではなく、ひとつのVariant型の変数の中に
配列を格納できる。そこから考えてみたらいいと思うよ。
配列は配列の参照で受け渡すことが基本で、それはVariant型も同じ。
ただしVariant型は配列を格納できる。
Variant型の配列という意味ではなく、ひとつのVariant型の変数の中に
配列を格納できる。そこから考えてみたらいいと思うよ。
464デフォルトの名無しさん (ワッチョイ 154f-0NDc)
2021/04/27(火) 00:36:34.29ID:9wjO2iUR0465デフォルトの名無しさん (ワッチョイ bd10-y5Lq)
2021/04/27(火) 01:04:32.91ID:mgRy5CVU0 中身のない()つけたら動的と勘違いするだろ
466デフォルトの名無しさん (アウアウウー Sa30-rqav)
2021/04/27(火) 10:18:38.80ID:5d+cCuuaa >>459
2つ目と3つ目
ごめんなさい色々やって自決しました。変更先のフォルダ名にセミコロンが入ってたのがまずかったみたい。
どうしようもないので今回は諦めて違うことをします。お手数おかけしました。
2つ目と3つ目
ごめんなさい色々やって自決しました。変更先のフォルダ名にセミコロンが入ってたのがまずかったみたい。
どうしようもないので今回は諦めて違うことをします。お手数おかけしました。
467デフォルトの名無しさん (ワッチョイ 412f-42zS)
2021/04/27(火) 10:32:17.76ID:KMwaQK/30 >466
自決ってお前w
自決ってお前w
468デフォルトの名無しさん (ワッチョイ 412f-42zS)
2021/04/27(火) 10:51:44.25ID:KMwaQK/30 >>466
ちょっと試したけど、たしかにカレントディレクトリにセミコロンとか入ってると
そこが初期位置にならんな
カレントディレクトリを8.3形式で指定したらイケルっぽいぞ
いまさら直る気がせんが気になるならマイクロソフトに報告してみ
ちょっと試したけど、たしかにカレントディレクトリにセミコロンとか入ってると
そこが初期位置にならんな
カレントディレクトリを8.3形式で指定したらイケルっぽいぞ
いまさら直る気がせんが気になるならマイクロソフトに報告してみ
469デフォルトの名無しさん (アウアウエー Sa66-qRZI)
2021/04/27(火) 19:06:09.30ID:Xk0sjNEua ここではもうとっくにエラー429については議論され尽くしましたか?
初心者なのですが、file system objectを読もうとしたらアクティブXがそれはできませんと出て、どうしてよいやら
初心者なのですが、file system objectを読もうとしたらアクティブXがそれはできませんと出て、どうしてよいやら
470デフォルトの名無しさん (ワッチョイ 1e01-K+SG)
2021/04/27(火) 19:49:18.21ID:vIQbS3UC0 そんな用語使う初心者がいるか!
471デフォルトの名無しさん (アウアウエー Sa66-qRZI)
2021/04/27(火) 20:05:11.09ID:Xk0sjNEua え?
472デフォルトの名無しさん (ワッチョイ a868-8KU9)
2021/04/27(火) 20:33:52.91ID:Fi83YJTP0 な?
473デフォルトの名無しさん (ワッチョイ 245f-QM0T)
2021/04/27(火) 20:40:43.33ID:ecHnxSib0 り?
474デフォルトの名無しさん (ワッチョイ 8463-On6t)
2021/04/27(火) 20:45:59.35ID:UpvbOzN+0 ほんぎゅろげええええええええ
475デフォルトの名無しさん (JP 0H7d-0NDc)
2021/04/27(火) 23:48:49.38ID:9wjO2iURH 通常の=での代入でもVariantの()で宣言した変数には配列が入らないんだね
Range型の複数セルが代入できるので勘違いしてた
Range型が返す配列はVariant型だからできるっぽい?
Variant型の()付き変数は配列じゃなければどんな意味があるのか?
Range型の複数セルが代入できるので勘違いしてた
Range型が返す配列はVariant型だからできるっぽい?
Variant型の()付き変数は配列じゃなければどんな意味があるのか?
476デフォルトの名無しさん (ワッチョイ 245f-QM0T)
2021/04/28(水) 00:12:42.15ID:wZLkUEzX0 どんだけこだわるのよ
477デフォルトの名無しさん (ワッチョイ 8463-On6t)
2021/04/28(水) 00:34:41.28ID:oMne/ugv0 自分は好き勝手やってるのに俺らだけ奴隷労働しろと
ちょっとでも目立つのが気に入らんと
ちょっとでも目立つのが気に入らんと
478デフォルトの名無しさん (ワッチョイ 70da-iXMK)
2021/04/28(水) 02:49:41.12ID:R/cV679Q0 他人の事情なんか配慮しないのがデキるプログラマー
479デフォルトの名無しさん (ワッチョイ b701-Bsub)
2021/04/28(水) 03:25:04.10ID:yYRagbWx0 >>475
Variantの()で宣言した変数はVariant配列型の変数で、Valueの戻り値もちゃんと代入できるよ
ただし複数セルを参照しててValueが二次元配列を返すときに限る
一つのセルだけしか参照してない場合は配列を返さないので型不一致になる
Variantの()で宣言した変数はVariant配列型の変数で、Valueの戻り値もちゃんと代入できるよ
ただし複数セルを参照しててValueが二次元配列を返すときに限る
一つのセルだけしか参照してない場合は配列を返さないので型不一致になる
480デフォルトの名無しさん (ワッチョイ a868-8KU9)
2021/04/28(水) 05:59:25.47ID:OKDjIMLh0 そういやvbaの配列は、
・配列じゃない値
・countが1の配列
これが微妙に違っていた気がする
・配列じゃない値
・countが1の配列
これが微妙に違っていた気がする
481デフォルトの名無しさん (JP 0H98-On6t)
2021/04/28(水) 07:14:02.38ID:X/WADpVMH482デフォルトの名無しさん (アウアウウー Sa08-iXMK)
2021/04/28(水) 12:09:24.67ID:Jq2bf8XLa 配列にはいれっ
483デフォルトの名無しさん (アウアウウー Sa30-rqav)
2021/04/28(水) 13:41:38.64ID:K3oXR9qNa 変数を反芻
484デフォルトの名無しさん (ワッチョイ ac49-8Khg)
2021/04/28(水) 14:02:46.34ID:GqNxFOs40 Excelのオブジェクトを操作したときの動きからVBAの仕様を推測して
混乱してるように見えるな。質問スレじゃなくて、VBAについて教えて
くれる人や本やサイトを探した方がいいんじゃないか。
混乱してるように見えるな。質問スレじゃなくて、VBAについて教えて
くれる人や本やサイトを探した方がいいんじゃないか。
485デフォルトの名無しさん (アウアウウー Sab5-4hJQ)
2021/04/28(水) 19:07:20.75ID:fsi6lQwja ベテランの初心者がきました
よろぴく
よろぴく
■ このスレッドは過去ログ倉庫に格納されています
