ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 名课 - Power BI数据分析与可视化实战 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: ddz79101

[求助] 单元格分拆

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-16 09:43 | 显示全部楼层
翁知江安 发表于 2025-3-16 09:09
供参考,欢迎批评指正

谢谢老师!运行成功!

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-16 09:45 | 显示全部楼层

谢谢老师!

TA的精华主题

TA的得分主题

发表于 2025-3-16 10:08 | 显示全部楼层
  1. Sub SplitInvoicesWithArray()
  2.     Application.ScreenUpdating = False
  3.     Application.Calculation = xlCalculationManual
  4.    
  5.     Dim ws As Worksheet
  6.     Set ws = Sheet1
  7.    
  8.     Dim originData As Variant
  9.     Dim resultData() As Variant
  10.     Dim rowCounter As Long
  11.     Dim i As Long, j As Long, n As Long
  12.     ' 读取原始数据到数组
  13.     With ws
  14.         Dim lastRow As Long
  15.         lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
  16.         originData = .Range("A2:E" & lastRow).Value ' 排除标题
  17.     End With
  18.    
  19.     ' 计算最大可能行数
  20.     ReDim resultData(1 To UBound(originData) * 10, 1 To 5) ' 假设每个单元格最多10个发票号
  21.    
  22.    
  23.    
  24.     ' 主处理循环
  25.     rowCounter = 0
  26.     For i = 1 To UBound(originData, 1)
  27.         Dim invoices() As String
  28.         invoices = Split(Trim(originData(i, 4)), ",") ' 拆分D列
  29.         n = 0
  30.         ' 写入拆分数据
  31.         For Each inv In invoices
  32.             If Len(Trim(inv)) > 0 Then
  33.                 rowCounter = rowCounter + 1
  34.                 n = n + 1
  35.                 ' 复制基础数据
  36.                 If n = 1 Then
  37.                 For j = 1 To 3
  38.                     resultData(rowCounter, j) = originData(i, j)
  39.                 Next j
  40.                
  41.                 ' 金额复制
  42.                 resultData(rowCounter, 5) = originData(i, 5)
  43.                
  44.                 End If
  45.                 ' 发票号处理
  46.                 resultData(rowCounter, 4) = Trim(inv)
  47.             End If
  48.         Next inv
  49.     Next i
  50.    
  51.     ' 清除原始数据
  52.     ws.Range("i:m").ClearContents
  53.     ' 处理标题
  54.     ws.Range("A1:E1").Copy ws.Range("i1")
  55.     ' 写入处理结果
  56.     If rowCounter > 0 Then
  57.         ws.Range("i2").Resize(rowCounter, 5).Value = resultData
  58.     End If
  59.    
  60.     Application.Calculation = xlCalculationAutomatic
  61.     Application.ScreenUpdating = True
  62.     MsgBox "处理完成,共生成 " & rowCounter & " 行数据", vbInformation
  63. End Sub

复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-3-16 18:00 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-24 23:46 , Processed in 0.019724 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表