回答編集履歴
3
微修正
test
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
|
14
14
|
For L = 2 To lRow
|
15
15
|
for M= 2 to mRow
|
16
|
-
If wsStart.cells(L,1).value >=
|
16
|
+
If wsStart.cells(L,1).value >= wsGoal.Cells(M, 1).value Then
|
17
17
|
MsgBox L '時刻を出したいならwsStart.cells(L,1).value
|
18
18
|
'処理的に一行一回ずつしか表示させなくていい気がするので内側のループを飛ばす
|
19
19
|
Exit For
|
@@ -41,7 +41,7 @@
|
|
41
41
|
|
42
42
|
For each L in wsStart.Range(wsStart.cells(2,1),wsStart.cells(LRow,1)
|
43
43
|
for M= 2 to mRow '一応、for each分は順番の保障がされてないので比較側は普通に回す
|
44
|
-
If L.value >=
|
44
|
+
If L.value >= wsGoal.Cells(M, 1).value Then
|
45
45
|
MsgBox L.value
|
46
46
|
Exit For
|
47
47
|
End If
|
2
コード修正
test
CHANGED
@@ -15,6 +15,8 @@
|
|
15
15
|
for M= 2 to mRow
|
16
16
|
If wsStart.cells(L,1).value >= Sheets("goal").Cells(M, 1).value Then
|
17
17
|
MsgBox L '時刻を出したいならwsStart.cells(L,1).value
|
18
|
+
'処理的に一行一回ずつしか表示させなくていい気がするので内側のループを飛ばす
|
19
|
+
Exit For
|
18
20
|
End If
|
19
21
|
nest M
|
20
22
|
Next L
|
@@ -41,6 +43,7 @@
|
|
41
43
|
for M= 2 to mRow '一応、for each分は順番の保障がされてないので比較側は普通に回す
|
42
44
|
If L.value >= Sheets("goal").Cells(M, 1).value Then
|
43
45
|
MsgBox L.value
|
46
|
+
Exit For
|
44
47
|
End If
|
45
48
|
nest M
|
46
49
|
Next L
|
1
修正
test
CHANGED
@@ -1,17 +1,20 @@
|
|
1
|
-
変数Mが未定義です。
|
1
|
+
変数Mが未定義です。また、Lはただの行数を表す数値なので時刻比較をしたいならば正しいとは言えません。
|
2
2
|
|
3
3
|
```ここに言語を入力
|
4
4
|
Sub compare_date()
|
5
5
|
|
6
6
|
Dim L as long , lRow as long, M as long, mRow As Long
|
7
7
|
|
8
|
+
dim wsStart as worksheet:set wsStart=thisworkbook.Sheets("start")
|
9
|
+
dim wsGoal as worksheet:set wsGoal=thisworkbook.Sheets("goal")
|
10
|
+
|
8
|
-
lRow = S
|
11
|
+
lRow = wsStart.Cells(Rows.Count, "A").End(xlUp).Row '日付データの最終行
|
9
|
-
mRow =
|
12
|
+
mRow = wsGoal.Cells(Rows.Count, "A").End(xlUp).Row '比較先の日付データの最終行
|
10
13
|
|
11
14
|
For L = 2 To lRow
|
12
15
|
for M= 2 to mRow
|
13
|
-
If L >= Sheets("goal").Cells(M,
|
16
|
+
If wsStart.cells(L,1).value >= Sheets("goal").Cells(M, 1).value Then
|
14
|
-
MsgBox L
|
17
|
+
MsgBox L '時刻を出したいならwsStart.cells(L,1).value
|
15
18
|
End If
|
16
19
|
nest M
|
17
20
|
Next L
|
@@ -19,3 +22,30 @@
|
|
19
22
|
End Sub
|
20
23
|
```
|
21
24
|
範囲セル指定でfor each を使う場合は変数にrangeオブジェクトが代入されるためrange型でないとエラーが出るのが原因です(variantは自動解釈してくれるので問題ありませんが、Long型だと型違いでエラーが出たということです)
|
25
|
+
|
26
|
+
for eachを使う場合
|
27
|
+
```ここに言語を入力
|
28
|
+
```ここに言語を入力
|
29
|
+
Sub compare_date()
|
30
|
+
|
31
|
+
Dim L as Range , lRow as long,
|
32
|
+
Dim M as Range, mRow As Long
|
33
|
+
|
34
|
+
dim wsStart as worksheet:set wsStart=thisworkbook.Sheets("start")
|
35
|
+
dim wsGoal as worksheet:set wsGoal=thisworkbook.Sheets("goal")
|
36
|
+
|
37
|
+
lRow = wsStart.Cells(Rows.Count, "A").End(xlUp).Row '日付データの最終行
|
38
|
+
mRow = wsGoal.Cells(Rows.Count, "A").End(xlUp).Row '比較先の日付データの最終行
|
39
|
+
|
40
|
+
For each L in wsStart.Range(wsStart.cells(2,1),wsStart.cells(LRow,1)
|
41
|
+
for M= 2 to mRow '一応、for each分は順番の保障がされてないので比較側は普通に回す
|
42
|
+
If L.value >= Sheets("goal").Cells(M, 1).value Then
|
43
|
+
MsgBox L.value
|
44
|
+
End If
|
45
|
+
nest M
|
46
|
+
Next L
|
47
|
+
|
48
|
+
End Sub
|
49
|
+
```
|
50
|
+
ただ、同じ時刻のデータがあるかどうかを比較するならばVBAにもDictionaryがあるのでこちらを使ったほうが簡潔で便利だと思います。
|
51
|
+
https://daitaideit.com/vba-dictionary/
|