如何將多行中的值合併到單行中

如何將多行中的值合併到單行中

我有一個 Excel 2007 電子表格,有 2250 行和 19 列。在這些行中,我可能有兩行重複的客戶資訊需要合併,但前提是上面的儲存格為空。我可能還有一些不需要合併的客戶資料行。唯一的客戶成員編號可用於識別需要組合在一起的行。我正在努力開發正確的 VBA 腳本,將唯一的客戶資料合併到一行(頂部)中,並刪除合併後剩餘的行。有人願意幫忙嗎?這將節省我數小時/數天的時間來組合這些行,而且我們正在進行時間敏感的審核。

我們的資料樣本:

會員名字 會員姓氏 會員# MVP 系統輸入日期 註冊日期 MVP 積分 抽獎條目 註冊表格?要點正確嗎?錯過的分數 最終分數 繪圖條目 SP Talon # WP Talon # BD 部門員工註釋 DLR
基因 S 550061 3/2/2013 0 0 0 #N/A                            
基因 S 550061 2013 年 3 月 2 日 1539 137 MC MJ SP
史蒂夫 G 550087 3/2/2013 30019 1588 PA NR WP
柯蒂斯 S 550128 2013 年 4 月 24 日 5 0 5 #N/A                            
柯特 S 550128 4/24/2013 358 47 MC MJ SP

編輯(不是來自OP)以添加管道/段落分隔版本,並在標題中添加下劃線空格:

MEMBER_FIRST_NAME|MEMBER_LAST_NAME|MEMBER_#|MVP_SYSTEM_ENTRY_DATE|ENROLL_DATE|MVP_POINTS|DRAWING_ENTRIES|ENROLL_FORM?|POINTS_CORRECT?|POINTS_MISSEDTaDR_MISSED|FCUS0505| OYEE|註S|DLR
基因|S|550061|03 / 02/2013||0|0||||0|#N/A|||||||
基因|S|550061||2013年2月3日||||||||1539|137||MC|MJ||SP
史蒂夫|G|550087||2013年2月3日||| |||| |30019|1588||PA|NR||WP
柯蒂斯|S|550128|2013年4月24日||5|0||||5|#N/A||||| ||
簡短|S|550128||2013年4月24日||||||||358|47||MC|MJ||SP

答案1

我不太確定您提供的說明,但無論如何!

重點 - 以下假設在 MEMBER # MVP 系統進入日期內將始終高於註冊日期。

為了安全起見,請處理副本並向每行添加索引號(例如 insert ColumnA、 put 1in A1=A1+1inA2並將公式複製到 Row2250。將ColumnA特殊/值複製並貼上到頂部。

選擇D2、首頁 > 樣式 – 條件格式、新規則、使用公式決定要設定格式的儲存格、格式化此公式為真的值:插入=AND(NOT(ISBLANK(D2)),OR(D1=D2,D2=D3))、格式、填入、選擇黃色、確定、確定。在「條件格式 - 管理規則」中,在「套用」中輸入=$D$2:$D$2250「套用」。好的。

選擇整個電子表格(點擊 A 左側和標題中 1 上方的三角形),資料 > 排序和過濾 – 過濾,然後對於ColumnD按顏色過濾,選擇黃色。

將 Row1 複製到最後一行以藍色編號並貼上到A1另一個工作表(例如 Sheet2)中。

在Sheet2中,刪除F1,將儲存格上移,確定。也N1:T1. (這是可能需要額外觀察的地方。)

ColumnA在 Sheet2中新增內容。放入、輸入、選擇,抓住所選內容的右下角,按住滑鼠左鍵,同時向下拖曳至所需位置,直到1按住。 A12A2A1:A2Ctrl

選擇 Sheet2,資料 > 排序和過濾 – 排序,選取我的資料有標題,排序依據ColumnA(第一個1!),按值排序,從最小到最大排序,確定。

2記下 Sheet2包含的最低行號ColumnA和最高佔用行號。刪除ColumnA

返回第一個工作表並刪除包含黃色突出顯示的所有行。

在 Sheet2 中,選擇較低的行號和具有較高編號副本的所有其他佔用的行,然後將其貼回ColumnA第一張工作表的底部。

希望這能滿足您的大部分需求 - 或者如果沒有,這也是「朝著正確方向邁出的一步」!檢查一下,您最後佔用的行現在應該是 2250+1 減去上面提到的兩個數字之間的差異。

要檢查會員名字,我建議建立一個會員號碼的查找表,然後在此基礎上在您複製的表格中比較會員名字。柯特或柯蒂斯大概是一個判斷力。

答案2

這是另一種可能的方法。這取決於三個條件:

  • 必須有唯一識別碼來區分重複欄位和非重複欄位。在這種情況下,字段 MEMBER# 就用於此目的。在其他情況下,標識符可以被建構為多個欄位中的值的組合。
  • 任何 MEMBER# 的重複項不得超過兩個,即沒有三重或更多的「重複」記錄。
  • 行按 MEMBER# 標識符排序。

這個想法是建構一個轉換後的表,最方便地位於現有表的右側,該表使用公式將兩個重複行之間共享的部分資料合併為一行,留下一個填充行和一個空白行排。

完成此操作後,可以將篩選器套用於結果表以排除空白行,而將填入的行複製到另一個位置。

如下所示,我在 A 列中新增了一個標誌欄位「DUP」:如果 C 列中的 MEMBER# 等於前一行中的 MEMBER#,則它等於 1,否則等於 0。範例資料中具有重複 MEMBER# 的兩組行以黃色突出顯示。

新增了“DUP”標誌欄位的資料集

這是公式結果表的樣子。如預期的那樣,兩筆記錄之間共享的補充資訊已收集到其中一筆記錄中,而另一筆記錄則以雙破折號(「--」)填充。 (範例資料中的兩組重複行在表中以深藍色突出顯示。)

查看表格的前兩行,其中包含 MEMBER# 550061 的重複版本,MEMBER_FIRST_NAME 列第 4 行中的第二個「Gene」已替換為「--」;在第 3 行中先前空白的 ENROLLMENT_DATE 現在填入 3/2/2013,從第 4 行向上移動;第二個 DRAWING_ENTRIES 欄位(原始表中的 M 列,新表中的 AS 列)的 N/A 值已被替換為空白。

轉換後的表,其中重複行已標記且為空

剩下要做的就是套用篩選器,使用 DUP 列作為條件列,僅選擇 DUP 等於 0 的行 - 並將結果複製到新位置。

過濾後的資料集

用於合併重複項的公式在結構上基本上相同,因此詳細檢查一個公式是有意義的。這是表中 MEMBER_FIRST_NAME 列的第一個公式,來自單元格 AH3(我在本文末尾包含了結果表第一行的完整公式集)。

=IF($A3=1,                               If this is row 2 of a DUP set,
  "--",                                    Set value of the result cell to "--"
                                         Otherwise it's a row 1 (maybe a dup, maybe not)
  IF($A4=0,                                Is the following row its dup?
    IF(IFERROR(B3="",FALSE),"",B3),          No, set result to the value on this row 
    IF(OR(IFERROR(B3="",FALSE),ISERROR(B3)), Yes, but is this row's value blank or error?
      IF(IFERROR(B4="",FALSE),"",B4),          Yes, use the value from the following row
      IF(IFERROR(B3="",FALSE),"",B3))))        No, use the value from this row

另一個程式碼的註解是:IFERROR(<cell address>="",FALSE)需要使用某種迂迴的措詞來正確篩選某些行中的 N/A 錯誤值。

結果表第一行的程式碼

DUP         =IF(D3=D2,1,0)
FNAME       =IF($A3=1,"--",IF($A4=0,IF(IFERROR(B3="",FALSE),"",B3),IF(OR(IFERROR(B3="",FALSE),ISERROR(B3)),IF(IFERROR(B4="",FALSE),"",B4),IF(IFERROR(B3="",FALSE),"",B3))))
LNAME       =IF($A3=1,"--",IF($A4=0,IF(IFERROR(C3="",FALSE),"",C3),IF(OR(IFERROR(C3="",FALSE),ISERROR(C3)),IF(IFERROR(C4="",FALSE),"",C4),IF(IFERROR(C3="",FALSE),"",C3))))
MEMBER#     =IF($A3=1,"--",IF($A4=0,IF(IFERROR(D3="",FALSE),"",D3),IF(OR(IFERROR(D3="",FALSE),ISERROR(D3)),IF(IFERROR(D4="",FALSE),"",D4),IF(IFERROR(D3="",FALSE),"",D3))))
ENTRY DT    =IF($A3=1,"--",IF($A4=0,IF(IFERROR(E3="",FALSE),"",E3),IF(OR(IFERROR(E3="",FALSE),ISERROR(E3)),IF(IFERROR(E4="",FALSE),"",E4),IF(IFERROR(E3="",FALSE),"",E3))))
ENROL_DT    =IF($A3=1,"--",IF($A4=0,IF(IFERROR(F3="",FALSE),"",F3),IF(OR(IFERROR(F3="",FALSE),ISERROR(F3)),IF(IFERROR(F4="",FALSE),"",F4),IF(IFERROR(F3="",FALSE),"",F3))))
MVP_PTS     =IF($A3=1,"--",IF($A4=0,IF(IFERROR(G3="",FALSE),"",G3),IF(OR(IFERROR(G3="",FALSE),ISERROR(G3)),IF(IFERROR(G4="",FALSE),"",G4),IF(IFERROR(G3="",FALSE),"",G3))))
ENTRIES     =IF($A3=1,"--",IF($A4=0,IF(IFERROR(H3="",FALSE),"",H3),IF(OR(IFERROR(H3="",FALSE),ISERROR(H3)),IF(IFERROR(H4="",FALSE),"",H4),IF(IFERROR(H3="",FALSE),"",H3))))
FORM        =IF($A3=1,"--",IF($A4=0,IF(IFERROR(I3="",FALSE),"",I3),IF(OR(IFERROR(I3="",FALSE),ISERROR(I3)),IF(IFERROR(I4="",FALSE),"",I4),IF(IFERROR(I3="",FALSE),"",I3))))
PTS_CORRECT =IF($A3=1,"--",IF($A4=0,IF(IFERROR(J3="",FALSE),"",J3),IF(OR(IFERROR(J3="",FALSE),ISERROR(J3)),IF(IFERROR(J4="",FALSE),"",J4),IF(IFERROR(J3="",FALSE),"",J3))))
PTS_MISSED  =IF($A3=1,"--",IF($A4=0,IF(IFERROR(K3="",FALSE),"",K3),IF(OR(IFERROR(K3="",FALSE),ISERROR(K3)),IF(IFERROR(K4="",FALSE),"",K4),IF(IFERROR(K3="",FALSE),"",K3))))
FINAL_PTS   =IF($A3=1,"--",IF($A4=0,IF(IFERROR(L3="",FALSE),"",L3),IF(OR(IFERROR(L3="",FALSE),ISERROR(L3)),IF(IFERROR(L4="",FALSE),"",L4),IF(IFERROR(L3="",FALSE),"",L3))))
DR_ENTRIES  =IF($A3=1,"--",IF($A4=0,IF(IFERROR(M3="",FALSE),"",M3),IF(OR(IFERROR(M3="",FALSE),ISERROR(M3)),IF(IFERROR(M4="",FALSE),"",M4),IF(IFERROR(M3="",FALSE),"",M3))))
SP_TALON    =IF($A3=1,"--",IF($A4=0,IF(IFERROR(N3="",FALSE),"",N3),IF(OR(IFERROR(N3="",FALSE),ISERROR(N3)),IF(IFERROR(N4="",FALSE),"",N4),IF(IFERROR(N3="",FALSE),"",N3))))
WP_TALON    =IF($A3=1,"--",IF($A4=0,IF(IFERROR(O3="",FALSE),"",O3),IF(OR(IFERROR(O3="",FALSE),ISERROR(O3)),IF(IFERROR(O4="",FALSE),"",O4),IF(IFERROR(O3="",FALSE),"",O3))))
BD          =IF($A3=1,"--",IF($A4=0,IF(IFERROR(P3="",FALSE),"",P3),IF(OR(IFERROR(P3="",FALSE),ISERROR(P3)),IF(IFERROR(P4="",FALSE),"",P4),IF(IFERROR(P3="",FALSE),"",P3))))
DEPT        =IF($A3=1,"--",IF($A4=0,IF(IFERROR(Q3="",FALSE),"",Q3),IF(OR(IFERROR(Q3="",FALSE),ISERROR(Q3)),IF(IFERROR(Q4="",FALSE),"",Q4),IF(IFERROR(Q3="",FALSE),"",Q3))))
EMPL        =IF($A3=1,"--",IF($A4=0,IF(IFERROR(R3="",FALSE),"",R3),IF(OR(IFERROR(R3="",FALSE),ISERROR(R3)),IF(IFERROR(R4="",FALSE),"",R4),IF(IFERROR(R3="",FALSE),"",R3))))
NOTES       =IF($A3=1,"--",IF($A4=0,IF(IFERROR(S3="",FALSE),"",S3),IF(OR(IFERROR(S3="",FALSE),ISERROR(S3)),IF(IFERROR(S4="",FALSE),"",S4),IF(IFERROR(S3="",FALSE),"",S3))))
DLR         =IF($A3=1,"--",IF($A4=0,IF(IFERROR(T3="",FALSE),"",T3),IF(OR(IFERROR(T3="",FALSE),ISERROR(T3)),IF(IFERROR(T4="",FALSE),"",T4),IF(IFERROR(T3="",FALSE),"",T3))))

相關內容