ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 328|回复: 24

[求助] 如何将excel工作薄按照条件分割成工作表,同时导出为txt文档

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-4-30 09:28 | 显示全部楼层 |阅读模式
本帖最后由 jerry83 于 2024-4-30 12:23 编辑

各位老师好,附件是需要处理的excel表格,我的需求如下,烦请各位老师帮忙解答,谢谢!
(一)按照A列中的“商品编号”分别导出为对应的工作表(工作表名称为“商品编号”)
(二)每个工作表按照“采购日期”生成对应的sheet页(sheet名称为“采购日期”)
(三)对应的sheet页的D列“版型”分别导出为txt文档,文档重命名为:商品名称-采购日期

案例表格xlsx.zip

7.82 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2024-4-30 09:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
(一)按照A列中的“商品编号”分别导出为对应的工作表(工作表名称为“商品编号”)
楼主这里的工作表是指工作簿,即excel文件吗?

导出具体文本格式,可以提供下,因为可以直接处理导出,不用经过中间步骤的

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-30 09:51 | 显示全部楼层
本帖最后由 jerry83 于 2024-4-30 10:13 编辑
liulang0808 发表于 2024-4-30 09:31
(一)按照A列中的“商品编号”分别导出为对应的工作表(工作表名称为“商品编号”)
楼主这里的工作表是 ...

是的,直接导出为记事本格式

TA的精华主题

TA的得分主题

发表于 2024-4-30 09:57 | 显示全部楼层
  1. Sub test1()
  2.   Dim ar, data, rowHeights() As Double, dict As Object
  3.   Dim i As Long, j As Long, x As Long, vKey As Variant
  4.   Dim dstFolder As String, wb As String, ws As String
  5.   Dim titleRow As Long, wbCol As Long, wsCol As Long

  6.   DoApp False

  7.   titleRow = 1
  8.   wbCol = 1
  9.   wsCol = 2

  10.   ReDim rowHeights(1 To titleRow + 1)

  11.   dstFolder = ThisWorkbook.Path & "\分簿分表"
  12.   If Dir(dstFolder, vbDirectory) = "" Then MkDir dstFolder

  13.   Set dict = CreateObject("Scripting.Dictionary")
  14.   With ActiveSheet
  15.     data = .Range("A1").CurrentRegion.Value
  16.     j = UBound(data, 2)
  17.     For i = titleRow + 1 To UBound(data)
  18.       wb = data(i, wbCol)
  19.       ws = Format(data(i, wsCol), "yyyy-m-d")
  20.       If Not dict.Exists(wb) Then Set dict(wb) = CreateObject("Scripting.DictionAry")
  21.       If Not dict(wb).Exists(ws) Then Set dict(wb)(ws) = .Range("A1").Resize(titleRow, j)
  22.       Set dict(wb)(ws) = Union(dict(wb)(ws), .Range("A" & i).Resize(, j))
  23.     Next
  24.     For j = 1 To UBound(data, 2)
  25.       data(1, j) = .Columns(j).ColumnWidth
  26.     Next
  27.     For i = 1 To UBound(rowHeights)
  28.       rowHeights(i) = .Rows(i).RowHeight
  29.     Next
  30.   End With

  31.   For Each vKey In dict.Keys
  32.     Application.SheetsInNewWorkbook = dict(vKey).Count
  33.     With Workbooks.Add
  34.       For j = 0 To dict(vKey).Count - 1
  35.         With .Worksheets(j + 1)
  36.           dict(vKey).Items()(j).Copy .Range("A1")
  37.           .Name = dict(vKey).Keys()(j)
  38.           For i = 1 To UBound(data, 2)
  39.             .Columns(i).ColumnWidth = data(1, i)
  40.           Next
  41.           For i = 1 To UBound(rowHeights) - 1
  42.             .Rows(i).RowHeight = rowHeights(i)
  43.           Next
  44.           .Rows(i & ":" & .UsedRange.Rows.Count).RowHeight = rowHeights(i)
  45.           .DrawingObjects.Delete
  46.           ar = .UsedRange
  47.           For i = 1 To UBound(ar)
  48.             For x = 2 To UBound(ar, 2)
  49.               ar(i, 1) = ar(i, 1) & "," & ar(i, x)
  50.             Next
  51.           Next
  52.           ar = WorksheetFunction.Transpose(WorksheetFunction.Index(ar, 0, 1))
  53.           Open dstFolder & "\" & vKey & "_" & .Name & ".txt" For Output As #8
  54.           Print #8, Join(ar, vbCrLf)
  55.           Close #8
  56.         End With
  57.       Next
  58.       .SaveAs dstFolder & "\" & vKey, 51
  59.       .Close
  60.     End With
  61.   Next

  62.   With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
  63.     .SetText ""
  64.     .PutInClipboard
  65.   End With

  66.   Set dict = Nothing
  67.   Application.SheetsInNewWorkbook = 1
  68.   DoApp
  69.   Beep
  70. End Sub

  71. Function DoApp(Optional b As Boolean = True)
  72.   With Application
  73.     .ScreenUpdating = b
  74.     .DisplayAlerts = b
  75.     .Calculation = -b * 30 - 4135
  76.   End With
  77. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-30 10:18 | 显示全部楼层
Sub 拆分为txt文档()
Dim r%, i%
Dim arr, brr
Dim d As Object
Set d = CreateObject("scripting.dictionary")
With Worksheets("汇总表格")
  r = .Cells(.Rows.Count, 1).End(xlUp).Row
  arr = .Range("a1:e" & r)
End With
For j = 1 To UBound(arr, 2)
    If j = 1 Then
        zf = arr(1, j)
    Else
        zf = zf & "   " & arr(1, j)
    End If
Next j
For i = 2 To UBound(arr)
    zd = Format(arr(i, 2), "yyyy年m月d日") & "-" & Trim(arr(i, 3))
  If Not d.exists(zd) Then
    d(zd) = zf & vbCrLf & arr(i, 1) & "   " & arr(i, 2) & "   " & Trim(arr(i, 3)) & "   " & arr(i, 4) & "   " & arr(i, 5)
  Else
    d(zd) = d(zd) & vbCrLf & arr(i, 1) & "   " & arr(i, 2) & "   " & Trim(arr(i, 3)) & "   " & arr(i, 4) & "   " & arr(i, 5)
  End If
Next
For Each aa In d.keys
  Open ThisWorkbook.Path & "\" & aa & ".txt" For Output As #1
  Print #1, d(aa)
  Close #1
Next
MsgBox "ok!"
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-30 10:19 | 显示全部楼层
案例表格xlsx.rar (16.93 KB, 下载次数: 12)

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-30 10:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-4-30 10:47 | 显示全部楼层
关键字:into
GIF 2024-04-30 10-45-23.gif

Limonet.zip

16.79 KB, 下载次数: 5

TA的精华主题

TA的得分主题

发表于 2024-4-30 10:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub limonet()
    Dim Cn As Object, StrSQL$, Arr As Variant, i%
    Set Cn = CreateObject("Adodb.Connection")
    Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
    Arr = Cn.Execute("Select 商品编码,采购日期 From [汇总表格$] Group By 商品编码,采购日期").GetRows
    For i = 0 To UBound(Arr, 2)
        Cn.Close
        Cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0 XML;Data Source=" & ThisWorkbook.Path & "\" & Arr(0, i) & ".xlsx"
        StrSQL = "Select * Into [" & Arr(1, i) & "] From [Excel 12.0;DataBase=" & ThisWorkbook.FullName & "].[汇总表格$] Where 商品编码=" & Arr(0, i) & " And 采购日期=#" & Arr(1, i) & "#"
        Cn.Execute (StrSQL)
    Next i
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-4-30 10:55 | 显示全部楼层
本帖最后由 ykcbf1100 于 2024-4-30 11:02 编辑

代码更新一下,附件供参考。。。

{C9763451-E006-42e2-B707-4A56D4534953}.png

案例表格2.7z

19.11 KB, 下载次数: 10

评分

4

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-21 23:22 , Processed in 0.047148 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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