質問編集履歴
7
文言の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
何卒、よろしくお願いします。
|
5
5
|
|
6
|
+
|
6
7
|
実現したいこと
|
7
8
|
--------------
|
8
9
|
このような手順で処理を行っていこうと考えています。
|
6
文言の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -27,15 +27,10 @@
|
|
27
27
|
上記「実現したいこと」記載の
|
28
28
|
「各行で年月の値を取得し、最小値と最大値を求める」処理の方法がわかりません。→解決済み
|
29
29
|
|
30
|
-
ご回答いただいた内容を参照して、ソースを作成し直したが
|
30
|
+
ご回答いただいた内容を参照して、ソースを作成し直したが(現在まで完成しているコード)
|
31
31
|
「オブジェクト変数またはWithブロック変数が設定されていません」
|
32
32
|
という内容のエラーメッセージが出てしまう。
|
33
33
|
|
34
|
-
下記のソースコード
|
35
|
-
'取得した年月の最大値と最小値を求めて、最小値から最大値までを1ヶ月間隔で転記していく
|
36
|
-
部分
|
37
|
-
|
38
|
-
|
39
34
|
現在まで完成しているコード
|
40
35
|
---------
|
41
36
|
|
5
ソースの編集
title
CHANGED
File without changes
|
body
CHANGED
@@ -25,8 +25,12 @@
|
|
25
25
|
困っている事
|
26
26
|
---------
|
27
27
|
上記「実現したいこと」記載の
|
28
|
-
「各行で年月の値を取得し、最小値と最大値を求める」処理の方法がわかりません。
|
28
|
+
「各行で年月の値を取得し、最小値と最大値を求める」処理の方法がわかりません。→解決済み
|
29
29
|
|
30
|
+
ご回答いただいた内容を参照して、ソースを作成し直したが
|
31
|
+
「オブジェクト変数またはWithブロック変数が設定されていません」
|
32
|
+
という内容のエラーメッセージが出てしまう。
|
33
|
+
|
30
34
|
下記のソースコード
|
31
35
|
'取得した年月の最大値と最小値を求めて、最小値から最大値までを1ヶ月間隔で転記していく
|
32
36
|
部分
|
@@ -38,34 +42,61 @@
|
|
38
42
|
```VBA
|
39
43
|
Sub SheetTenki()
|
40
44
|
'
|
41
|
-
Dim ec As Long
|
45
|
+
Dim ec As Long '年月の一番左から一番右までを取得
|
42
|
-
Dim lngFromRowsNo
|
46
|
+
Dim lngFromRowsNo As Long ' 検索する行位置
|
43
|
-
Dim lngToRowsNo
|
47
|
+
Dim lngToRowsNo As Long ' 書きこむ行位置
|
44
|
-
Dim wsFrom
|
48
|
+
Dim wsFrom As Worksheet ' 取得側Excelシート
|
45
|
-
Dim wsTo
|
49
|
+
Dim wsTo As Worksheet ' 設定側Excelシート
|
46
50
|
|
51
|
+
Dim datMax As Date '日付最大値
|
52
|
+
Dim datMin As Date '日付最小値
|
53
|
+
Dim enddatMax As Date ' 最終的な日付最大値
|
54
|
+
Dim enddatMin As Date '最終的な日付最小値
|
55
|
+
Dim ToColumnNo As Long
|
56
|
+
|
57
|
+
enddatMax = #1/1/100# '日付最大値に最小値を設定
|
58
|
+
enddatMin = #1/1/9999# '日付最最少値に最大値を設定
|
59
|
+
ToColumnNo = 4
|
60
|
+
|
61
|
+
|
62
|
+
'シート"質問1"を選択
|
63
|
+
Set wsFrom = Worksheets("質問1")
|
47
64
|
|
65
|
+
'D列を上から検索していき、yyyy/mm/dd形式のセルを抽出する
|
66
|
+
For lngFromRowsNo = 1 To wsFrom.UsedRange.Rows.Count
|
67
|
+
If IsDate(wsFrom.Cells(lngFromRowsNo, 4).Value) Then
|
68
|
+
|
48
|
-
'
|
69
|
+
'抽出した行の年月を値が含まれる最大まで(右側)取得
|
70
|
+
'?1は見込み合計を含まないため
|
71
|
+
ec = wsFrom.Cells(lngFromRowsNo, 4).End(xlToRight).Column - 1
|
72
|
+
|
73
|
+
'取得した年月の最大値と最小値を求めて、最小値から最大値までを1ヶ月間隔で転記していく
|
74
|
+
With WorksheetFunction
|
75
|
+
datMax = .Max(Range(wsFrom.Cells(lngFromRowsNo, 4), wsFrom.Cells(lngFromRowsNo, ec)))
|
76
|
+
datMin = .Min(Range(wsFrom.Cells(lngFromRowsNo, 4), wsFrom.Cells(lngFromRowsNo, ec)))
|
77
|
+
End With
|
78
|
+
'どこに転記するか不明なのでとりあえずメッセージボックスに表示
|
79
|
+
'MsgBox "最大値:" & datMax & " 最小値:" & datMin
|
80
|
+
|
49
|
-
|
81
|
+
If enddatMin > datMin Then
|
82
|
+
enddatMin = datMin
|
83
|
+
End If
|
84
|
+
If enddatMax < datMax Then
|
85
|
+
enddatMax = datMax
|
86
|
+
End If
|
87
|
+
|
88
|
+
' 次の行へ
|
89
|
+
lngToRowsNo = lngToRowsNo + 1
|
90
|
+
|
91
|
+
End If
|
92
|
+
|
93
|
+
Next lngFromRowsNo
|
50
94
|
|
51
|
-
'D列を上から検索していき、yyyy/mm/dd形式のセルを抽出する
|
52
|
-
For lngFromRowsNo = 1 To wsFrom.UsedRange.Rows.Count
|
53
|
-
If (Left(.Cells(lngFromRowsNo, 4).Value, 5) = "2020/" Or Left(.Cells(lngFromRowsNo, 4).Value, 5) = "2021/") Then
|
54
|
-
|
55
|
-
'抽出した行の年月を値が含まれる最大まで(右側)取得
|
56
|
-
|
95
|
+
Do
|
57
|
-
|
96
|
+
wsTo.Cells(2, ToColumnNo).Value = enddatMin
|
58
|
-
|
59
|
-
|
60
|
-
'取得した年月の最大値と最小値を求めて、最小値から最大値までを1ヶ月間隔で転記していく
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
' 次の行へ
|
65
|
-
|
97
|
+
ToColumnNo = ToColumnNo + 1 '次の列へ
|
98
|
+
enddatMin = DateAdd("m", 1, enddatMin) '一ヶ月後
|
99
|
+
Loop Until enddatMin > enddatMax
|
66
100
|
|
67
|
-
End If
|
68
|
-
Next lngFromRowsNo
|
69
|
-
|
70
101
|
End Sub
|
71
102
|
```
|
4
ソースの削除
title
CHANGED
File without changes
|
body
CHANGED
@@ -32,11 +32,6 @@
|
|
32
32
|
部分
|
33
33
|
|
34
34
|
|
35
|
-
追記のソースコード
|
36
|
-
エラーメッセージ
|
37
|
-
「オブジェクト変数またはWithブロック変数が設定されていません」が出てきます。
|
38
|
-
|
39
|
-
|
40
35
|
現在まで完成しているコード
|
41
36
|
---------
|
42
37
|
|
@@ -73,45 +68,4 @@
|
|
73
68
|
Next lngFromRowsNo
|
74
69
|
|
75
70
|
End Sub
|
76
|
-
```
|
77
|
-
|
78
|
-
追記
|
79
|
-
----
|
80
|
-
2020/9/28 13:17時点
|
81
|
-
```VBA
|
82
|
-
Sub SheetTenki()
|
83
|
-
'
|
84
|
-
Dim ec As Long '年月の一番左から一番右までを取得
|
85
|
-
Dim lngFromRowsNo As Long ' 検索する行位置
|
86
|
-
Dim lngToRowsNo As Long ' 書きこむ行位置
|
87
|
-
Dim wsFrom As Worksheet ' 取得側Excelシート
|
88
|
-
Dim wsTo As Worksheet ' 設定側Excelシート
|
89
|
-
|
90
|
-
Dim datMax As Date '日付最大値
|
91
|
-
Dim datMin As Date '日付最小値
|
92
|
-
|
93
|
-
|
94
|
-
'シート"質問1"を選択
|
95
|
-
Sheets("質問1").Select
|
96
|
-
|
97
|
-
'D列を上から検索していき、yyyy/mm/dd形式のセルを抽出する
|
98
|
-
For lngFromRowsNo = 1 To wsFrom.UsedRange.Rows.Count
|
99
|
-
If IsDate(wsFrom.Cells(lngFromRowsNo, 4).Value) Then
|
100
|
-
|
101
|
-
'抽出した行の年月を値が含まれる最大まで(右側)取得
|
102
|
-
'−1は見込み合計を含まないため
|
103
|
-
ec = wsFrom.Cells(lngFromRowsNo, 4).End(xlToRight).Column - 1
|
104
|
-
|
105
|
-
'取得した年月の最大値と最小値を求めて、最小値から最大値までを1ヶ月間隔で転記していく
|
106
|
-
datMax = WorksheetFunction.Max(Range(wsFrom.Cells(lngFromRowsNo, 4), wsFrom.Cells(lngFromRowsNo, ec)))
|
107
|
-
datMin = WorksheetFunction.Min(Range(wsFrom.Cells(lngFromRowsNo, 4), wsFrom.Cells(lngFromRowsNo, ec)))
|
108
|
-
|
109
|
-
' 次の行へ
|
110
|
-
lngToRowsNo = lngToRowsNo + 1
|
111
|
-
|
112
|
-
End If
|
113
|
-
Next lngFromRowsNo
|
114
|
-
|
115
|
-
End Sub
|
116
|
-
|
117
71
|
```
|
3
ソースの追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -32,6 +32,11 @@
|
|
32
32
|
部分
|
33
33
|
|
34
34
|
|
35
|
+
追記のソースコード
|
36
|
+
エラーメッセージ
|
37
|
+
「オブジェクト変数またはWithブロック変数が設定されていません」が出てきます。
|
38
|
+
|
39
|
+
|
35
40
|
現在まで完成しているコード
|
36
41
|
---------
|
37
42
|
|
@@ -68,4 +73,45 @@
|
|
68
73
|
Next lngFromRowsNo
|
69
74
|
|
70
75
|
End Sub
|
76
|
+
```
|
77
|
+
|
78
|
+
追記
|
79
|
+
----
|
80
|
+
2020/9/28 13:17時点
|
81
|
+
```VBA
|
82
|
+
Sub SheetTenki()
|
83
|
+
'
|
84
|
+
Dim ec As Long '年月の一番左から一番右までを取得
|
85
|
+
Dim lngFromRowsNo As Long ' 検索する行位置
|
86
|
+
Dim lngToRowsNo As Long ' 書きこむ行位置
|
87
|
+
Dim wsFrom As Worksheet ' 取得側Excelシート
|
88
|
+
Dim wsTo As Worksheet ' 設定側Excelシート
|
89
|
+
|
90
|
+
Dim datMax As Date '日付最大値
|
91
|
+
Dim datMin As Date '日付最小値
|
92
|
+
|
93
|
+
|
94
|
+
'シート"質問1"を選択
|
95
|
+
Sheets("質問1").Select
|
96
|
+
|
97
|
+
'D列を上から検索していき、yyyy/mm/dd形式のセルを抽出する
|
98
|
+
For lngFromRowsNo = 1 To wsFrom.UsedRange.Rows.Count
|
99
|
+
If IsDate(wsFrom.Cells(lngFromRowsNo, 4).Value) Then
|
100
|
+
|
101
|
+
'抽出した行の年月を値が含まれる最大まで(右側)取得
|
102
|
+
'−1は見込み合計を含まないため
|
103
|
+
ec = wsFrom.Cells(lngFromRowsNo, 4).End(xlToRight).Column - 1
|
104
|
+
|
105
|
+
'取得した年月の最大値と最小値を求めて、最小値から最大値までを1ヶ月間隔で転記していく
|
106
|
+
datMax = WorksheetFunction.Max(Range(wsFrom.Cells(lngFromRowsNo, 4), wsFrom.Cells(lngFromRowsNo, ec)))
|
107
|
+
datMin = WorksheetFunction.Min(Range(wsFrom.Cells(lngFromRowsNo, 4), wsFrom.Cells(lngFromRowsNo, ec)))
|
108
|
+
|
109
|
+
' 次の行へ
|
110
|
+
lngToRowsNo = lngToRowsNo + 1
|
111
|
+
|
112
|
+
End If
|
113
|
+
Next lngFromRowsNo
|
114
|
+
|
115
|
+
End Sub
|
116
|
+
|
71
117
|
```
|
2
内容の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
困っている事
|
26
26
|
---------
|
27
27
|
上記「実現したいこと」記載の
|
28
|
-
「
|
28
|
+
「各行で年月の値を取得し、最小値と最大値を求める」処理の方法がわかりません。
|
29
29
|
|
30
30
|
下記のソースコード
|
31
31
|
'取得した年月の最大値と最小値を求めて、最小値から最大値までを1ヶ月間隔で転記していく
|
1
写真の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
→無処理
|
13
13
|
|
14
14
|
[質問1シート]2行目 D列の値がyyyy/mm/dd形式である
|
15
|
-
→年月の値を取得し、最小値と最大値を求める
|
15
|
+
→年月の値を取得し、取得した全ての日付の最小値と最大値を求める
|
16
16
|
...
|
17
17
|
以降、yyyy/mm/dd形式かそうでないかで処理の繰り返し
|
18
18
|
|
@@ -20,7 +20,7 @@
|
|
20
20
|

|
21
21
|
|
22
22
|
転記先
|
23
|
-

|
24
24
|
|
25
25
|
困っている事
|
26
26
|
---------
|