Tôi đang tìm kiếm một cách để lọc một mảng với một biểu thức đánh giá như:Làm thế nào để lọc một mảng có chức năng bảng tính?
Dim arr1(), arr2(), arr3()
arr1 = Array(1, 2, 3, 4, 5) ' > [1, 2, 3, 4, 5]
arr2 = Map(arr1, "Values() * 2") ' > [2, 4, 6, 8, 10]
arr3 = Filter(arr2, "Values() > 6") ' > [8, 10]
tôi đã thực hiện các chức năng Map
với một UDF và với Application.Evaluate("INDEX(expression,)")
, nhưng tôi đang đấu tranh để làm cho nó làm việc cho Filter
:
Private arr_()
Public Function Values() As Variant()
Values = arr_
End Function
Public Function Map(arr(), expression As String) As Variant()
arr_ = arr
Map = Application.Evaluate("INDEX(" & expression & ",)")
End Function
Public Function Filter(arr(), expression As String) As Variant()
arr_ = arr
Filter = Application.Evaluate("INDEX(Values(), " & expression & ")")
End Function
Có cách nào khác hơn là lặp/dịch chuyển từng giá trị không? Maby với VLOOKUP
?
Tôi nghĩ rằng bạn sẽ cần phải sử dụng một vòng lặp. –
Bạn đang sử dụng Excel nào? Có một cách nếu bạn đang sử dụng Office 365 Excel với TEXTJOIN. Nếu không, nó sẽ ngừng hoạt động. INDEX sẽ trả về một mảng có cùng kích thước với đầu vào, chúng sẽ được lấp đầy bằng 'FALSE' và các số có độ phân giải là TRUE. –