2

これをVBAで使いたい -

=MATCH("PlanA",A:A,0)

EVALUATE

Sub Test()

Dim SectionStartRow As Integer    
Dim planname As String
planname = "PlanA"

SectionStartRow = [MATCH(planname,A:A,0)] 'Error 2029 /// Type mismatch '13

End Sub

私はすでに試しました:

SectionStartRow = Evaluate("MATCH(planname,A:A,0)") 'Error 2029 /// Type mismatch '13

SectionStartRow = Evaluate("MATCH(" & planname & ",A:A,0)")

しかし、何も機能していないようです。plannamevariable は関数の長いセットによって拒否されることに注意してください。

4

2 に答える 2

6

問題は、planname文字列の引用符で囲む必要があることです。Excel に相当するものは=MATCH("PlanA",A:A,0)であり、 に渡される文字列はそれEvaluateと同じでなければなりません:

SectionStartRow = Evaluate("=MATCH( " & Chr(34) & planname & Chr(34) & ",A:A,0)")

正常に動作します (Excel 2010 でテスト済み)

Chr(34)"ASCII 番号付けの記号を表します。

それを行う別の方法は、定義することです

planname = Chr(34) & "PlanA" & Chr(34)

そして、する SectionStartRow = Evaluate("=MATCH( " & planname & ",A:A,0)")

ちなみに、 一致する行が 32,767 以降の場合はエラーになるため、SectionStartRowasLongと notを定義します。IntegerInteger

この場合、 の省略形Evaluate(つまり、角括弧[]) は機能しないことにも注意してください。括弧内のすべてが変数ではなく定数である場合にのみ機能します。

これが役立つことを願っています!

于 2014-05-27T09:28:15.537 に答える