0
VBAでFORループを使用してシートをループし、各範囲に基づいて値を決定するためにVLookupを使用しようとしています。基本的にシートはI 14の範囲を有する場合に設定し、各範囲は、このように設定する2列(日付及び値)である。 Sample DataVBAのVLookupが最初のパス後にループに失敗する
このコードは、各範囲をループし、値を返すためにVLOOKUPを行う、または値がない場合は-1を返します。
私が抱えている問題は、データの最初の行で動作しますが、その後のすべての行は-1を返しています。
Sub Format(inSheet As String, outSheet As String, lastAvail as Date, maxRows as Long)
Do While curDate <= lastAvail
For x = 2 To (maxRows - 1) * 2 Step 2
' Get value of current data series
Sheets(inSheet).Activate
Range(Cells(8, x - 1), Cells(8, x)).Select
Range(Selection, Selection.End(xlDown)).Select
Set lookupRange = Selection
val = Application.VLookup(curDate, Worksheets(inSheet).Range(lookupRange.Address), 2, False)
Sheets(outSheet).Activate
If IsError(val) Then
Cells(curRow, x/2 + 1).Value = -1
ElseIf IsNumeric(val) Then
Cells(curRow, x/2 + 1).Value = val
Else
Cells(curRow, x/2 + 1).Value = Null
End If
Next
curDate = DateAdd("m", 1, curDate)
Cells(curRow, maxRows + 1).Value = curDate - 1
curRow = curRow + 1
val = ""
Loop
ループ内で何が起こっているか確認するためにステップアップしましたか? – PartyHatPanda
私は100%は確信していませんが、あなたのデータサンプルは同じ月(1月)の唯一の日の集合ですが、 'curDate = DateAdd(" m "、1、curDate) ? –
また、[.Select'](https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)を避けるのが最良です。これは一般的に役立ちます。 – BruceWayne