Im sử dụng VBA để lập trình một hàm trong excel mà sẽ tìm kiếm một danh sách tìm kiếm tên nào đó, đếm khi nhất định tìm cho tên đi lên và sau đó đầu ra các giá trị ngược lại với cá nhân ô.Ouput chức năng kết quả tính toán cho nhiều tế bào trong Excel bằng VBA
Làm thế nào để phân bổ các giá trị để các chức năng riêng của mình khi tôi có một chức năng tế bào đa? Ive đã chọn 4 ô bên cạnh nhau trong cùng một cột và nhấn CTRL-SHFT-ENTER để nhận hàm đa ô, tôi không biết cách phân bổ kết quả cho hàm để nó sẽ hiển thị trong các ô được chọn. Những gì tôi đã thực hiện cho đến thời điểm này được hiển thị bên dưới:
Function ROM(ByVal lookup_value As Range, _
ByVal lookup_column As Range, _
ByVal return_value_column As Long) As String
Application.ScreenUpdating = False
Dim i As Long
Dim resultCount As Long
Dim resultsArray() As String
Dim arraySize As Long
Dim myrange As Range
Dim results As String
Dim TSS As Long
Dim OSS As Long
Dim AWS As Long
Dim JLI As Long
Dim answers(1 To 3, 1 To 1) As Variant
' The following code works out how many matches there are for the lookup and creates an
' array of the same size to hold these results
Set myrange = lookup_column
arraySize = Application.WorksheetFunction.CountIf(myrange, lookup_value.Value)
ReDim resultsArray(arraySize - 1)
' A counter for the results
resultCount = 0
TSS = 0
OSS = 0
AWS = 0
JLI = 0
' The equipment ID column is looped through and for every match the corresponding Equipment Type is
' saved into the resultsArray for analysis
For i = 1 To lookup_column.Rows.count
If Len(lookup_column(i, 1).Text) <> 0 Then
If lookup_column(i, 1).Text = lookup_value.Value Then
' If statement to ensure that the function doesnt cycle to a number larger than the
' size of resultsArray
If (resultCount < (arraySize)) Then
resultsArray(resultCount) = (lookup_column(i).Offset(0, return_value_column).Text)
results = (lookup_column(i).Offset(0, return_value_column).Text)
resultCount = resultCount + 1
' The following code compares the string to preset values and increments
' the counters if any are found in the string
If (InStr(results, "TPWS TSS") > 0) Then
TSS = TSS + 1
ElseIf (InStr(results, "TPWS OSS")) Then
OSS = OSS + 1
ElseIf (InStr(results, "JUNCTION INDICATOR (1 Route)") > 0) Then
JLI = JLI + 1
ElseIf (InStr(results, "AWS")) Then
AWS = AWS + 1
End If
End If
End If
End If
Next
answers(1, 1) = TSS
answers(1, 2) = OSS
answers(1, 3) = AWS
answers(1, 4) = 0
ROM = answers
Application.ScreenUpdating = True
End Function
Khi tôi thử chạy chức năng, nó vẫn cho biết loại không khớp cho câu trả lời. Các ô được chọn cho công thức đa ô là F18, G18, H18 và I18.
Cảm ơn bạn! Điều đó đã làm các trick. – Ashmanq