私がやろうとしているのはセルoSht_Input.Cells(Rows, 7)
に基づいています。別のシート(periodSheet)の列Aで一致するものを見つけ、特定の列に基づいて対応する値を取得したいと思います。
私はの使用を組み合わせる試みている.Index
と.Match
、これを行います。.Index
私のために動作します、しかし私は言っているエラーを取得しています
実行時エラー「1004」:WorksheetFunctionクラスのMatchプロパティを取得できません。
私もApplication.Match
コードでやってみましたが、#N/A
代わりに値が返されます。
私は何が間違っているのですか?
私は少しの使用を混同だApplication.Match
とApplication.WorksheetFunction.Match
。
Set oSht_Input = Worksheets(outSheet)
Set periodSheet = Worksheets("PeriodMetadata")
lastRow = oSht_Input.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For Rows = 2 To lastRow
With Application.WorksheetFunction
dateCell = oSht_Input.Cells(Rows, 7)
If rollupDataFile.GroupByPeriod Like "Week*" Then
If rollupDataFile.GroupByPeriod Like "*Sunday" Then
oSht_Input.Cells(Rows, 16).value = .Index(periodSheet.Range("B:H"), .Match(dateCell, periodSheet.Range("A:A"), 0), 1)
ElseIf rollupDataFile.GroupByPeriod Like "*Monday" Then
oSht_Input.Cells(Rows, 16).value = .Index(periodSheet.Range("B:H"), .Match(dateCell, periodSheet.Range("A:A"), 0), 2)
.... code continues
編集:最初のフィードバックに基づいてより明確にするために、もう少しコンテキストを追加することにしました。
dateCell
セルの値を取り込みます。これは間違いなく日付値です。periodSheetの列Aには、2000年1月1日から2020年12月31日までのすべての単一の日付が含まれ、基本的にすべての可能な日付が含まれます。からの値はdateCell
この20年の範囲内にあると安全に想定できます。
1.これはoSht_Inputです。ここで、列Gは日付です。
2.これはPeriodMetadataシートで、列A(.index関数に基づいて値を見つける前に2000年から2020年までのすべての日付が含まれています)と照合しようとしています。
使用CLng()
または.Value2
代わりに、日付を扱います:
Sub SO()
'// C3 = "03/02/2015"
'// A1:A14 = "01/02/2015" to "14/02/2015"
'// All cells formatted as dates
'// This will NOT work:
Debug.Print WorksheetFunction.Match(Range("C3").Value, Range("A1:A14"), 0)
'// This WILL work:
Debug.Print WorksheetFunction.Match(Range("C3").Value2, Range("A1:A14"), 0)
'// This WILL also work:
Debug.Print WorksheetFunction.Match(CLng(Range("C3").Value), Range("A1:A14"), 0)
End Sub
これは、Excelが日付を数値として格納する方法が原因です。これはVBAで説明する必要がある場合があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加