2013-05-16 229 views
1

enter image description here不匹配與匹配函數在Excel VBA

我在第1行(即單元格A1,B1單元,小區C1等)以上的數據。

我想找到一個包含2013年四月

的單元格的列數這裏是我的代碼:

MsgBox Application.Match("Apr 2013", Range("1:1"), 1) 

返回失配誤差。任何想法出了什麼問題?

+0

您的錯誤是因爲您需要使用WorksheetFunction.Match而不是Application.Match。但@ mehow的方法是更好的 – steveo40

回答

2

你試試這個:

Sub main() 
    Dim stringToMatch$ 
    stringToMatch = "Apr 2013" 
    Call DisplayMatchingColumnNumber(ActiveSheet, stringToMatch) 
End Sub 

Sub DisplayMatchingColumnNumber(ByRef ws As Worksheet, str$) 
Dim i&, x$ 
    For i = 1 To ws.Cells(1, Columns.Count).End(xlToLeft).Column 
     x = Right(CStr(ws.Cells(1, i).Value), 8) 
     If StrComp(x, str, vbTextCompare) = 0 Then 
      MsgBox "the column number is: " & i 
     End If 
    Next i 
End Sub 



作爲 Microsoft說:

Arg2 is Required of type Variant 
Lookup_array - a contiguous range of cells containing possible lookup values. 
Lookup_array must be an array or an array reference. 

因此:

Sub ReadAboutFunctionsYouAreUsing() 
    Dim x 
    x = Array("Apr 2013", "Mar 2013", "Feb 2013") 
    MsgBox Application.Match("Apr 2013", x, 1) 
End Sub 



用戶定義函數
任何細胞類型: =getColumnNumber("Apr 2013")

Function getColumnNumber(str$) 
    Dim i&, x$ 
    For i = 1 To ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column 
     x = Right(CStr(ActiveSheet.Cells(1, i).Value), 8) 
     If StrComp(x, str, vbTextCompare) = 0 Then 
      getColumnNumber = i 
     End If 
    Next i 
End Function 
+0

這可以轉換爲一般用法的功能嗎? –

+0

用戶自定義功能?返回列數? – 2013-05-16 10:58:11

+0

我修改了你寫的第一個代碼,它的工作原理。但是,我需要能夠使用我的價值來提取其他價值。 VBA中的 –

1

我得到這種在VBA了很多東西,特別是與日期。這是我會做的:

Dim tmpRng As Range 
Set tmpRng = ActiveWorkbook.Worksheets("Sheet1").Range("AA:650") 'or some other unused cell 
tmpRng.Value = "Apr 2013" 
MsgBox Application.Match(tmpRng, Range("1:1"), 1) 
tmpRng.Value = "" 

由於某些原因,匹配似乎喜歡有一個單元格引用作爲其第一個參數。