Hàm tổng hợp trên VLookup trên Phạm vi


0

Có cách nào để có được giá trị tối đa của một phạm vi giá trị bằng các hàm Excel tiêu chuẩn không?

Thêm thông tin

  • Tôi muốn tìm giá trị tối đa trong một phạm vi ô. A1: =max(A2:A10)
  • Tuy nhiên, tôi không muốn tìm giá trị tối đa trong các ô mà thay vào đó là một tập hợp các giá trị có được bằng cách thực hiện vlookup trên các ô đó. I E. B2: =vlookup(A2,MyLookupName,2,false) (sao chép công thức B2 xuống B10). A1: =max(B2:B10).
  • Thay vì phải thực hiện việc này trong 2 bước (nghĩa là thực hiện vlookup trong cột B, sau đó thực hiện tối đa trên đó trong ô A1), tôi muốn có một công thức duy nhất áp dụng cả hai bước trong một, trong cùng một ô. I E. A1: {=max(vlookup(A2:A10,MyLookupName,2,false))}

Tuy nhiên, công thức cuối cùng này không hoạt động, vì hàm VLOOKUP chỉ chấp nhận một ô duy nhất cho Lookup_Value tham số; nếu một phạm vi được thông qua, nó sẽ lấy ô trên cùng bên trái từ phạm vi đó.

Giải pháp VBA

Để minh họa rõ hơn về chức năng mà tôi đang theo đuổi, tôi đã mã hóa một hàm bảng tính VBA sẽ thực hiện những gì tôi đang theo đuổi; tuy nhiên tôi đang cố gắng tránh các macro tùy chỉnh.

Public Function MaxVLookup(ByRef Lookup_Array As Range, ByRef Table_Array As Range, Col_Index_Num As Long) As Variant
    Dim v As Variant, temp As Variant, max As Variant
    max = Null
    For Each v In Lookup_Array
        temp = WorksheetFunction.VLookup(v, Table_Array, Col_Index_Num, False)
        If IsNull(max) Then
            max = temp
        Else
            If max < temp Then
                max = temp
            End If
        End If
    Next
    MaxVLookup = max
End Function

Example Data

Câu trả lời:


1

Nếu các giá trị trong A chỉ trong Vùng tham chiếu một lần thì bạn có thể sử dụng SUMUIF () được gói trong MAX () làm công thức mảng:

=MAX(SUMIF(D:D,A1:A10,E:E))

Là một công thức mảng, nó cần được xác nhận bằng Ctrl-Shift-Enter thay vì Enter khi thoát khỏi chế độ Chỉnh sửa. Nếu làm đúng thì Excel sẽ đặt {} xung quanh công thức.

enter image description here


Nếu chúng là bội số và bạn chỉ muốn cái đầu tiên như VLOOKUP, hãy sử dụng LOOKUP ():

=MAX(IFERROR(LOOKUP(A1:A10,D1:D13,E1:E13),-1E+99))

Một lần nữa đây là một công thức mảng.

Là một công thức mảng, nó cần được xác nhận bằng Ctrl-Shift-Enter thay vì Enter khi thoát khỏi chế độ Chỉnh sửa. Nếu làm đúng thì Excel sẽ đặt {} xung quanh công thức.

enter image description here

Ảnh chụp màn hình dựa trên ví dụ

Screehshot based on example


0

NB: Tôi tìm thấy một giải pháp thay thế cho vấn đề của tôi. Vì tôi chỉ cần ánh xạ từng giá trị thành một số, tôi có thể giả mạo VLookup bằng cách sử dụng Kết hợp.

I E. A1: {=max(6-match(A2:A10,MyLookupName,0))}.

Các 6- chỉ đơn giản là thay đổi giá trị được trả về bằng cách khớp (nghĩa là vị trí của phần tử tôi đang tìm kiếm trong MyLookupName danh sách các giá trị) đến giá trị mà tôi ánh xạ tới.

Ảnh chụp màn hình demo

Giải pháp với các giá trị:

Solution with values

Giải pháp với công thức:

Solution with Formulae


Lưu ý: Tôi chưa đánh dấu câu trả lời này, vì mặc dù nó đã giải quyết được vấn đề của tôi, nhưng nó không giải quyết được tất cả các vấn đề thuộc loại này / bỏ qua câu trả lời cho câu hỏi tôi đã hỏi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.