Excel 宏或VBA

用“ 宏 ”或“ 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 宏时,请务必注意代码的格式和语法。如果出现错误,可能是代码有语法错误或者引用了不存在的工作表。

提供参考实例【在Excel中应用VBA批量导入数据】,链接:https://blog.csdn.net/maweifeng/article/details/195949?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-195949-blog-89399343.pc_relevant_recovery_v2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-3-195949-blog-89399343.pc_relevant_recovery_v2&utm_relevant_index=4

这个链接是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