如何在Excel中查找重複項:最終步驟指南
由團隊撰寫 Iron Software
了解如何在Excel中合併2個列,可以節省時間,無論何時您需要將獨立列中的資料合併為單一結果。 經典的例子是當姓名被儲存在兩個列中並需要成為一個完整姓名,但相同的需求也會出現在地址、產品程式碼、日期,以及任何其他需要從兩個單元格合併的資訊資料集中。 Excel提供了多種方法來根據您如何處理空格、空白單元格以及結果是否保持連結到原始資料或成為固定值來合併列。
在開始之前需要了解的關鍵是,Excel沒有一個"合併列"按鈕,可以完成所有操作。 Home選項卡中的"合併和置中"按鈕能夠視覺上合併單元格,但Excel中的"合併和置中"按鈕僅保留左上角的值,刪除其他原始資料。 要從兩列合併資料而不失任何內容,正確的方法是在新列中使用公式。 連接函式、concat函式、運算符號和TEXTJOIN都是為此設計的,每個都有其特殊的優勢。
本指南詳細介紹了每種合併方法: ampersand運算符用於快速合併、CONCATENATE函式用於相容性、CONCAT函式用於現代Excel、TEXTJOIN用於清晰地處理空單元格、Flash Fill用於基於模式的填充,無需任何公式,Power Query用於大型資料集。 它還涵蓋了在合併完成後如何將公式轉換為靜態值,以便您可以安全地刪除列A和列B。 在處於.NET環境中,針對那些生成Excel文件的開發者,應用IronXL來編程合併列資料以C#完成,會在文件的末尾展示。
方法1: 使用 Ampersand 運算符合併兩列 (最快)
最佳用途: 快速合併兩列並完全控制空格與標點的使用。
在Excel中,ampersand (&)是合併列的最快方式。 您可以直接在Excel中使用ampersand (&)運算符來合併兩列,輸入像是=A2 & " " & B2的公式。引用標記中的空格插入兩個值之間的分隔符。
步驟:
- 點擊您新列的第一單元格,例如如果你的源資料在列A和列B,則點擊列C。
- 輸入以下公式: =A2&" "&B2
- 按下Enter鍵。 現在第一個單元格顯示合併結果,例如"James Carter"。
- 再次點擊該單元格,雙擊填充控點(在單元格右下角的小方型框)或往下拖動來將公式應用於下一單元格及以下的所有行。
公式會在拖動時自動更新,會調整每行的行參照。 若要新增逗號和空格而不是僅為空格,請使用: =A2&", "&B2。若要在無任何分隔符的合併,去除引號內的內容: =A2&B2。

雙擊填充控點而不是拖動。 Excel將自動填充至相鄰列的最後一行資料,順便節省大量資料集下的時間。
方法2: 使用 CONCATENATE 函式
最佳用途: 使用舊版Excel的使用者或偏好清楚函式而不使用較快捷運算符。
CONCATENATE函式在Excel中是合併兩個或多個單元格文字的傳統方法,但在新版Excel中已被更具靈活性的CONCAT函式取代。 它在所有版本的Excel中仍然可用,並產生與ampersand方法相同的結果。
可以使用CONCATENATE函式在Excel中合併列,例如=CONCATENATE(A2, " ", B2)合併來自兩個單元格且中間帶有空格的文字。
步驟:
- 點擊您新合併列的第一個單元格。
- 輸入以下公式: =CONCATENATE(A2," ",B2)
- 按下Enter鍵確定。
- 拖動或雙擊填充控點以向下填滿所有行。
若要從其他單元格新增更多值,可延伸參數: =CONCATENATE(A2," ",B2," ",C2)合併來自三個列的資料。

方法3: 使用 CONCAT 函式 (現代Excel)
最佳用途: Excel 2019、Microsoft 365 及任何想要對CONCATENATE有一個更乾淨替代選擇的人。
Excel中的CONCAT函式允許使用者將多個列的文字合併到一個單元格,使用逗號來區隔單元格並使用引號來新增空格或其他文字。 它完全像是CONCATENATE,不過也接納範圍參數,而CONCATENATE不能做到這一點。
步驟:
- 點擊您新單一列的第一個單元格。
- 鍵入:=CONCAT(A2," ",B2)
- 按下Enter鍵,然後一整列往下拖動填充控點。
要一口氣合併完整個單元格範圍,您可以將範圍作為參數:=CONCAT(A2:C2)合併所有三個單元格而無需分隔符。 要在範圍中的每個值之間新增分隔符,TEXTJOIN(下一節介紹)是更好的選擇。

CONCATENATE函式在所有現代版本的Excel中依舊保持運作以維持對向前的相容性,但CONCAT如今是您寫下的任何新公式的當前推薦選項。兩者在合併兩列時產生相同的結果。
方法4: 使用 TEXTJOIN 跳過空白
最佳用途: 合併列中某些單元格可能是空白的情況下,不想在結果中有尾部的空格或分隔符。
TEXTJOIN函式在Excel中是一個強有力的工具,讓使用者可以在合併來自多個單元格的文字時選擇忽略空白單元格,使得資料合併更為干淨。 TEXTJOIN函式,自2016開始提供,允許使用者在忽略空白單元格的同時合併列,使用一個ike =TEXTJOIN(" ", TRUE, A2, B2)類的公式。
第二個參數(TRUE)控制著跳過空白的行為。 設為TRUE時,參數列表中任何空單元格將被跳過,其位置不會新增額外的分隔符。
步驟:
- 點擊您新合併列的第一個單元格。
- 輸入:=TEXTJOIN(" ",TRUE,A2,B2)
- 按Enter鍵並向下填充。
在地址合併展示文件中,套件列為空白的行清晰地演示了這一點。 使用運算符號在單個單元列時出現空白會產生"890 Maple Avenue, ",帶有一個尾隨的逗號和空格。 TEXTJOIN用TRUE返回時,產生的是"890 Maple Avenue",干淨且無尾隨字元。
要合併多於兩個列,僅需新增更多單元格引用作為其他參數:=TEXTJOIN(" ",TRUE,A2,B2,C2)一口氣合併多個列並跳過任意空白。
方法5: 使用Flash Fill不需公式合併列
最佳用途: 一次性的合併,不需要書寫任何公式的結果。
Flash Fill檢測模式並不用公式自動填充資料。 當原始結構清晰一致時,它是合併兩列最快的方法之一。
步驟:
- 在新列的第一個單元格中(例如C2),手動輸入合併結果,這樣它會精確如您想要的樣子出現。 對於名字和姓氏:輸入"James Carter"。
- 按下Enter鍵以移動到下一個單元格。
- 按下 Ctrl + E(Flash Fill快捷鍵)。 Excel會根據第一個單元格的模式分析並自動填充整列。
或者,前往Home選項卡,在編輯組中點按填充,並從下拉選單中選擇Flash Fill。 您可以前往資料 > Flash Fill存取它。
Flash Fill生成靜態值而非公式,所以如果源資料在列A或列B中改變,結果不會自動更新。 這使得它成為一次性操作的理想選擇,但不適合需要時常更新資料的活頁簿。
假使按了Ctrl+E後Flash Fill沒有激活,請確保模式單元格在源列的直接旁邊,沒有空單元格介於其中。 也請確定Flash Fill在File > Options > Advanced > Automatically Flash Fill下已啟用。
方法6: 利用Power Query合併列
最佳用途: 大型資料集、重複資料導入或需要在更新資料上重覆運行合併情況。
Power Query對於合併大型、重複資料集中的列是有效的。 它將合併操作視作一個轉換步驟,每當源資料變化時都能重新應用,而不需要手動重寫公式。
步驟:
- 點擊資料表格中的任意位置。
- 前往資料選項卡並點擊 Get Data > 從表/範圍中取得(或在某些版本中為從工作表中取得)。Power QueryEditor 打開。
- 按住Ctrl點擊以選擇兩個列標題(例如名字和姓氏)。
- 右擊所選的某個列標題並選擇合併列。
- 在對話框中選擇分隔符(如空格,逗號,製表符或自訂)並給合併的新列命名,如"全名"。
- 點擊 OK。Power Query建立一個新合併列來替換兩個源列。
- 點擊關閉與載入將結果作為新表載回您的工作表中。
合併後結果載入到新的Excel表格中。 如果源資料更新,在資料選項卡中點擊刷新可自動運行合併。
Power Query是在合併屬於重復過程的一部分時正確的工具。 對於只有幾百行的簡單一次性合併,使用公式設置會更快。
如何將公式轉換為靜態值並刪除原始資料列
使用任何公式方法(ampersand、CONCATENATE、CONCAT或TEXTJOIN)後,新的合併列包含引用原始列的公式。 如果您刪除列A或列B,公式將停止運作。 要將公式結果最終確認為靜態資料,請將新列複製並粘貼為值。
步驟:
- 選擇您的新合併列(例如C2:C20)中的所有單元格。
- 按下Ctrl + C以複製。
- 右擊同一列的首個單元格,並從下拉選單中選擇黏貼特殊選項。
- 選擇值(或按下V再按下Enter)。 公式被替換為靜態值。 該特殊選項使公式轉換為不再引用原始資料的固定文字。
- 現在選擇列A和列B(按住Ctrl並點選每個列字母以選擇兩者)。
- 右鍵點擊並選擇刪除。 由於合併列現在僅含靜態值,因此刪除源列不會出錯。 這一步刪除原始列中的資料但保留新列中的合併資料。
在這個過程之後,單列包含完整姓名(或其他合併結果)作為純文字。 原始列消失並且新的合併列獨立存在。

常見問題和排除故障
合併結果顯示數字而不是文字
當源單元之一包含作為數字格式而非文字的數字時會發生這種情況。 連接函式與ampersand都在多數情況下自動將數字轉換為文字,但如果結果顯得不正確,包裹數字單元於TEXT()中強迫格式轉換:=A2&TEXT(B2,"0")或=A2&TEXT(B2,"DD-MMM-YYYY")專作日期使用。
在合併結果尾端有多餘的空格或逗號
這是空白單元格的問題。 當源列的一個單元格是空白的時候,運算符公式仍會加入分隔符。 切換為=TEXTJOIN(" ",TRUE,A2,B2)並設TRUE作為第二個參數來自動跳過空白。
Flash Fill僅填充一或兩行而不是整列
這通常意味著源資料存在不一致,例如大寫字母不一,空格過多,或有一行數值的順序不同。 檢查源列中的多餘空格運用TRIM函式,同時檢確模式從第一行始終保持一致。
刪除原始列破壞了合併列
合併列仍然包含參照原始資料的公式。 在刪除源列之前請遵循黏貼特殊值步驟。 一旦合併列僅代表靜態值,刪除列A與列B就安全。
CONCATENATE或CONCAT公式展示公式文字而非結果
該單元格設定為文字格式。 點擊單元格,在Home選項卡的數字格式下拉選單中將其格式更改為一般,然後按F2加Enter以重新評估公式。
快速參考:如何合併Excel中的2列
| 翻譯方法 | 公式範例 | 自動更新 | 處理空單元格 |
|---|---|---|---|
| Ampersand運算符 | =A2&" "&B2 | 是 | 否(尾部分隔符) |
| CONCATENATE函式 | =CONCATENATE(A2," ",B2) | 是 | 否(尾部分隔符) |
| CONCAT函式 | =CONCAT(A2," ",B2) | 是 | 否(尾部分隔符) |
| TEXTJOIN函式 | =TEXTJOIN(" ",TRUE,A2,B2) | 是 | 是(跳過空白) |
| Flash Fill | Ctrl + E(無公式) | 無 | 是(基於模式) |
| Power Query | 合併列步驟 | 於刷新時 | 可配置 |
| 黏貼特殊值 | Ctrl+C,粘貼特殊 > 值 | 否(轉換成靜態) | 不適用 |
針對開發者:使用IronXL程式化合併列資料
若您的.NET應用程式生成Excel報告並需要在交付前合併列,IronXL使您可以在無需安裝Microsoft Office於伺服器的情況下,以C#讀取、合併並寫入單元格值。 與其將CONCAT公式寫入單元格,IronXL直接讀取源值並將合併結果寫作靜態值,這意味著在輸出文件中沒有公式依賴。
這是一個完整的範例,載入一張員工電子表格,將First Name和Last Name列合併到一個新的Full Name列,然後刪除原始列:
using IronXL;
WorkBook workBook = WorkBook.Load("employee-list.xlsx");
WorkSheet ws = workBook.DefaultWorkSheet;
// Find how many rows of data exist (starting from row 2, row 1 is the header)
int lastRow = ws.Rows.Count();
// Insert a new column C for the merged result
ws.InsertColumn(2); // inserts before existing column C, shifting data right
ws["C1"].Value = "Full Name";
// Combine first name (col A) and last name (col B) for each row
for (int row = 2; row <= lastRow; row++)
{
string firstName = ws[$"A{row}"].StringValue;
string lastName = ws[$"B{row}"].StringValue;
// Combine data with a space separator - same result as =A2&" "&B2 in Excel
ws[$"C{row}"].Value = $"{firstName} {lastName}".Trim();
}
// Save the workbook with the new merged column
workBook.SaveAs("employee-list-merged.xlsx");
using IronXL;
WorkBook workBook = WorkBook.Load("employee-list.xlsx");
WorkSheet ws = workBook.DefaultWorkSheet;
// Find how many rows of data exist (starting from row 2, row 1 is the header)
int lastRow = ws.Rows.Count();
// Insert a new column C for the merged result
ws.InsertColumn(2); // inserts before existing column C, shifting data right
ws["C1"].Value = "Full Name";
// Combine first name (col A) and last name (col B) for each row
for (int row = 2; row <= lastRow; row++)
{
string firstName = ws[$"A{row}"].StringValue;
string lastName = ws[$"B{row}"].StringValue;
// Combine data with a space separator - same result as =A2&" "&B2 in Excel
ws[$"C{row}"].Value = $"{firstName} {lastName}".Trim();
}
// Save the workbook with the new merged column
workBook.SaveAs("employee-list-merged.xlsx");
Imports IronXL
Dim workBook As WorkBook = WorkBook.Load("employee-list.xlsx")
Dim ws As WorkSheet = workBook.DefaultWorkSheet
' Find how many rows of data exist (starting from row 2, row 1 is the header)
Dim lastRow As Integer = ws.Rows.Count()
' Insert a new column C for the merged result
ws.InsertColumn(2) ' inserts before existing column C, shifting data right
ws("C1").Value = "Full Name"
' Combine first name (col A) and last name (col B) for each row
For row As Integer = 2 To lastRow
Dim firstName As String = ws($"A{row}").StringValue
Dim lastName As String = ws($"B{row}").StringValue
' Combine data with a space separator - same result as =A2&" "&B2 in Excel
ws($"C{row}").Value = $"{firstName} {lastName}".Trim()
Next
' Save the workbook with the new merged column
workBook.SaveAs("employee-list-merged.xlsx")
要在程式碼中複製TEXTJOIN跳過空白行為,請在合併前新增檢查:
// Skip blank cells when combining - equivalent to TEXTJOIN(" ", TRUE, A2, B2)
string combined = string.Join(" ",
new[] { firstName, lastName }
.Where(s => !string.IsNullOrWhiteSpace(s)));
ws[$"C{row}"].Value = combined;
// Skip blank cells when combining - equivalent to TEXTJOIN(" ", TRUE, A2, B2)
string combined = string.Join(" ",
new[] { firstName, lastName }
.Where(s => !string.IsNullOrWhiteSpace(s)));
ws[$"C{row}"].Value = combined;
Imports System.Linq
' Skip blank cells when combining - equivalent to TEXTJOIN(" ", TRUE, A2, B2)
Dim combined As String = String.Join(" ",
New String() {firstName, lastName} _
.Where(Function(s) Not String.IsNullOrWhiteSpace(s)))
ws($"C{row}").Value = combined
IronXL也支持Merge()方法,來視覺上合併行中的單元格以優化標題格式,這與合併列資料是分開的。 完整細節請見合併單元格指南與合併Excel文件教程。
開始使用: 透過NuGet安裝 IronXL.Excel 安裝包。 可用30天全功能免費試用,不需要信用卡。
進一步閱讀:
包裝
每種方法來處理如何在Excel中合併2列,都有不同的取捨。 當每個源單元格有一個值時,運算符號是合併兩列工作的最快公式。 當資料中存在空白單元格時,TEXTJOIN是更好的選擇,因為它的跳過空白參數防止在結果中出現尾部分隔符。 CONCATENATE仍然被完全支持,並產生與CONCAT相同的輸出,雖然CONCAT是現代Excel的當前標準。 當您想要一個完全沒有公式的結果時,Flash Fill是答案,透過套用模式辨識僅用兩步即可完成。
一旦合併資料在新合併列中,請務必使用黏貼特殊值,然後再刪除列A與列B。 首先將公式轉換為靜態值,意味著新的單列是獨立的,而且可以安全地保留下來作為唯一的剩餘結果。 對於在大型資料集上重複運行的工作流程,每次新資料到來時作為合併運行,Power Query透過刷新按鈕處理合併而不是重寫公式。
在.NET環境工作的開發者,不需另行安裝Microsoft Office於伺服器的情況下,能夠使用IronXL以程式碼讀取每一行,合併數值並將合併資料返回寫入,無需依賴公式。 以免費試用開始,以測試它在您自己的環境中。




