用“ 宏 ”或“ VBA ”实现 : 自动分列、引用
例如 :
sheet1表中的 A列数据“ 分列 ”到B列、D列、F列
再把“ sheet1 ”复制粘贴到“ sheet2 ”
最后把“ sheet2 ”数据【引用】到“ sheet3 ”
需要注意的是 : “ sheet2 ”表有创建“ 组 ”,每天都要往空白行续下去
https://blog.csdn.net/xuemanqianshan/article/details/103993175
这个不难,你自己录制一下宏就可以了
可以使用 VBA 中的 Range 对象的 End 属性和 Offset 属性来自动分列。
将数据从 A 列复制到 B 列,然后在 B 列中插入一个空白列。此代码假设您有一个名为 "Sheet1" 的工作表,并且数据位于 A1:A10 范围内。
Sub CopyAndInsertColumn()
Dim lastRow As Long
Dim dataRange As Range
' 获取 A 列中的最后一行
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
' 将数据范围设置为 A1:A10
Set dataRange = Range("A1:A" & lastRow)
' 复制数据到 B 列
dataRange.Copy Destination:=Range("B1")
' 在 B 列中插入一个空白列
Columns("B:B").Insert Shift:=xlToRight
End Sub
如果想要实现引用功能,可以使用 VBA 中的 Range 对象的 Address 属性,该属性返回单元格的地址。例如下面的代码可以在单元格 C1 中插入对 A1 单元格的引用。
Sub InsertReference()
Range("C1").Value = "=A1"
End Sub
还可以使用 VBA 中的 Indirect 函数来实现动态引用。例如可以在单元格 C1 中插入对单元格 A1 的引用,其中 A1 的值存储在单元格 D1 中
Sub InsertDynamicReference()
Range("C1").Value = "=INDIRECT(D1)"
End Sub
自己多试试就好了,不过这玩意有点落伍了,用python更加简单。
实现这个功能的步骤如下:
(1)在 VBA 编辑器中新建一个模块,输入以下代码:
Sub AutoColumnSplit()
Dim lastRow As Long
Dim i As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Sheets("Sheet1") '替换为你的工作表名称
Set ws2 = Sheets("Sheet2") '替换为你的工作表名称
lastRow = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row '获取 A 列的最后一行
For i = 1 To lastRow '循环 A 列的每一行
ws1.Cells(i, "B").Value = ws1.Cells(i, "A").Value '将 A 列的数据复制到 B 列
ws1.Cells(i, "D").Value = ws1.Cells(i, "A").Value '将 A 列的数据复制到 D 列
ws1.Cells(i, "F").Value = ws1.Cells(i, "A").Value '将 A 列的数据复制到 F 列
Next i
ws1.Copy Before:=ws2 '复制 sheet1 到 sheet2 之前
End Sub
(2)运行这个宏,它会自动将 sheet1 的 A 列数据分列到 B、D、F 列,并将 sheet1 复制到 sheet2 之前。
(3)如果要在 sheet3 中引用 sheet2 的数据,可以使用 Excel 的引用函数,例如 =Sheet2!A1。
注意:在使用 VBA 宏时,请务必注意代码的格式和语法。如果出现错误,可能是代码有语法错误或者引用了不存在的工作表。
这个链接是VBA实现的:
参考下:
【Excel VBA 完美复制Excel的分列功能】https://me.mbd.baidu.com/r/S0aMPsE3EA?f=cp&rs=3762477069&ruk=FLyeGLdYX1Bol8875SXyrA&u=e3e1e1b7ac07b99c&urlext=%7B%22cuid%22%3A%22g82TilaDv8_KPv8M_avva0uXSi0KaHiXluv1i0OS-aKa0qqSB%22%7D
分列需要用到的分隔符是什么?你这上面没提到啊
python示例代码,望采纳:
import openpyxl
# 打开 Excel 工作簿
wb = openpyxl.load_workbook('workbook.xlsx')
# 选择 sheet1 表
sheet1 = wb['sheet1']
# 分列 A 列数据到 B、D 和 F 列
for row in sheet1.iter_rows(min_row=1, max_row=sheet1.max_row, min_col=1, max_col=1):
for cell in row:
sheet1.cell(row=cell.row, column=2, value=cell.value)
sheet1.cell(row=cell.row, column=4, value=cell.value)
sheet1.cell(row=cell.row, column=6, value=cell.value)
# 复制 sheet1 到 sheet2
sheet2 = wb.copy_worksheet(sheet1)
sheet2.title = 'sheet2'
# 引用 sheet2 到 sheet3
sheet3 = wb['sheet3']
for row in sheet2.iter_rows(min_row=1, max_row=sheet2.max_row, min_col=1, max_col=sheet2.max_column):
sheet3.append([cell.value for cell in row])
# 保存修改后的工作簿
wb.save('workbook.xlsx')
1、打开 Excel 工作簿,打开 VBA 编辑器(Alt + F11)。
2、在 VBA 编辑器中,新建模块(插入 > 模块)。
3、在新建的模块中,输入以下代码:
Sub SplitColumns()
'分列数据
Dim sourceSheet As Worksheet
Set sourceSheet = ThisWorkbook.Sheets("Sheet1")
sourceSheet.Columns("A").Copy Destination:=sourceSheet.Columns("B")
sourceSheet.Columns("A").Copy Destination:=sourceSheet.Columns("D")
sourceSheet.Columns("A").Copy Destination:=sourceSheet.Columns("F")
End Sub
Sub CopySheet()
'复制粘贴表
Dim sourceSheet As Worksheet
Set sourceSheet = ThisWorkbook.Sheets("Sheet1")
sourceSheet.Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
End Sub
Sub ReferenceData()
'引用数据
Dim sourceSheet As Worksheet
Set sourceSheet = ThisWorkbook.Sheets("Sheet2")
Dim targetSheet As Worksheet
Set targetSheet = ThisWorkbook.Sheets("Sheet3")
targetSheet.Range("A1").FormulaR1C1 = "=Sheet2!A1"
End Sub
4、在 VBA 编辑器中,保存代码。
5、在 Excel 工作簿中,运行宏。可以点击“工具”菜单中的“宏”,然后选择你刚才编写的宏,或者在工作簿中按 Alt + F8 运行宏。
6、在 Excel 工作簿中,检查数据是否被正确分列、复制粘贴、引用。
实现不难,解决了吗?
宏实现:
1,在 sheet1 中, 选中 A 列数据, 按下 "Ctrl + C" 复制
2,在 sheet1 中, 定位到 B 列第一个空白单元格, 按下 "Ctrl + V" 粘贴
3,在 sheet1 中, 定位到 D 列第一个空白单元格, 按下 "Ctrl + V" 粘贴
4,在 sheet1 中, 定位到 F 列第一个空白单元格, 按下 "Ctrl + V" 粘贴
5,在 sheet1 中, 选中整个表格, 按下 "Ctrl + C" 复制
6,在 sheet2 中, 定位到第一个空白单元格, 按下 "Ctrl + V" 粘贴
7,在 sheet3 中, 定位到第一个空白单元格, 在单元格中输入 "=sheet2!A1" 并按下 "Enter" 键, 即可将 sheet2 中的数据引用到 sheet3 中
VBA 实现:
按下 "Alt + F11" 打开 VBA 编辑器
在 VBA 编辑器中, 点击 "插入" -> "模块" 新建一个模块
在新建的模块中输入以下代码:
Sub AutoSplitAndPaste()
Dim sheet1 As Worksheet
Dim sheet2 As Worksheet
Dim sheet3 As Worksheet
Dim i As Integer
Set sheet1 = ThisWorkbook.Sheets("Sheet1")
Set sheet2 = ThisWorkbook.Sheets("Sheet2")
Set sheet3 = ThisWorkbook.Sheets("Sheet3")
' 分列操作
For i = 1 To sheet1.Range("A" & sheet1.Rows.Count).End(xlUp).Row
sheet1.Range("B" & i) = sheet1.Range("A" & i)
sheet1.Range("D" & i) = sheet1.Range("A" & i)
sheet1.Range("F" & i) = sheet1.Range("A" & i)
Next i
' 复制粘贴操作
sheet1.UsedRange.Copy
代码:Sub AutoColumnSplit()
Dim lastRow As Long
Dim i As Long
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Sheets("Sheet1") '替换为你的工作表名称
Set ws2 = Sheets("Sheet2") '替换为你的工作表名称
lastRow = ws1.Cells(ws1.Rows.Count, "A").End(xlUp).Row '获取 A 列的最后一行
For i = 1 To lastRow '循环 A 列的每一行
ws1.Cells(i, "B").Value = ws1.Cells(i, "A").Value '将 A 列的数据复制到 B 列
ws1.Cells(i, "D").Value = ws1.Cells(i, "A").Value '将 A 列的数据复制到 D 列
ws1.Cells(i, "F").Value = ws1.Cells(i, "A").Value '将 A 列的数据复制到 F 列
Next i
ws1.Copy Before:=ws2 '复制 sheet1 到 sheet2 之前
End Sub
Sub test()
Dim rng As Range, arr, a As Range
Set rng = Application.InputBox("请选择需要拆分的单元格区域", "单元格的处理", , , , , , 8)
For Each a In rng
Str1 = rng.Text
arr = Split(Str1, "-")
ii = UBound(arr) + 1
For i = 1 To ii
rng.Offset(0, i) = arr(i - 1)
Next i
Next a
End Sub