- 締切済み
配列に日付データを確保したい
ソースがエラーを起こしていて原因がわからず困っています。ご教授ください。 インデックスが有効範囲にありませんと出るのが、 kDate1 = Application.WorksheetFunction.Min(hDate1) です。 確保データシートの列行双方の項目名を拾い、該当するデータを進捗表で調べ該当を配列に入れるというもので(あとでループ処理追記)、配列にデータは日付です。 (文字数削減のためDimおかしいですが無視してください) Sub ssDate() Dim gRange As Range Dim sDate, fDate As Date Dim gKinou, gStep1, sStep1, sStep2 As String Dim sKinou, sRecord, a, i, k, m, rr, rr2 As Integer Dim kDate1~kDate6, hDate1()~ hDate6() As Variant Worksheets("確保データ").Select Cells(4, 5).Select 'テスト用 '冒頭処理 'Application.ScreenUpdating = False '画面描画停止 '全体設定 i = 9 '進捗表検索開始行 m = 7 '段階記載列 k = 0 '配列添 sKinou = 179'進捗表上機能名確定列 rr = 11 'K列 日付取得基準列 rr2 = 20 'T列日付取得基準列 '段階の設定 Set gRange = Selection gKinou = Cells(gRange.Row, 3).Value gStep1 = Cells(1, gRange.Column).Value '段階 Worksheets("進捗表").Select sRecord = Cells(i, 7).End(xlDown).Row '条件に該当するデータを配列で取得 For Each a In Range(Cells(i, m), Cells(sRecord, m)) '参照先設定 sStep1 = Cells(i, sKinou).Value sStep2 = Cells(i, 7).Value If gKinou = sStep1 And gStep1 = sStep2 Then ReDim hDate1(k) hDate1(k) = Cells(i, rr).Value '開始予定 hDate2(k) = Cells(i, rr + 1).Value '開始実績 hDate3(k) = Cells(i, rr + 2).Value '終了予定 hDate4(k) = Cells(i, rr + 3).Value '終了実績 If gStep1 = "見学" Or gStep1 = "会議" Then hDate5(k) = Cells(i, rr2).Value '見学 hDate6(k) = Cells(i, rr2 + 1).Value '会議 End If k = k + 1 End If Next MsgBox hDate1(0) '最小最大判定 kDate1 = Application.WorksheetFunction.Min(hDate1) '開始予定 <<ここでエラー kDate2 = Application.WorksheetFunction.Min(hDate2) '開始実績 kDate3 = Application.WorksheetFunction.Max(hDate3) '終了予定 kDate4 = Application.WorksheetFunction.Max(hDate4) '終了実績 If gStep1 = "見学" Or gStep1 = "会議" Then kDate5 = Application.WorksheetFunction.Max(hDate5) '見学 kDate6 = Application.WorksheetFunction.Max(hDate6) '会議 End If MsgBox "開始予定:" & kDate1 & vbCrLf & "開始実績:" & kDate2 & vbCrLf _ & "終了予定:" & kDate3 & vbCrLf & "終了実績:" & kDate4 & vbCrLf _ & "内容:" & gKinou & vbCrLf & "段階:" & gStep1 Exit Sub End Sub
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
既に出ているご回答の、VBAの基礎的なことは当然もっと前に勉強することだが、 質問のコードのしたいことを十分見てないが(質問にはデータ例を挙げて、したいことを文章で説明して質問すべきだ)そもそもエクセルでセルの値のために、配列など使う必要が無いのではないですか。 シートのセルの構成が配列的なんだから。だからCells(i,j)が使えるのだし。 コード行数が半分ぐらいでこの質問の処理は出来るのではないかと思う。 プログラムで配列を使いたくなったら、一以呼吸して、適したロジックを考えること。