ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:VBA如何改写文本数据?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-10 09:40 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如何用EXCEL VBA,把附件文本数据第2、3列各自加减一个数值
比如第2列+0.4,第3列-0.3
要求操作中并不打开文本

text.rar

273 Bytes, 下载次数: 13

TA的精华主题

TA的得分主题

发表于 2018-8-10 10:09 | 显示全部楼层
Option Explicit

Sub test()
  Dim i, j, filename, arr, t
  ReDim spclen(2 To 3)
  filename = ThisWorkbook.Path & "\text.txt"
  Open filename For Input As #1
  arr = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbNewLine)
  Close #1
  For i = 0 To UBound(arr, 1)
    If InStr(arr(i), "#") = 1 Then
      For j = i + 1 To UBound(arr)
        If InStr(arr(j), "END") = 1 Then: Exit For
        t = Split(arr(j), ",")
        spclen(2) = Len(t(1)) - Len(Trim(t(1)))
        spclen(3) = Len(t(2)) - Len(Trim(t(2)))
        t(1) = Space(spclen(2)) & Format(Val(t(1)) + 0.4, "0.000")
        t(2) = Space(spclen(3)) & Format(Val(t(2)) - 0.3, "0.000")
        arr(j) = Join(t, ",")
      Next
    End If
  Next
  Open filename For Output As #1
  Print #1, Join(arr, vbNewLine)
  Close #1
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-10 11:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

请教一下:
文本被执行aa或bb后,cc能通过

反过来,执行cc后,aa和bb不能执行
cc是老师您的成果,aa,bb是其它老师的成果?

txt2.rar

19.24 KB, 下载次数: 6

TA的精华主题

TA的得分主题

发表于 2018-8-10 12:05 | 显示全部楼层
czr0373 发表于 2018-8-10 11:34
请教一下:
文本被执行aa或bb后,cc能通过
反过来,执行cc后,aa和bb不能执行cc是老师您的成果,aa,bb ...

定位方式不一样,我先找开始标志“#”,找到后从标致行下一行开始处理数据,如果碰到结束标志“END”直接退出处理(先判断这个标志)。这样容错的方法可能会更好些。一个问题为什么要用3种方法

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-10 12:08 | 显示全部楼层
一把小刀闯天下 发表于 2018-8-10 12:05
定位方式不一样,我先找开始标志“#”,找到后从标致行下一行开始处理数据,如果碰到结束标志“END”直接 ...

是三种方法解决了三个问题?
老师能否帮忙把这个错消除一下?万分谢谢

TA的精华主题

TA的得分主题

发表于 2018-8-10 12:16 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
czr0373 发表于 2018-8-10 12:08
是三种方法解决了三个问题?
老师能否帮忙把这个错消除一下?万分谢谢

你把所有问题都放上了,如果能看懂我再给你修改

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-10 13:17 | 显示全部楼层
一把小刀闯天下 发表于 2018-8-10 12:16
你把所有问题都放上了,如果能看懂我再给你修改

Sub bb()
    Dim Ar, k&, i&, t1, t2, t3, br, x, st, x2, x3, y, r2, r3
    Open ThisWorkbook.Path & "\text.txt" For Input As #1
    Ar = Split(StrConv(InputB(LOF(1), 1), vbUnicode), vbCrLf)
    Reset
    For i = 3 To UBound(Ar) - 2
        t1 = Mid(Ar(i), 1, 43)
        t2 = Mid(Ar(i), 44, 16): x2 = Val(Trim(Mid(Ar(i), 14, 15))): r2 = Val(Trim(Mid(Ar(i + 1), 14, 15)))
        If i = 3 Then
            t2 = 1: x = t2
        Else
            x3 = Val(Trim(Mid(Ar(i - 1), 29, 15)))
            r3 = Val(Trim(Mid(Ar(i), 29, 15)))
            If x2 <> x3 Then
                x = x + 1
                If r2 = r3 Then
                    y = 1
                    t2 = x & "(" & y & ")"
                Else
                    y = 0
                    t2 = x
                End If
            Else
                y = y + 1
                t2 = x & "(" & y & ")"
            End If
        End If
        t2 = WorksheetFunction.Rept(" ", 16 - Len(t2) - 1) & t2 & ","
       t3 = Mid(Ar(i), 60, Len(Ar(i)) - 59)
        Ar(i) = t1 & t2 & t3
    Next
    st = Join(Ar, vbCrLf): st = Left(st, Len(st) - 2)
    Open ThisWorkbook.Path & "\text.txt" For Output As #1
    Print #1, st
    Reset
End Sub
1.JPG

TA的精华主题

TA的得分主题

发表于 2018-8-10 13:32 | 显示全部楼层
本帖最后由 一把小刀闯天下 于 2018-8-10 13:43 编辑

在For i = 3 To UBound(Ar) - 2  下面插入一行代码试试:

if len(Ar(i)) =3 then exit for

---他这定位方式有点问题

或者--------
If InStr(Ar(i), "END") Then Exit For  '更靠谱些

或者--------
if instr(ar(i),",")=0 then exit for  '觉得这最好

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-8-10 13:49 | 显示全部楼层
一把小刀闯天下 发表于 2018-8-10 13:32
在For i = 3 To UBound(Ar) - 2  下面插入一行代码试试:

if len(Ar(i)) =3 then exit for

嗯,过了,非常高兴!
后面两句都管用!
再次感谢!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 20:49 , Processed in 0.039262 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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