Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1971|回复: 7

[已解决]请教各位老师VBA字符串处理问题

[复制链接]
发表于 2014-6-26 23:25 | 显示全部楼层 |阅读模式
本帖最后由 xiangxilanren 于 2014-6-26 23:31 编辑

各位老师:工作中用到道路里程数据,例如:1234.56789千米、0.12345千米、123.04567(数据精确到小数点后五位,也就是厘米)。现在需要将数据按:1234Km567m、0Km123m、123Km045m的格式(数据无需四舍五入)输出为文本文件使用。我先用InStr函数确认小数点位置,再用Mid函数提取小数点前后的数据。实际使用中发现,不能正确提取小数点后三位的数据,特别是数据中含有“0”时,错得无法忍受。不知道错在哪里,请各位老师帮忙指教。万分感谢!
   With ActiveSheet
        iZ = .Range("B65536").End(xlUp).Row
            wjm = .Name
        Set MyFile = CreateObject("scripting.filesystemobject").createtextfile(ThisWorkbook.Path & "\" & wjm & ".txt", True)
            For r = 8 To iZ
                c = ""
                ksKM = ""
                ksM = ""
                    c = InStr(.Cells(r, 4), ".")
                        ksKM = Mid(.Cells(r, 4), 1, c - 1)
                        ksM = Mid(.Cells(r, 4), c + 1, c + 3)
                MyStr = ""
                MyStr = MyStr &  ksKM & "Km" & ksM & "m" ;"
                    MyFile.writeline (MyStr)
            Next r
                MyFile.Close
    End With
    请问各位老师,有没有更好的方法实现这个格式呢?可不可以用Format函数呢?

最佳答案
2014-6-27 00:10
  1. With ActiveSheet
  2.          iZ = .Range("B65536").End(xlUp).Row
  3.             wjm = .Name
  4.          Set MyFile = CreateObject("scripting.filesystemobject").createtextfile(ThisWorkbook.Path & "" & wjm & ".txt", True)
  5.              For r = 8 To iZ
  6.                  ksKM = ""
  7.                  ksm = 0
  8.                          ksm = Int(Replace(.Cells(r, 4), "千米", "") * 1000)
  9.                  MyStr = ""
  10.                  MyStr = Format(ksm, "0km000m")
  11.                  MyFile.writeline (MyStr)
  12.              Next r
  13.                MyFile.Close
  14.      End With
复制代码
试试。。。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-6-27 00:10 | 显示全部楼层    本楼为最佳答案   
  1. With ActiveSheet
  2.          iZ = .Range("B65536").End(xlUp).Row
  3.             wjm = .Name
  4.          Set MyFile = CreateObject("scripting.filesystemobject").createtextfile(ThisWorkbook.Path & "" & wjm & ".txt", True)
  5.              For r = 8 To iZ
  6.                  ksKM = ""
  7.                  ksm = 0
  8.                          ksm = Int(Replace(.Cells(r, 4), "千米", "") * 1000)
  9.                  MyStr = ""
  10.                  MyStr = Format(ksm, "0km000m")
  11.                  MyFile.writeline (MyStr)
  12.              Next r
  13.                MyFile.Close
  14.      End With
复制代码
试试。。。
回复

使用道具 举报

发表于 2014-6-27 00:53 | 显示全部楼层
xdragon 发表于 2014-6-27 00:10
试试。。。

MyStr = Format(ksm, "0km000m")要先减掉0.5,避免四舍五入
回复

使用道具 举报

发表于 2014-6-27 00:55 | 显示全部楼层
cbg2008 发表于 2014-6-27 00:53
MyStr = Format(ksm, "0km000m")要先减掉0.5,避免四舍五入

我是提取的本来就是到米的,小数点后面都int被取整掉了
回复

使用道具 举报

发表于 2014-6-27 01:01 | 显示全部楼层
xdragon 发表于 2014-6-27 00:55
我是提取的本来就是到米的,小数点后面都int被取整掉了

高明啊
回复

使用道具 举报

发表于 2014-6-27 09:36 | 显示全部楼层
哈哈   
看明白了
回复

使用道具 举报

 楼主| 发表于 2014-6-28 00:41 | 显示全部楼层
非常感谢xdragon老师!
回复

使用道具 举报

 楼主| 发表于 2014-6-28 00:42 | 显示全部楼层
本帖最后由 xiangxilanren 于 2014-6-28 00:43 编辑

我的原始数据是没有“千米”这个单位的,就是一个小数点后0至5位的数字。您给我修改的代码:ksm = Int(Replace(.Cells(r, 4), "千米", "") * 1000)。这一句修改为:ksm = Int(.Cells(r, 4) * 1000)后通过。
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-14 06:26 , Processed in 0.251153 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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