求老师位帮我改一下公式,这个是VBA的。应用不全面,会有冲突

qq_32106651 2021-05-12 08:06:09
求老师们帮忙修改VBA公式,
我人笨!只能把4位数和5位数筛选一遍以后再用公式,
可是还是错漏百出!

原来LE后引用4位数字的时候,宏公式没问题
我想了一下,全部应用的规格应该是"?"代表字符
当数据中LEC?????含有字母“C”=无机石,
当数据中LEY?????含有字母“Y=”石英石“
当数据中LEYC?????含有字母“YC=”无机石英石“
当数据中LE?????A或B(字符后面)含有字母“A或B=”特级“当数据中LE????/?????(4字符或5字符),因为数据中有的数据的情况会有,-2的情况,
所以以下规则是不含”-"后面的字符
如果有数据 为LE21335-2和LE1325-2则需要先指定“-2”前的字符数。
当LE后4字符的时候看,看第二位数字去取值比如:(LE2105=单,LE2306=三,LE3255=双)
当LE后5字符的时候看,看第三位数字去取值比如:(LE20105=单,LE21306=三,LE21255=双)

如果单单字母后面只有5位数字的话我也改了一下公式,但是实际操作过程中,不行,数据 不对
而且如果 在混合数据中也不行


原来LE后4位数字的规则:(旧的)
大写字母“LE后的第二位的数字是3就代表:“三”
大写字母“LE后的第二位的数字是1就代表:单
大写字母“LE后的第二位的数字是2就代表:双
大写字母“LE后的第一位的数字是C就代表:无机石
大写字母“LE后的第一位的数字是Y就代表:石英
大写字母“LE后的任意位数也有大写字母”A或B“:特
大写字母“LE后的任意位数也有大写字母”Y或S“:元素

Sub 整理数据()
Dim m%
m = [a65536].End(3).Row - 1
arr = Range("a2:a" & m + 1)
ReDim arr1(1 To m, 1 To 1)
For i = 1 To m
If Mid(arr(i, 1), 4, 1) = 1 Then
arr1(i, 1) = "单"
End If

If Mid(arr(i, 1), 4, 1) = 2 Then
arr1(i, 1) = "双"
End If

If Mid(arr(i, 1), 4, 1) = 3 Then
arr1(i, 1) = "三"
End If

If Mid(arr(i, 1), 3, 1) = "C" Then
arr1(i, 1) = "无机石"
End If

If Mid(arr(i, 1), 3, 1) = "Y" Then
arr1(i, 1) = "石英"
End If

For j = 4 To Len(arr(i, 1))
If Mid(arr(i, 1), j, 1) = "Y" Or Mid(arr(i, 1), j, 1) = "S" Then
arr1(i, 1) = "元素"
End If

If Mid(arr(i, 1), j, 1) = "A" Or Mid(arr(i, 1), j, 1) = "B" Then
arr1(i, 1) = "特"
End If
Next
Next
[b2].Resize(m, 1) = arr1
End Sub
...全文
285 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2021-05-15
  • 打赏
  • 举报
回复
引用 2 楼 阿麦 的回复:
分列,替换。公式解决,不必VBA

按楼主所说,“特征字符”并不是都在“同一位置”,你如何去分列!

建议楼主例举几个具有代表性的实例(原始串是啥样、转换后是啥样),
 这样别人更好理解你的转换规律。
主要是含A、B(似乎有在前面的、也有在后面的?)、
 还有把Y、S转换成“元素”的那些。
阿麦 2021-05-14
  • 打赏
  • 举报
回复
分列,替换。公式解决,不必VBA
qq_32106651 2021-05-12
  • 打赏
  • 举报
回复
这个论坛没什么人用的吧

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧