ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何进行数据拆分放入到Excel的工作簿中

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-8-30 14:18 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
老师们好,我想把文件中的数据(test)读入到result的几个工作表中的A列,如何用VBA来实现;                                                                                
PS:因为数据的行数超过每个工作表的行数,所有要读入到几个工作表中(工作表的数目要根据数据大小来确定)                                                                                
最后,谢谢老师们的帮忙!        

pls help.rar

50.83 KB, 下载次数: 78

TA的精华主题

TA的得分主题

发表于 2012-8-30 16:10 | 显示全部楼层
  1. Sub lqxs()
  2.     Dim a() As String, b() As String, i&, m&, r&, Arr(), rr&
  3.     Open ThisWorkbook.Path & "\test" For Input As #1
  4.     a = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
  5.     Do
  6.         m = m + 1
  7.         ReDim Preserve Arr(1 To m)
  8.         Arr(m) = a(i)
  9.         i = i + 1
  10.         If m = 65000 Then
  11.             rr = rr + 1
  12.             Sheets(rr).[a1].Resize(m, 1) = Application.Transpose(Arr)
  13.             m = 0
  14.         End If
  15.     Loop While i < UBound(a)
  16.     If m > 0 Then
  17.         rr = rr + 1
  18.         Sheets(rr).[a1].Resize(m, 1) = Application.Transpose(Arr)
  19.         m = 0
  20.     End If
  21.     Close #1
  22. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-8-30 16:11 | 显示全部楼层
  1. Sub RowCnt()
  2.     Dim Arr, k&, x&, i&
  3.     ReDim br(1 To 65536, 1 To 1)
  4.     Application.ScreenUpdating = False
  5.     Open ThisWorkbook.Path & "\test" For Input As #1
  6.     Arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
  7.     Close #1
  8.     k = UBound(Arr)
  9.     x = k \ 65536 + 1
  10.     Do Until Sheets.Count >= x
  11.         Sheets.Add
  12.     Loop
  13.     x = 0
  14.     For i = 1 To k + 1
  15.         x = x + 1
  16.         br(x, 1) = Arr(i - 1)
  17.         If x = 65536 Then
  18.             x = 0
  19.             Sheets(i \ 65536).Range("a1").Resize(65536) = br
  20.         End If
  21.     Next
  22.     If x > 0 Then
  23.         Sheets(i \ 65536 + 1).Range("a:a").ClearContents
  24.         Sheets(i \ 65536 + 1).Range("a1").Resize(x) = br
  25.     End If
  26.     Application.ScreenUpdating = True
  27. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-8-30 16:12 | 显示全部楼层
请见附件。

result.rar

558.5 KB, 下载次数: 110

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-30 18:07 | 显示全部楼层
蓝桥玄霜 发表于 2012-8-30 16:12
请见附件。

蓝版可以解释一下么,不是很明白,例如:
(1)Dim a() As String, b() As String, i&, m&, r&, Arr(), rr&中的变量分别有什么作用,由于水平有限,我看得有点乱;
(2)这句:Arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)用来干什么的?
(3)还有,ReDim Preserve Arr(1 To m)有什么作用?
盼解析,多谢多谢!

TA的精华主题

TA的得分主题

发表于 2012-8-30 19:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
(1)Dim a() As String, b() As String, i&, m&, r&, Arr(), rr&
声明变量
a() As String   字符串数据类型的数组变量
m&     长整数数据类型变量     相当于m As Long
(3)还有,ReDim Preserve Arr(1 To m)
声明动态数组变量,随着m的增加,前面声明的数组值仍然保留
(2)这句:Arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
LOF(1)    LOF函数,括号中的1表示文件号#1     #1文件的末尾
InputB(LOF(1), 1)  InputB函数   返回#1文本文件所有的字节
StrConv(InputB(LOF(1), 1), vbUnicode)   StrConv函数返回按Unicode格式的字符串
Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)   Split函数把以上的字符串按照回车换行符分离,形成一个一维数组
整句是把以上的一维数组赋给变量Arr

以上解释对于没有基础的可能没什么用处吧。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-31 08:52 | 显示全部楼层
蓝桥玄霜 发表于 2012-8-30 19:25
(1)Dim a() As String, b() As String, i&, m&, r&, Arr(), rr&
声明变量
a() As String   字符串数据类 ...

谢谢篮版的耐心解析,的确明白了许多。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-8-31 09:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
蓝版你好,不好意思,我还有一个问题要问,求指点:
If m = 65000 Then......Loop While i < UBound(a)和If m > 0 Then.....的分别要达到什么目的?
谢谢!

TA的精华主题

TA的得分主题

发表于 2012-8-31 11:05 | 显示全部楼层
If m = 65000 Then......Loop While i < UBound(a)
前者是为了不超过一列的总行数而作的判断,如果m达到65000,即给单元格赋值,同时m复原=0,rr+1
使下一个工作表可继续赋值
后者是Do   Loop循环,当i<Ubound(a)的时候执行循环。

TA的精华主题

TA的得分主题

发表于 2016-5-14 10:34 | 显示全部楼层
蓝桥玄霜 发表于 2012-8-31 11:05
If m = 65000 Then......Loop While i < UBound(a)
前者是为了不超过一列的总行数而作的判断,如果m达到65 ...

寻找蓝版的足迹中
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 13:51 , Processed in 0.026192 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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