15

私は列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)

無駄に。

4

6 に答える 6

15

これに対する補足として、および将来このエラーが発生する人のために、任意の関数がエラーを返す可能性があるため、バリアント型は非常にうまく機能します。

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
于 2013-09-19T13:48:10.020 に答える
14

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からに変換してみてください。IntegerLongString

CurrentRow = Application.Match(CLng(CurrentShipment), Range("A1:A5"), 0)
于 2013-03-20T14:50:30.127 に答える
1

オブジェクト ブラウザーで一致関数を探すと、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
于 2013-03-20T15:18:45.280 に答える
0

私にとっては、型キャストをしなくても問題なく動作しました。私は両方を使用しました:

Application.WorksheetFunction.Match(CurrentShipment, Range("A1:A5"), 0)

Application.Match(CurrentShipment, Range("A1:A5"), 0)

Integer、Double、Long、またはVariantとしてのディメンション化されたCurrentShipmentは、すべて正常に機能しました...

于 2013-03-20T15:09:56.063 に答える
0

興味深いことに、空白の 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
于 2013-03-20T15:07:16.300 に答える
0

複数のワークシートを含むワークブックで Match 関数を使用しようとすると、まったく同じエラー メッセージが表示されました。結果を受け取る変数にバリアント型を使用すると、照合しようとするサブジェクトが存在しない場合に、実行中のエラーを回避できます。しかし、私の間違いは使用されたレンジの位置にありました。検索する範囲を持つワークシートをポイントすることが重要です。最初に、ワークシート参照なしで Range(...) を使用しましたが、そのワークシートをアクティブにした場合にのみ関数が正しく機能しました。

于 2022-03-01T08:48:12.937 に答える