列Aがあります。
+--+--------+
| | A |
+--+--------+
| 1|123456 |
|--+--------+
| 2|Order_No|
|--+--------+
| 3| 7 |
+--+--------+
今私が入力した場合:
=Match(7,A1:A5,0)
私が得るシート上のセルに
3
結果として。 (これは望ましいことです)
しかし、この行を入力すると:
Dim CurrentShipment As Integer
CurrentShipment = 7
CurrentRow = Application.Match(CurrentShipment, Range("A1:A5"), 0)
CurrentRowは「エラー2042」の値を取得します
私の最初の本能は、値7が実際に範囲内にあることを確認することでした。
私の次は多分Match関数に文字列が必要だったので、試しました
Dim CurrentShipment As Integer
CurrentShipment = 7
CurrentRow = Application.Match(Cstr(CurrentShipment), Range("A1:A5"), 0)
無駄に。
VBAのリストを参照してください セルエラー値 :
Constant Error number Cell error value xlErrDiv0 2007 #DIV/0! xlErrNA 2042 #N/A xlErrName 2029 #NAME? xlErrNull 2000 #NULL! xlErrNum 2036 #NUM! xlErrRef 2023 #REF! xlErrValue 2015 #VALUE!
CurrentShipment
の値をInteger
からLong
ではなくString
に変換してみてください:
CurrentRow = Application.Match(CLng(CurrentShipment), Range("A1:A5"), 0)
これの補足事項として、また将来このエラーが発生する可能性があり、関数がエラーを返す可能性がある場合、バリアント型は非常にうまく機能します。
Dim vreturn as variant
vreturn = Application.Match(CurrentShipment, Range("A1:A5"), 0) ' this could be any function like a vlookup for example as well
If IsError(vreturn) Then
' handle error
Else
CurrentRow = cint(vreturn)
End If
オブジェクトブラウザーで一致関数を検索すると、doubleが返されるため、変数CurrentRowをdoubleとして宣言し、3つのバリアントパラメーターを受け入れます。動作する場合は、以下のコードを試してください。
Sub sample()
Dim CurrentShipment As Variant
CurrentShipment = 7
Dim CurrentRow As Double
CurrentRow = Application.Match(CurrentShipment, Range("A1:A5"), 0)
End Sub
興味深いことに、空のExcelシートにデータを入力してから、元のコードスニペットを実行しました。 CurrentShipmentをStringまたはLongとしてキャストすることなく、予想どおり3を返しました。
CurrentRowをDIMしないとデフォルトでVariantになりますが、両方をIntegerまたはCurrentRow Byteに設定してもエラーはスローされないため、戻り値の型としてDoubleを使用することは冗長です。
Sub Match()
Dim CurrentShipment As Integer
Dim CurrentRow As Byte '<--- NOTE
CurrentShipment = 7
CurrentRow = Application.Match(CurrentShipment, Range("A1:A5"), 0)
MsgBox CurrentRow
End Sub
私にとっては、何も型キャストしなくてもうまくいきました。私は両方を使用しました:
Application.WorksheetFunction.Match(CurrentShipment, Range("A1:A5"), 0)
そして
Application.Match(CurrentShipment, Range("A1:A5"), 0)
整数、Double、Long、またはVariantとしてディメンション化されたCurrentShipment、すべて正常に機能しました...