|
これ、どちらが正解なのかな?
> ElseIf Cells(1, 1) > x Then
> y = 2
> GoTo st2
ElseIf Cells(1, 1) > x Then
y = 1
GoTo st2
もし、y = 1 が正しいなら前のコードの以下の部分を修正して下さい
If IsError(vntResult(i, 1)) Then
vntResult(i, 1) = 2
Else
を
If IsError(vntResult(i, 1)) Then
vntResult(i, 1) = 1
Else
にして下さい
また、質問のコードに近い形でコードを書くといかの様に成ります
比較元(B列)、比較先(A列)を配列に取り込み、結果も配列に書き出して
シートに出力しています
Public Sub Test4()
Dim i As Long
Dim j As Long
Dim vntScope As Variant
Dim vntKeys As Variant
Dim vntResult As Variant
vntScope = Range(Cells(1, "A"), _
Cells(65536, "A").End(xlUp)).Value
vntKeys = Range(Cells(1, "B"), _
Cells(65536, "B").End(xlUp)).Value
ReDim vntResult(1 To UBound(vntKeys, 1), 1 To 1)
For i = 1 To UBound(vntKeys, 1)
For j = 1 To UBound(vntScope, 1) - 1
If vntScope(j, 1) < vntKeys(i, 1) Then
If vntKeys(i, 1) <= vntScope(j + 1, 1) Then
vntResult(i, 1) = j + 1
Exit For
End If
End If
Next j
If vntResult(i, 1) = "" Then
If vntScope(1, 1) >= vntKeys(i, 1) Then
vntResult(i, 1) = 1
' vntResult(i, 1) = 2 'どちらが正解?
Else
vntResult(i, 1) = UBound(vntScope, 1)
End If
End If
Next i
Cells(1, "C").Resize(UBound(vntKeys, 1)).Value = vntResult
End Sub
|
|