多个样式相同的表格内容合并,将多个excel表相同坐标位置的内容追加到一个excel表的单元格里

时间:2024-10-17 08:50:01
第一步:先将Excel文件合并请添加图片描述

合并之后出现多个Sheet页

第二步:点击开发工具,VB编辑器

请添加图片描述

第三步:写VB代码
Sub CombineCells()
    Dim ws As Worksheet
    Dim targetWs As Worksheet
    Dim i As Integer, j As Integer
    Set targetWs = ThisWorkbook.Sheets("Sheet1") '设置目标工作表
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> targetWs.Name Then '排除目标工作表
            For i = 1 To ws.UsedRange.Rows.Count
                For j = 1 To ws.UsedRange.Columns.Count
                    targetWs.Cells(i, j).Value = targetWs.Cells(i, j).Value & ws.Cells(i, j).Value
                Next j
            Next i
        End If
    Next ws
End Sub

可以在双层 for 循环里控制要写的区域,例如:如果我要合并的是从 G4 到 I140单元格的内容,则可以把 VB 代码修改为如下:

Sub CombineCells()
	//Dim ws As Worksheet和Dim targetWs As Worksheet:声明了两个变量,分别用于代表工作簿中的工作表和目标工作表。
    Dim ws As Worksheet
    Dim targetWs As Worksheet
    //Dim i As Integer, j As Integer:声明了两个整数变量,用于循环中的行和列索引。
    Dim i As Integer, j As Integer
    //设置目标工作表,将变量targetWs指向当前工作簿中名为 “目标工作表名称” 的工作表。
    Set targetWs = ThisWorkbook.Sheets("Sheet1") '设置目标工作表
    //遍历当前工作簿中的每一个工作表。
    For Each ws In ThisWorkbook.Worksheets
    	//如果当前遍历到的工作表名称不等于目标工作表的名称,则执行以下操作,排除目标工作表自身不进行追加操作。
        If ws.Name <> targetWs.Name Then '排除目标工作表
        	//两层循环分别遍历指定的行范围和列范围。
        	For i = 4 To 140
        		For j = 7 TO 9
        			//将当前工作表中对应位置的单元格内容追加到目标工作表对应位置的单元格内容后面
                    targetWs.Cells(i, j).Value = targetWs.Cells(i, j).Value & ws.Cells(i, j).Value
                Next j
            Next i
        End If
    Next ws
End Sub
第四步:将当前工作表中对应位置的单元格内容追加到目标工作表对应位置的单元格内容后面的时候添加换行
Sub CombineCells()
    Dim ws As Worksheet
    Dim targetWs As Worksheet
    Dim i As Integer, j As Integer
    Set targetWs = ThisWorkbook.Sheets("目标工作表名称") '设置目标工作表
    For Each ws In ThisWorkbook.Worksheets
        If ws.Name <> targetWs.Name Then '排除目标工作表
            For i = 4 To 140
                For j = 7 To 9
                    If targetWs.Cells(i, j).Value <> "" Then
                        targetWs.Cells(i, j).Value = targetWs.Cells(i, j).Value & vbNewLine & ws.Cells(i, j).Value
                    Else
                        targetWs.Cells(i, j).Value = ws.Cells(i, j).Value
                    End If
                Next j
            Next i
        End If
    Next ws
End Sub

在这段代码中,添加了一个判断,如果目标工作表对应单元格已经有内容,就先添加一个换行符(vbNewLine)再追加当前工作表的内容;如果目标工作表对应单元格为空,则直接将当前工作表的内容赋值给目标工作表对应单元格。

第五步:如果想在单元格里特定字段前添加换行

假设你的数据在 I 列,从 I4 到 I140。
1、在另一个空白列(比如 J 列)的 J4 单元格中输入以下公式:

	=IFERROR(SUBSTITUTE(I4,"巴彦淖尔",CHAR(10)&"巴彦淖尔"),I4)

这个公式的作用是,如果在使用SUBSTITUTE函数时出现错误,就直接返回原单元格内容I4,确保不会因为错误而丢失原有的内容。
2、将 J4 单元格的公式向下填充至 J140 单元格。可以将鼠标移至 J4 单元格右下角,当鼠标变为黑色十字时,双击鼠标左键快速填充。
3、选中 J4:J140 区域,右键点击选择 “设置单元格格式”,在 “对齐” 选项卡中勾选 “自动换行”。