5

Tôi đã có một bảng tính mà trông như thế này:công thức bảng tính để thu thập tất cả các trận đấu vào một tế bào

A    B    C   D     
FirstName  SurnameName Address UniqueFamilyId  
--------------------------------------------------------- 
Abe   Black   1 Elm Ave :Black:1 Elm Ave: 
Joe   Doe   7 Park Ln :Doe:7 Park Lane: 
Jack   Black   1 Elm Ave :Black:1 Elm Ave: 
Bill   Doe   2 5th Ave :Doe:2 5th Ave: 
Harry   Doe   7 Park Ln :Doe:7 Park Lane: 
Sam   Doe   7 Park Ln :Doe:7 Park Lane: 

Tôi đã tạo ra các cột UniqueFamilyId để về cơ bản xác định mỗi gia đình duy nhất.

Tôi đang cố gắng tìm ra một công thức thu thập tên đầu tiên của tất cả những người sống ở cùng một địa chỉ vào một ô - tức là một ô sẽ điền vào cột E (AllFirstNames).

A    B    C   D     E 
FirstName  SurnameName Address UniqueFamilyId  AllFirstNames 
------------------------------------------------------------------------------- 
Abe   Black   1 Elm Ave :Black:1 Elm Ave: Abe Jack 
Joe   Doe   7 Park Ln :Doe:7 Park Lane: Joe Harry Sam 
Jack   Black   1 Elm Ave :Black:1 Elm Ave: Abe Jack 
Bill   Doe   2 5th Ave :Doe:2 5th Ave:  Bill 
Harry   Doe   7 Park Ln :Doe:7 Park Lane: Joe Harry Sam 
Sam   Doe   7 Park Ln :Doe:7 Park Lane: Joe Harry Sam 

Tôi nghi ngờ rằng hỗn hợp công thức vlookup và mảng sẽ thực hiện thủ thuật, nhưng nếu tôi phải sử dụng Excel VBA hoặc Google Apps Scripts, tôi không bận tâm. Bạn có thể giúp tôi đạt được điều này không? Tôi đoán đó là một dạng tìm tất cả các giá trị trong cột D (UniqueFamilyId) là giống nhau và sau đó sử dụng vlookup để lấy tên đầu tiên, tất cả trong một công thức mảng để thu thập tất cả chúng.

P.S. Tôi đã tìm hiểu cách tính số lượng sống tại mỗi địa chỉ - công thức đơn giản là

=COUNTIF(D$1:D$65536,D1) 

nhưng tôi muốn tất cả những tên đó được thu thập, không chỉ đơn thuần là đếm.

+0

Nếu bạn muốn kết quả được liệt kê trong một ô, bạn sẽ cần một số trợ giúp VBA. Xem các câu trả lời trước của tôi để biết cách thực hiện điều này: http://stackoverflow.com/a/5504488/657668 và http://superuser.com/q/405215/76571 – Excellll

Trả lời

4

Trên Google Spreadsheet bạn có thể sử dụng một ArrayFormula như thế này:

=ArrayFormula(concatenate(rept(A:A&" ";D:D=D2))) 

Chỉ cần dán nó trên tế bào E2 sau đó sao chép xuống.

[sửa]

Chơi nhiều hơn một chút, tôi biết có thể làm tất cả trên một ô đơn lẻ (E2). tức là không cần sao chép.Đương nhiên là nó phức tạp hơn nhiều :) Nhưng ở đây bạn đi:

=ArrayFormula(transpose(split(concatenate(transpose(if(D2:D=transpose(D2:D);A2:A&" ";"")&if(row(D2:D)=rows(D2:D)+1;char(9);"")));char(9)))) 
+0

Biến ra rằng một chút tinh chỉnh cho công thức đầu tiên của bạn thực hiện nó trong một ô duy nhất. Nếu bạn làm = concatenate (ArrayFormula (rept (A: A &" "; D: D = D2))) nó trả về tất cả các kết quả trong một câu trả lời duy nhất như concatenate chấp nhận mảng forumlas nhưng với điều này làm tổ toàn bộ điều kết thúc lên như một -công thức tế bào. Tâm chỉnh sửa câu trả lời của bạn cho hậu thế nếu tôi đúng? – AshirusNW

+0

@AshirusNW xin lỗi, nhưng đề xuất của bạn hoạt động tương tự. Bạn đã thử nghiệm nó chưa? Và, khi chúng hoạt động tương tự, tôi luôn đặt ArrayFormula làm công thức bên ngoài, bao bọc tất cả những thứ khác, ngay cả khi không cần thiết, như một "thực hành tốt nhất" (mà tôi đã học được từ Google Documents trên diễn đàn Tài liệu). –

4

Sử dụng chức năng VBA sẽ cho phép bạn tóm tắt các kết quả phù hợp trong một ô. Tôi đã sử dụng hàm dưới đây nhiều lần để ghép một mảng các giá trị - một cái gì đó mà hàm tích hợp CONCATENATE() không thể thực hiện được.

Bước 1:
Nhấn Alt + F11 để mở ngăn chỉnh sửa VBA trong Excel. Chèn một mô-đun mới và dán mã này cho một hàm tùy chỉnh.

Public Function CCARRAY(rr As Variant, sep As String) 
'rr is the range or array of values you want to concatenate. sep is the delimiter. 
Dim rra() As Variant 
Dim out As String 
Dim i As Integer 

On Error GoTo EH 
rra = rr 
out = "" 
i = 1 

Do While i <= UBound(rra, 1) 
    If rra(i, 1) <> False Then 
     out = out & rra(i, 1) & sep 
    End If 
    i = i + 1 
Loop 
out = Left(out, Len(out) - Len(sep)) 
CCARRAY = out 
Exit Function 

EH: 
rra = rr.Value 
Resume Next 

End Function 

Chức năng này sẽ cho phép bạn tạo danh sách được phân tách bằng dấu phẩy để tóm tắt dữ liệu thẻ bạn có.

BƯỚC 2:
Trong E2 trong bảng của bạn, dán trong công thức sau đây và nhấn Ctrl + phím Shift +Nhập. Điều này sẽ nhập nó như là một công thức mảng.

=CCARRAY(IF(D2=$D$2:$D$7,$A$2:$A$7)," ") 

Chỉ cần điền vào cột và thực hiện điều đó.

+0

Tác phẩm này, cảm ơn. Sẽ chấp nhận nếu không ai khác có thể tìm thấy một cách được xây dựng theo cách nối các giá trị chuỗi từ một công thức mảng – AshirusNW

Các vấn đề liên quan