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

回答編集履歴

1

コード追記

2020/09/29 15:21

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -22,4 +22,48 @@
22
22
  datMax = .Max(Range(.Cells(lngFromRowsNo, 4), .Cells(lngFromRowsNo, ec)))
23
23
  datMin = .Min(Range(.Cells(lngFromRowsNo, 4), .Cells(lngFromRowsNo, ec)))
24
24
  End With
25
+ ```
26
+
27
+ ---
28
+
29
+ こちらで作成したサンプルでは下記で動いてます。
30
+
31
+ ```vba
32
+ Sub SheetTenki()
33
+ '
34
+ Dim ec As Long '年月の一番左から一番右までを取得
35
+ Dim lngFromRowsNo As Long ' 検索する行位置
36
+ Dim lngToRowsNo As Long ' 書きこむ行位置
37
+ Dim wsFrom As Worksheet ' 取得側Excelシート
38
+ Dim wsTo As Worksheet ' 設定側Excelシート
39
+
40
+ Dim datMax As Date '日付最大値
41
+ Dim datMin As Date '日付最小値
42
+
43
+ 'シート"質問1"を選択
44
+ Set wsFrom = Worksheets("質問1")
45
+
46
+ 'D列を上から検索していき、yyyy/mm/dd形式のセルを抽出する
47
+ For lngFromRowsNo = 1 To wsFrom.UsedRange.Rows.Count
48
+ If IsDate(wsFrom.Cells(lngFromRowsNo, 4).Value) Then
49
+
50
+ '抽出した行の年月を値が含まれる最大まで(右側)取得
51
+ '?1は見込み合計を含まないため
52
+ ec = wsFrom.Cells(lngFromRowsNo, 4).End(xlToRight).Column - 1
53
+
54
+ '取得した年月の最大値と最小値を求めて、最小値から最大値までを1ヶ月間隔で転記していく
55
+ With WorksheetFunction
56
+ datMax = .Max(Range(wsFrom.Cells(lngFromRowsNo, 4), wsFrom.Cells(lngFromRowsNo, ec)))
57
+ datMin = .Min(Range(wsFrom.Cells(lngFromRowsNo, 4), wsFrom.Cells(lngFromRowsNo, ec)))
58
+ End With
59
+ 'どこに転記するか不明なのでとりあえずメッセージボックスに表示
60
+ MsgBox "最大値:" & datMax & " 最小値:" & datMin
61
+
62
+ ' 次の行へ
63
+ lngToRowsNo = lngToRowsNo + 1
64
+
65
+ End If
66
+ Next lngFromRowsNo
67
+
68
+ End Sub
25
69
  ```