
這是我的情況。我需要取得 38,000 個客戶帳戶的列表,並將資訊分類到可以匯入到我們新網站的特定範本。然而,數據的呈現方式使得這變得困難...
為 1 位客戶保存的每個地址都是單獨的一行。因此,如果您有不同的帳單或送貨地址,那麼它將是 2 行。有時3行。我需要將這些行移到 1 行下的一列(位址 1、位址 2 等)。因此,如果 CustomerA 有 3 個已儲存的位址,我需要將這 3 行移至 1 行的 3 列。我希望這是有道理的。
我不知道公式、資料透視表或 VBA(我在這方面的了解和 Jon Snow 一樣多)是否是最佳途徑。我嘗試過資料透視表,但效果並不好。我認為索引/匹配可能是最好的解決方案 - 我只需為每個地址列複製公式,但它可以完成工作。但是我不知道如何容納多行。
以下是我收到的數據的範例。第 20 行是我需要將行移入的範本。列 g_user id 對於每個客戶來說都是唯一的,但對於單一客戶的多行位址,該值將在電子表格中重複。與 customer_no 相同。
http://www.filedropper.com/excelhelp
如果您需要更多信息,請告訴我,我會盡力進一步解釋。
編輯- 從我發布的電子表格中,我需要獲取第2 行和第3 行,並將地址資訊移至第1 行中的新列。 1,郵遞區號為1,國家為 1 時,這 2 行總共有 12 列資料。
答案1
答案2
我喜歡使用 VBA 來完成這樣的任務。假設您有一個唯一的使用者 ID(如範例表中所示),您可以執行以下操作:
Sub Addresses_To_Columns()
Dim lastRow As Long
Dim addressCount As Integer: addressCount = 0
lastRow = Range("A" & Rows.Count).End(xlUp).Row
For i = lastRow To 3 Step -1
If Cells(i, 1).Value = Cells(i - 1, 1).Value Then
addressCount = addressCount + 1
Range(Cells(i - 1, 10), Cells(i - 1, (addressCount * 6) + 10)) = Range(Cells(i, 4), Cells(i, (addressCount * 6) + 4)).Value
Rows(i).Delete
Else
addressCount = 0
End If
Next i
End Sub
需要自訂此程式碼以適合您的特定格式。另請注意,這是作為概念驗證而快速完成的,可能缺少一些常見的最佳實踐。請在嘗試此程式碼之前備份您的數據,因為它確實包含一個刪除命令來刪除重複的行。
答案3
謝謝大家的幫助和建議,但我用另一種方法解決了這個問題。
我只是將“-1”、“-2”、“-3”連接到“唯一”客戶 ID 上。然後,我對需要新增的每個新欄位的 unique-1、-2、-3 值進行了 VLOOKUP。
讓我們希望,為了從這次磨難中獲得的聲譽,所有的時間和工作都是值得的。
答案4
如果我正確理解了您的查詢,那麼解決方案非常簡單。顯然,請務必先備份電子表格。
1) 在正確的位置新增所需數量的新欄位。假設新列是 N。
2) 我假設客戶 ID 位於 A 列中,且同一客戶的新位址所在行在該行的 A 列中具有相同的編號。最後假設每個客戶的第一行除了地址之外還有最完整的詳細信息,即姓名電話等(如果沒有,則使用排序,首先按客戶編號排序,然後按姓名排序)。
3) 在儲存格 N2 中輸入下列公式:
=if(and(a3=a2,a1<>a2),h3,"")
其中 H 是包含位址的欄位。如果下一行有相同的客戶編號。 (a3=a2),而此行是新客戶,即與前一行不同的客戶編號 (a1<>a2),然後這將從下一行獲取地址並將其放入該客戶的主行中。對該位址的所有其他部分重複此操作,以便移動所有資訊。即相同的公式,但用 O2 而不是 N2,並引用 i3 而不是 h3,依此類推。
4) 對第三個位址執行類似的公式。即假設 X 列是第三個位址的新列,採用 X2 類型:
=if(and(a4=a2,a1<>a2),h4,"")
基本上相同,只是從下面兩行獲取資訊。
5) 到目前為止,所有地址都應該位於每個客戶的「主」行中。現在您需要複製所有這些地址,並使用貼上特殊值將它們貼到相同的位置。這將擺脫公式,只將地址作為數據,就像您輸入的一樣。
6) 現在使用按客戶名稱排序將名稱為空白的所有行(因為它們只是額外的位址)放入一處。然後,在確保您需要的所有資料現在位於正確的行中後,刪除所有這些行。瞧