這可能是東西,我每天做幾次。因此,我爲它建立了自定義功能,我可以輕鬆分享。如果你有改進的想法 - 我願意聽取他們的意見。
這是函數:
Public Function fnLngLocateValueCol(ByVal strTarget As String,
ByRef wksTarget As Worksheet, _
Optional lngRow As Long = 1, _
Optional lngMoreValuesFound As Long = 1, _
Optional blnLookForPart = False, _
Optional blnLookUpToBottom = True) As Long
Dim lngValuesFound As Long
Dim rngLocal As Range
Dim rngMyCell As Range
fnLngLocateValueCol = -999
lngValuesFound = lngMoreValuesFound
With wksTarget
Set rngLocal = .Range(.Cells(lngRow, 1), .Cells(lngRow, Columns.Count))
End With
For Each rngMyCell In rngLocal
If blnLookForPart Then
If strTarget = Left(rngMyCell, Len(strTarget)) Then
If lngValuesFound = 1 Then
fnLngLocateValueCol = rngMyCell.Column
If blnLookUpToBottom Then Exit Function
Else
Call Decrement(lngValuesFound)
End If
End If
Else
If strTarget = Trim(rngMyCell) Then
If lngValuesFound = 1 Then
fnLngLocateValueCol = rngMyCell.Column
If blnLookUpToBottom Then Exit Function
Else
Call Decrement(lngValuesFound)
End If
End If
End If
Next rngMyCell
End Function
因此,如果你想在活動表第1行的第一個值,你可以調用像這樣:
fnLngLocateValueCol("valueToSearchFor",ActiveSheet)
對於第二個值,你這樣調用:
?fnLngLocateValueCol("valueToSearchFor",ActiveSheet,lngMoreValuesFound:=2)
對於你這樣調用的最後一個值:
?fnLngLocateValueCol("valueToSearchFor",ActiveSheet,blnLookUpToBottom:=false)
如果你有ValueToSearchFor在列,可以通過尋找任何與價值開始找到它。就像這樣:
?fnLngLocateValueCol("Value",ActiveSheet,blnLookForPart:=True)
該行上,您正在尋找的也是一個可選參數(lngRow
),以數值1
還有用於lngRow
可選參數(當它是不頂行)或blnLookForPart
,當你正在尋找的一部分。 -999是未找到值的代碼。
到目前爲止,它在一些VBA應用程序中的工作時間超過6個月。
例程Decrement
其在代碼稱爲如下:
Public Sub Decrement(ByRef value_to_decrement As Variant, Optional l_minus As Double = 1)
value_to_decrement = value_to_decrement - l_minus
End Sub
是頭部都在一個特定的列或行? –
那麼你的實際產出是多少?你期望什麼?你有什麼問題,你沒有問過嗎?你有沒有看過文檔的例子[Range.FindNext](https://msdn.microsoft。com/en-us/vba/excel-vba/articles/range-findnext-method-excel)能正常工作嗎?有一個完整的例子來說明如何實現它。 –
@ L.Dutch它的一個特定列 – Ashok