以下のコードを機能させようとしていますが、残念ながら2番目のインデックス/一致はエラーをスローします。2番目の部分から「count」変数を削除して(最初のインデックス/一致で正常に機能する)、単一のセルを参照すると、コードは機能します。理由はわかりません。
新しいカウンター変数を初期化しようとしましたが、パート2でもエラーがスローされます。また、私が使用したゲットーソリューションの代わりに、forループ内の範囲内のセルを参照するためのより良い方法はありますか?
ありがとう!
Dim sht As Worksheet
Dim LastRow As Long
Dim count As Integer
Set sht = ActiveSheet
LastRow = sht.Cells(sht.Rows.count, "A").End(xlUp).Row
count = 2
For Each i In Range("f2:f" & LastRow)
With Application.WorksheetFunction
i.Value = .Index(Worksheets("Area").Range("c:c"), .Match(Range("E" & count), Worksheets("Area").Range("a:a")))
End With
count = count + 1
Next
count = 2
For Each i In Range("h2:h" & LastRow)
i.Value = count
With Application.WorksheetFunction
i.Value = .Index(Worksheets("Park reason").Range("C:C"), .Match(Range("G" & count), Worksheets("Park reason").Range("A:A")))
End With
count = count + 1
Next
End Sub
一致するものが見つからなかった可能性があります。最初に見つからない一致をテストします。を使用Application.Match
する場合は、テストで返されたエラーを使用して、を取得する前に一致するものが見つかったかどうかを確認できますi.value
。両方の一致試行に対して同じことを行います。
With Application.WorksheetFunction
Dim test As Variant
test = Application.Match(Range("E" & count), Worksheets("Area").Range("a:a"), 0)
If Not IsError(test) Then
i.Value = .Index(Worksheets("Area").Range("c:c"), test)
End If
End With
私はおそらく次のように書き直します:
With sht
Dim test As Variant
test = Application.Match(.Range("E" & count), Worksheets("Area").Range("A:A"), 0)
If Not IsError(test) Then
i.Value = Application.WorksheetFunction.Index(Worksheets("Area").Range("C:C"), test)
End If
End With
また、たとえば「C:C」ではなく、列全体よりも狭い範囲で作業することも検討します。使用範囲/最後の行を見つけて、それまで作業します。
フルバージョン:
Option Explicit
Sub test()
Dim sht As Worksheet
Dim LastRow As Long
Dim count As Long
Set sht = ActiveSheet
LastRow = sht.Cells(sht.Rows.count, "A").End(xlUp).Row
With sht
count = 2
Dim i As Range, test As Variant
For Each i In .Range("F2:F" & LastRow)
test = Application.Match(.Range("E" & count), Worksheets("Area").Range("A:A"), 0)
If Not IsError(test) Then
i.Value = Application.WorksheetFunction.Index(Worksheets("Area").Range("C:C"), test)
End If
count = count + 1
Next
count = 2
Dim test2 As Variant
For Each i In .Range("H2:H" & LastRow)
test2 = Application.Match(.Range("G" & count), Worksheets("Park reason").Range("A:A"))
If Not IsError(test2) Then
i.Value = Application.WorksheetFunction.Index(Worksheets("Park reason").Range("C:C"), test2)
End If
count = count + 1
Next
End With
End Sub
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加