マクロ用のコードに問題があります。Excel用に作成しています。VBAのApplication.Matchでコレクションに項目が存在するかどうかをチェック
それは、具体的方法Application.Match
に関し、または代わりにApplication.WorksheetFunction.Match
私だけ含まれていると私はコレクションをクリート私は
Dim CompanyID() As String
ReDim CompanyID(NumCO)
For i = 1 To NumCO
CompanyID(i) = Worksheets("Sheet1").Cells(i, 1).Value
Next i
次にリスト内のすべての企業の名前を格納する文字列の配列を持っていますすべての異なる企業
Dim DifCO As New Collection, a
On Error Resume Next
For Each a In CompanyID
DifCO.Add a, a
Next
私のコードでは、後でもう一度cと関連付ける会社がコレクションDifCO
に保存されている場所のインデックスが必要です。しかし、私は私のプログラムは、その行に何もすると私はMsgBox
にインデックスを印刷しようとしたが、MsgBox
が表示され、それはありませんそれを証明していないようApplication.Match
でそれを取得することができていませんエラーメッセージも送信しません。
For i to NumCO
MsgBox (Application.WorksheetFunction.Match(CompanyID(i), DifCO, 0))
Next i
私はApplication.Match
を使用し、別の文字列の配列にコレクションの要素を移動するなど、さまざまなことを試してみましたが、結果は同じです。
私はステップバイステップのデバッグオプションでそれを観察しているので、コードループが正しく分かっています。しかし、私はこの問題になる可能性のあるアイデアがなくなったので、ここで私はこのコミュニティに尋ねています。
「On Error GoTo 0」は、その上に「On Error Resume Next」があるコレクション作成ループの後に追加します。これがなければ、あなたのコードは喜んでエラーをスローするものを "スキップします"。 'Match'呼び出しを' Range'や配列の代わりに 'Collection'を使ってインクルードします。 –
コレクションではMatch()を使用できません。代わりにあなたの配列をチェックしてみませんか? –
マットありがとうございました、それは "スキッピング"を引き起こしていたもので、今修正されました。既に述べたように、Match()はコレクションでは機能しません。私はTImとDavidが提案したようにリストを配列に投げ捨てました!皆さん、ありがとうございました! –