teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

バグ修正

2016/11/16 02:29

投稿

ynakano
ynakano

スコア1894

answer CHANGED
@@ -18,55 +18,42 @@
18
18
 
19
19
  Dim CurRow As Integer '現在の行番号
20
20
  Dim CurColumn As Integer '現在の列番号
21
-
22
- Dim flg As Boolean '"1"書き込み中フラグ
21
+
23
-
24
22
  MaxRows = Range("A1").CurrentRegion.Rows.Count '最大行数取得
25
23
  MaxColumns = Range("A1").CurrentRegion.Columns.Count '最大列数取得
26
24
 
27
25
  For CurRow = 2 To MaxRows '2行目から最終行まで順番に処理(1行目は見出しだけなので処理しない)
28
- flg = False '"1"書き込み中フラグをオフにする
29
-
30
- For CurColumn = 3 To MaxColumns 'C列から最終列まで順番に処理
26
+ For CurColumn = 3 To MaxColumns '3から最終列まで順番に処理
31
27
  If CurColumn = 3 Then
32
- '現在列がC列の場合は開始時刻を取得
28
+ '現在列が3の場合は開始時刻を取得
33
29
  StartHour = Hour(Cells(CurRow, CurColumn).Value)
34
30
  StartMinute = Minute(Cells(CurRow, CurColumn).Value)
35
31
  ElseIf CurColumn = 4 Then
36
- '現在列がD列の場合は終了時刻を取得
32
+ '現在列が4の場合は終了時刻を取得
37
33
  EndHour = Hour(Cells(CurRow, CurColumn).Value)
38
34
  EndMinute = Minute(Cells(CurRow, CurColumn).Value)
39
35
  Else
40
- 'E列以降
41
- If flg = False Then
42
- '"1"書き込み中フラグがオフの場合、1行目に記載されている時刻を取得
36
+ '自列1行目に記載されている時刻を取得
43
- CurHour = Hour(Cells(1, CurColumn).Value)
37
+ CurHour = Hour(Cells(1, CurColumn).Value)
44
- CurMinute = Minute(Cells(1, CurColumn).Value)
38
+ CurMinute = Minute(Cells(1, CurColumn).Value)
45
39
 
40
+ '次の列の1行目に記載されている時刻を取得
41
+ NextHour = Hour(Cells(1, CurColumn + 1).Value)
42
+ NextMinute = Minute(Cells(1, CurColumn + 1).Value)
43
+
46
- If StartHour = CurHour And StartMinute - CurMinute <= 4 Then
44
+ If StartHour < CurHour Or (StartHour = CurHour And StartMinute - CurMinute <= 4) Then
45
+ '開始「時」が1行目の「時」未満、もしくは
47
- '開始「時」が1行目の「時」と同じかつ、開始「分」マイナス1行目の
46
+ '開始「時」が1行目の「時」と同じかつ、開始「分」マイナス1行目の「分」が4分以下の場合
48
- '「分」が4分以下の場合
49
- flg = True '"1"書き込み中フラグをオンにする
50
-
51
- Cells(CurRow, CurColumn).Value = "1" '現在セルに"1"を書き込む
52
- End If
53
- Else
54
- '"1"書き込み中フラグがオンの場合、まずは現在セルに"1"を書き込む
47
+ '現在セルに"1"を書き込む
55
- Cells(CurRow, CurColumn).Value = "1"
48
+ Cells(CurRow, CurColumn).Value = "1"
56
-
57
- '次の列の1行目に記載されている時刻を取得
58
- NextHour = Hour(Cells(1, CurColumn + 1).Value)
59
- NextMinute = Minute(Cells(1, CurColumn + 1).Value)
60
-
61
- If EndHour < NextHour Then
62
- '終了「時」が次列の「時」未満の場合、内側のループを抜けて次の行の処理に移る
63
- Exit For
64
- ElseIf EndHour = NextHour And EndMinute < NextMinute Then
65
- '終了「時」が次列の「時」と同じ場合、終了「分」が次列の「分」未満なら
66
- '内側のループを抜けて次の行の処理に移る
67
- Exit For
68
- End If
69
49
  End If
50
+
51
+ If EndHour < NextHour Or (EndHour = NextHour And EndMinute < NextMinute) Then
52
+ '終了「時」が次列の「時」未満の場合、もしくは
53
+ '終了「時」が次列の「時」と同じかつ、終了「分」が次列の「分」未満の場合
54
+ '内側のループを抜けて次の行の処理に移る
55
+ Exit For
56
+ End If
70
57
  End If
71
58
  Next
72
59
  Next

4

誤字・・・

2016/11/16 02:29

投稿

ynakano
ynakano

スコア1894

answer CHANGED
@@ -62,7 +62,7 @@
62
62
  '終了「時」が次列の「時」未満の場合、内側のループを抜けて次の行の処理に移る
63
63
  Exit For
64
64
  ElseIf EndHour = NextHour And EndMinute < NextMinute Then
65
- '終了「時」が次列の「時」と同じ場合、終了「分」が次列の「分」未満なら
65
+ '終了「時」が次列の「時」と同じ場合、終了「分」が次列の「分」未満なら
66
66
  '内側のループを抜けて次の行の処理に移る
67
67
  Exit For
68
68
  End If

3

記載漏れ

2016/11/15 14:35

投稿

ynakano
ynakano

スコア1894

answer CHANGED
@@ -55,8 +55,8 @@
55
55
  Cells(CurRow, CurColumn).Value = "1"
56
56
 
57
57
  '次の列の1行目に記載されている時刻を取得
58
- NextHour = Hour(Cells(1, CurColumn + 1))
58
+ NextHour = Hour(Cells(1, CurColumn + 1).Value)
59
- NextMinute = Minute(Cells(1, CurColumn + 1))
59
+ NextMinute = Minute(Cells(1, CurColumn + 1).Value)
60
60
 
61
61
  If EndHour < NextHour Then
62
62
  '終了「時」が次列の「時」未満の場合、内側のループを抜けて次の行の処理に移る

2

ロジック誤り

2016/11/15 14:33

投稿

ynakano
ynakano

スコア1894

answer CHANGED
@@ -43,8 +43,9 @@
43
43
  CurHour = Hour(Cells(1, CurColumn).Value)
44
44
  CurMinute = Minute(Cells(1, CurColumn).Value)
45
45
 
46
- If CurHour = StartHour And CurMinute >= StartMinute Then
46
+ If StartHour = CurHour And StartMinute - CurMinute <= 4 Then
47
- '1行目の「時」が開始「時」と同じかつ、1行目の「分」が開始「分」以上場合
47
+ '開始「時」が1行目の「時」と同じかつ、開始「分」マイナス1行目
48
+ '「分」が4分以下の場合
48
49
  flg = True '"1"書き込み中フラグをオンにする
49
50
 
50
51
  Cells(CurRow, CurColumn).Value = "1" '現在セルに"1"を書き込む

1

誤記修正

2016/11/15 14:01

投稿

ynakano
ynakano

スコア1894

answer CHANGED
@@ -40,8 +40,8 @@
40
40
  'E列以降
41
41
  If flg = False Then
42
42
  '"1"書き込み中フラグがオフの場合、1行目に記載されている時刻を取得
43
- CurHour = Hour(Cells(1, CurColumn))
43
+ CurHour = Hour(Cells(1, CurColumn).Value)
44
- CurMinute = Minute(Cells(1, CurColumn))
44
+ CurMinute = Minute(Cells(1, CurColumn).Value)
45
45
 
46
46
  If CurHour = StartHour And CurMinute >= StartMinute Then
47
47
  '1行目の「時」が開始「時」と同じかつ、1行目の「分」が開始「分」以上の場合