跳至页脚内容
EXCEL 工具

如何在Excel中查找重复项:终极分步指南

由团队撰写于 Iron Software

知道如何合并Excel中的两列可以在需要将分散在不同列的数据合并成单一结果时节省时间。 经典的例子是存储在两个列中的名字和姓氏需要合成为一个全名,但同样的需求也会出现于地址、产品代码、日期及任何其他数据集,其中信息分散在两个单元格中,需要合并在一起。 Excel 根据您希望如何处理空格、空白单元格以及结果是否保持链接到原始数据或成为固定值,提供了几种合并列的方法。

在开始之前要明白的关键一点是,Excel没有一个可以完成所有任务的"合并列"按钮。 合并和居中按钮在"主页"选项卡中可视地合并单元格,但Excel中的合并和居中按钮仅保留左上角的值,删除其余的原始数据。 为了合并来自两列的数据而不丢失任何信息,正确的方法是在新列中使用公式。 concatenate函数、concat函数、ampersand运算符和TEXTJOIN均为此目的而设计,每一个都有特定的优势。

本指南介绍了在Excel中合并两列的每种方法:快速合并的ampersand运算符、为兼容性而用的CONCATENATE函数、现代Excel的CONCAT函数、干净处理空白单元格的TEXTJOIN、无需公式的基于模式填充的Flash Fill和处理大数据集的Power Query。 它还涵盖了在合并完成后如何将公式转换为静态值,以便您可以安全地删除A列和B列。 在.NET中生成Excel文件的开发人员将在最后找到一个部分,展示IronXL如何在C#中以编程的方式处理合并列数据。

方法1:使用Ampersand运算符合并两列(最快)

最佳用于:快速合并两列,完全控制空格和标点符号。

ampersand (&) 是在Excel中合并列的最快方法。 您可以通过输入一个类似 =A2 & " " & B2 的公式,使用 ampersand (&) 运算符在 Excel 中合并两列。 引号内的空格在两个值之间插入一个分隔符。

步骤:

  1. 单击新列的第一个单元格,例如,如果您的源数据在A列和B列中,则在C列中。
  2. 输入以下公式:=A2&" "&B2
  3. 按下回车键。 第一个单元格现在显示合并结果,例如"James Carter"。
  4. 再次点击单元格并双击填充手柄(单元格右下角的小方块)或向下拖动以将公式应用到下一个单元格及以下所有行。

公式会在向下拖动时自动更新,为每一行调整行引用。 要加入逗号和空格,而不是仅仅是一个空格,使用: =A2&", "&B2。 要合并而不带任何分隔符,去掉引号内容: =A2&B2。

How To Merge 2 Columns In Excel 1 related to 方法1:使用Ampersand运算符合并两列(最快)

双击填充手柄而不是拖动它。 Excel 将自动填充到邻近列中的最后一行数据,节省大型数据集时间。

方法2:使用CONCATENATE函数

最佳用于:习惯使用较老Excel版本或偏好使用明确函数代替ampersand简写法的用户。

CONCATENATE函数是一种Excel中的传统方法,用于合并来自两个或多个单元格的文本,但在较新版本的Excel中被CONCAT函数取代,CONCAT函数提供了更多的灵活性。 它仍然在所有的Excel版本中有效,产生的结果与ampersand方法相同。

可以使用CONCATENATE函数来合并Excel中的列,例如=CONCATENATE(A2," ",B2) 合并两个单元格的文本,中间用空格。

步骤:

  1. 单击新合并列中的第一个单元格。
  2. 输入以下公式:=CONCATENATE(A2," ",B2)
  3. 按下回车键确认。
  4. 拖动或双击填充手柄以填充所有行。

要从其他单元格添加更多的值,请扩展参数:=CONCATENATE(A2," ",B2," ",C2) 合并三个列中的数据。

How To Merge 2 Columns In Excel 2 related to 方法2:使用CONCATENATE函数

方法3:使用CONCAT函数(现代Excel)

最佳用于:Excel 2019,Microsoft 365 以及任何想要更简洁替代CONCATENATE的人。

Excel中的CONCAT函数允许用户将多个单元格的文本合并到一个单元格中,使用逗号分隔单元格,使用引号添加空格或其他文本。 其运作方式与CONCATENATE完全一致,但也接受范围,而CONCATENATE不接受。

步骤:

  1. 单击新的单一列中的第一个单元格。
  2. 输入:=CONCAT(A2," ",B2)
  3. 按下回车键,然后向下拖动填充手柄穿过整个列。

要一次性合并整个单元格范围,您可以将范围作为参数传递:=CONCAT(A2:C2) 不使用分隔符地连接这三个单元格。 对于范围中每个值之间的分隔符,TEXTJOIN(下一步将讨论)是更好的选择。

How To Merge 2 Columns In Excel 3 related to 方法3:使用CONCAT函数(现代Excel)

为向后兼容性,CONCATENATE函数在所有现代版本的Excel中仍然有效,但对于您编写的任何新公式,我们推荐使用CONCAT。它在合并两列时生成相同结果。

方法4:使用TEXTJOIN跳过空白

最佳用于:合并列,当某列中一些单元格可能为空,且您不想要结果中的尾随空格或分隔符时。

TEXTJOIN函数是Excel中强大的工具,它允许用户合并多个单元格的文本,同时允许忽略空白单元格,可以实现更清洁的数据合并。 TEXTJOIN函数在Excel 2016及更高版本可用,允许用户合并列的同时忽略空白单元格,使用公式如=TEXTJOIN(" ", TRUE, A2, B2)。

第二个参数(TRUE)控制跳过空白的行为。 当设置为TRUE时,参数列表中的任何空白单元格都会被跳过,并且没有额外的分隔符添加到它们的位置。

步骤:

  1. 单击新合并列中的第一个单元格。
  2. 输入:=TEXTJOIN(" ",TRUE,A2,B2)
  3. 按下回车键并向下填充。

在地址合并演示文件中,Suite列为空的行清楚地展示了这一点。 在一个单元列为空的行上使用ampersand运算符会产生"890 Maple Avenue, ",带有尾随逗号和空格。 TEXTJOIN和TRUE一起干净地返回"890 Maple Avenue",没有尾随字符。

How To Merge 2 Columns In Excel 4 related to 方法4:使用TEXTJOIN跳过空白 要合并超过两列,仅需添加其他单元格引用作为附加参数:=TEXTJOIN(" ",TRUE,A2,B2,C2) 一次性合并多列,并跳过任何为空的单元格。

方法5:Flash Fill合并列而不使用公式

最佳用于:一次性合并,您希望结果不需要编写任何公式。

Flash Fill检测模式并自动填充数据而不使用公式。 当源结构清晰且一致时,这是合并两列最快的方法之一。

步骤:

  1. 在新列的第一个单元格中(例如C2),手动输入组合结果,精确地如您希望出现的那样。 对于名字和姓氏:输入"James Carter"。
  2. 按下回车键移动到下一个单元格。
  3. 按下 Ctrl + E(Flash Fill快捷键)。 Excel分析第一个单元格的模式并自动填充列的其余部分。

或者,转到 主页选项卡,在编辑组中单击 填充, 从下拉菜单中选择 Flash Fill。 您也可以通过 数据 > Flash Fill 访问它。

Flash Fill生成的是静态值,而不是公式,因此如果A列或B列中的源数据更改,结果将不会自动更新。 这使得它非常适合作为一次性操作,而不是用于数据定期更新的活跃电子表格。

如果按下 Ctrl+E 后Flash Fill没有触发,请确保模式单元格直接位于源列旁边,没有空白单元格。 也请确认Flash Fill已经在文件>选项>高级>自动执行Flash Fill下启用。

方法6:使用Power Query合并列

最佳用于:大数据集、重复数据导入或每次数据刷新都需要运行相同合并的情况。

Power Query在合并大型、重复数据集时有效。 它将合并操作处理为可在源数据变化时自动重新应用的转换步骤,而无需手动重写公式。

步骤:

  1. 点击包含您的数据表的任意位置。
  2. 转到 数据选项卡 并单击 获取数据 > 从表/范围 (或 从工作表 在某些版本中)。 Power Query编辑器打开。
  3. 按住 Ctrl 并单击以选择两个列标头(例如 名字 和 姓氏)。
  4. 右键单击所选列标头之一,并选择 合并列
  5. 在对话框中,选择一个分隔符(空格、逗号、制表符或自定义)并为新合并列命名,例如"全名"。
  6. 单击确定。Power Query创建一个新的合并列,替换两个源列。
  7. 单击 关闭并加载,将结果返回到您工作表中的新表。

合并结果被加载到新的Excel表中。 如果源数据更新,单击 刷新 在数据选项卡中自动重新运行合并。

How To Merge 2 Columns In Excel 5 related to 方法6:使用Power Query合并列 How To Merge 2 Columns In Excel 6 related to 方法6:使用Power Query合并列

当合并是重复流程的一部分时,Power Query是正确的工具。 对于只有几百行的简单一次性合并两个列,使用公式设置更快。

如何将公式转换为静态值并删除源列

在使用任何公式方法(ampersand、CONCATENATE、CONCAT或TEXTJOIN)后,新合并列包含引用原始列的公式。 如果您删除A列或B列,公式将断开。 要将公式结果作为静态数据最终确定,请复制新列并粘贴为值。

步骤:

  1. 选择新合并列中的所有单元格(例如C2:C20)。
  2. Ctrl + C 复制。
  3. 右键单击同一列的第一个单元格并从下拉菜单中选择 选择性粘贴
  4. 选择 (或按 V 再按 Enter)。 公式被替换成静态值。 选择性粘贴选项将公式转换为固定文本,不再引用原始数据。
  5. 现在选择A列和B列(按住Ctrl并点击每个列的字母以选择两者)。
  6. 右键单击并选择 删除。 由于合并列现在仅包含静态值,因此删除源列不会导致错误。 此步骤删除了原始列中的数据,但新列中的合并数据被保留。

在此过程后,单一列包含全名(或任何其他组合结果)作为纯文本。 原始列已消失,新合并列单独存在。

How To Merge 2 Columns In Excel 7 related to 如何将公式转换为静态值并删除源列 How To Merge 2 Columns In Excel 8 related to 如何将公式转换为静态值并删除源列

常见问题及故障排除

合并结果显示的是数字而不是文本

当源单元格之一包含一个被格式化为数字而不是文本的数字时会发生这种情况。 concat函数和ampersand都在大多数情况下自动将数字转换为文本,但如果结果看起来不正确,将数字单元格包裹在TEXT()中强制格式化:=A2&TEXT(B2,"0") 或日期为 =A2&TEXT(B2,"DD-MMM-YYYY")。

某些合并结果的末尾有多余的空格或逗号

这是空白单元格问题。 当源列中的单元格为空时,ampersand公式仍然会添加分隔符。 切换到 =TEXTJOIN(" ",TRUE,A2,B2),使用TRUE作为第二个参数以自动跳过空白。

Flash Fill 只填充了一两行而不是整列

这通常意味着源数据有不一致,比如混合大小写、多余的空格,或两值顺序不同的行。 使用TRIM函数检查源列中的多余空格,并确保模式从第一行起是一致的。

删除原始列会破坏合并列

合并列仍然包含引用原始数据的公式。 在删除源列之前,按照选择性粘贴值步骤操作。 一旦合并列仅持有静态值,删除A列和B列是安全的。

CONCATENATE或CONCAT公式显示公式文本而不是结果

该单元格被格式化为文本。 点击单元格,在主页选项卡的数字格式下拉菜单中将单元格格式更改为常规,然后按F2和回车键重新评估公式。

快速参考:如何在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读取源值,并将合并结果直接写为静态值,这意味着输出文件中没有公式依赖。

这里是一个完整的示例,它加载员工电子表格,将名字和姓氏列合并到一个新的全名列,然后删除原始列:

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&" "&B2in 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&" "&B2in 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")
$vbLabelText   $csharpLabel

若要在代码中复制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
$vbLabelText   $csharpLabel

IronXL还支持Merge()方法,用于跨行在标题格式中可视化合并单元格,这与合并列数据分开。 更多详细信息,请参阅合并单元格指南和合并Excel文件教程。

入门:通过NuGet使用Install-Package IronXL.Excel安装。 免费试用可享有30天的全部功能且不需要信用卡。

进一步阅读:

  • 合并Excel单元格而不丢失数据
  • 如何使用IronXL在Excel中合并单元格
  • 在C#中合并和连接Excel文件

总结

每种在Excel中合并两列的方法都伴随着不同的权衡。 Ampersand运算符是合并两个列时最快的公式,当每个源单元格都有值时适用。 TEXTJOIN是在数据中存在空白单元格时的更好选择,因为它的跳过空白参数防止结果中出现尾随分隔符。 CONCATENATE仍受完全支持并产生与CONCAT相同的输出,但CONCAT是现代Excel中的当前标准。 Flash Fill是您想要结果完全没有公式的答案,通过模式识别在两步内完成。

一旦合并数据位于新的合并列中,在删除A列和B列之前,请始终使用选择性粘贴值。 首先将公式转换为静态值,意味着新的单列是独立的,并且可以安全地保留为唯一保留的结果。 对于处理大数据集上的重复工作流,其中每次到达新数据时合并都会运行,Power Query 处理合并如按刷新按钮,而不是重写公式。

在.NET中工作的开发人员需要在应用生成的工作簿中自动化此过程,可以使用IronXL读取每一行、在代码中合并值并写回合并数据,无需任何公式依赖。 从免费试用开始,在您自己的环境中进行测试。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

钢铁支援团队

我们每周 5 天,每天 24 小时在线。
聊天
电子邮件
打电话给我