ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]如何在当前单元格范围内求多个不同表示方法的字符的数量

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-1-1 14:17 | 显示全部楼层 |阅读模式

Word环境中用VBA编制一个CAPP软件,碰到一些问题,请教各位高手。

问题1: 如何统计Word表格中一个单元格中“A”的数量。

比如在一个单元格中有以下内容

1A1,2A1,3A1.

其中1A12A13A1各代表一条焊缝,现需要统计焊缝数量,我的想法是一个一个字符判断其是否等于“A”,如果是的话,通过一个循环语句进行累加。代码如下

Sub 统计焊缝数量()

a = 0

Do

zhongduan = Left(Selection.Text, 1)

aa = Left(Selection.Text, 1)

If aa = "A" Then

a = a + 1

End If

Selection.MoveRight Unit:=wdCharacter, Count:=1

Loop Until zhongduan = "."

End Sub

 

 

 

 

 

 

现在的问题是如何是程序结束,也就是说如何让其只统计本单元格中的数据,我现在只能在最后一条焊缝后面加上“.”通过判断字符是否等于”.”来决定其是否结束。想请教各位高手如果不通过加“.”的方法,如何直接让程序的执行范围只限定在当前的单元格内。

 

 

 

 

 

 

另外如果用1A1-5A1表示,1A1,2A1,3A1,4A1,5A1,那么实际上就是5条焊缝,那我如何统计其数量。

[此贴子已经被作者于2007-1-3 8:46:03编辑过]

TA的精华主题

TA的得分主题

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

不能再变,否则不行。只能满足你的两个条件:

Sub 统计焊缝数量()
    Dim arr() As String
    Dim findA As String
    Dim findB As String, findC As String
    findA = Selection.Cells(1).Range.Text
    If InStr(1, findA, "-") > 0 Then
        '前一段字符
        findB = Mid(findA, 1, InStr(1, findA, "-") - 1)
        findB = Mid(findB, 1, InStr(1, findB, "A") - 1)
        '后一段字符
        findC = Mid(findA, InStr(1, findA, "-") + 1, Len(findA) - InStr(1, findA, "-") - 1)
        findC = Mid(findC, 1, InStr(1, findC, "A") - 1)
        MsgBox CInt(findC) - CInt(findB) + 1
    Else
        arr = Split(findA, "A")
        MsgBox UBound(arr)
    End If
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-1 16:03 | 显示全部楼层

谢谢版主,试了一下,完全没有问题。

您说不能再变,否则不行。请问一下1A1-5A1那样的查找困难在何处呢,是从技术上讲没有实现的可能,还是目前没有找到的好的算法实现?

退一步说,如果全部是多个焊缝的表示方法如,1A1-3A1, 5A1-7A1,

而不是单条焊缝,多条焊缝放在一起表示,如1A1,3A1-6A1,那实现起来可以吗?

TA的精华主题

TA的得分主题

发表于 2007-1-2 08:16 | 显示全部楼层

试试这个行否?

Sub 统计焊缝数量()
    Dim arr() As String
    Dim findA As String

    Dim arr1
    Dim sumB As Long
    findA = Selection.Cells(1).Range.Text
    findA = Mid(findA, 1, Len(findA) - 2)
    arr() = Split(findA, ",")
    For Each arr1 In arr
        sumB = sumB + sumA(arr1)
    Next
    MsgBox sumB
End Sub

Function sumA(findA) As Long
    Dim findB As String, findC As String
     Dim arr() As String
    If InStr(1, findA, "-") > 0 Then
        '前一段字符
        findB = Mid(findA, 1, InStr(1, findA, "-") - 1)
        findB = Mid(findB, 1, InStr(1, findB, "A") - 1)
        '后一段字符
        findC = Mid(findA, InStr(1, findA, "-") + 1, Len(findA) - InStr(1, findA, "-"))
        findC = Mid(findC, 1, InStr(1, findC, "A") - 1)
        sumA = CInt(findC) - CInt(findB) + 1
    Else
        arr = Split(findA, "A")
        sumA = UBound(arr)
    End If
End Function

[此贴子已经被作者于2007-1-2 8:25:24编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-2 08:38 | 显示全部楼层

OK了,真是麻烦版主了。

版主,我在本版上的另一个问题,就是有关如何插入一个文件,其文件名是section.txt的内容加上几个字符,请问有办法解决吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-1-3 08:43 | 显示全部楼层

又新问题了

版主,又有新问题了。我编的CAPP软件里面焊缝有5种,A,B,C,D,E。A缝的表示方法是1A1,2A1,2A2,1A1-10A1等,B的表示方法是B1,B2,B3,B4-B16等,C缝、D缝、E缝的表示方法与B缝相同 。我原来以为A缝的统计可以了,其他几种焊缝稍微改一下代码就可以了。昨天晚上试了很长时间,总是出错。后来我想到问题出在A缝和其他类型焊缝表示方法不一样,就是A缝A后面就一个字符,其他焊缝后面可能是一个或 两个字符,所以出错了。因为版主的代码我不怎么看得懂,原来就以为把“A”替换成“B”就可以统计B缝数量了,后来才发现问题所在。不知道版本能否帮我解决这个问题,多谢。另selection.text的问题已解决。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 09:53 , Processed in 0.030898 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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