Office中国论坛/Access中国论坛

标题: 老师们给看看这个例子,附件中的EXCEL例子,来自excelhome老师给做的,来提取喷漆工艺... [打印本页]

作者: yanwei82123300    时间: 2023-9-4 10:06
标题: 老师们给看看这个例子,附件中的EXCEL例子,来自excelhome老师给做的,来提取喷漆工艺...

老师们给看看这个例子,附件中的EXCEL例子,来自excelhome老师给做的,来提取喷漆工艺的VBA例子,
现在想在access里面来实现这个数据提取,不知能不能做到,谢谢
提取字段值来自[Short Note]字段

下面是EXCEL VBA代码
Sub lqxs()
Dim Arr, i&, aa, bb$
On Error Resume Next
Sheet1.Activate

'VAPS喷漆工艺
Arr =Range("n1:n" & [a1].end(4).row)
For i = 2 To UBound(Arr)
    If InStr(Arr(i, 1), "VAPS") Then
    aa = Split(Arr(i, 1), "VAPS")
    bb = "VAPS" & Split(Trim(aa(1)))(0)
   Cells(i, 15) = bb
End If
Next
End Sub



作者: roych    时间: 2023-9-7 21:24
个人觉得写复杂了。其实可以直接用mid+instr把VAPS后面一段查出来,删掉空格后拼接就行了。不过Excel和Access略有区别。Excel里面的数据是可以换行的,所以不需要处理下一行的数据。而Access里稍稍麻烦一点。
通过观察,我们知道,喷漆工艺后面可能有空格,也可能没有。因此需要再嵌套一层来判断。表达式如下:
  1. IIf(InStr([Short Note],"VAPS")>0,"VAPS" & IIf(InStr(Mid([Short Note],InStr([Short Note],"VAPS ")+5)," ")>0,Left(Mid([Short Note],InStr([Short Note],"VAPS ")+5),InStr(Mid([Short Note],InStr([Short Note],"VAPS ")+5)," ")-1),Mid([Short Note],InStr([Short Note],"VAPS ")+5)),"")
复制代码
最终结果见附件[attach]64629[/attach]

作者: yanwei82123300    时间: 2023-9-8 16:17
roych 发表于 2023-9-7 21:24
个人觉得写复杂了。其实可以直接用mid+instr把VAPS后面一段查出来,删掉空格后拼接就行了。不过Excel和Acce ...

roych感谢您的帮助,也感动您一直坚守在ACCESS论坛,为我们这些菜鸟提供帮助
作者: yanwei82123300    时间: 2023-9-9 14:51
roych 发表于 2023-9-7 21:24
个人觉得写复杂了。其实可以直接用mid+instr把VAPS后面一段查出来,删掉空格后拼接就行了。不过Excel和Acce ...

roych老师还需要您的帮助,我继续提取里面的"RAL"字段值,用做"喷漆颜色",按照您上面的方法套了半天,也不行,请您受累给看看,感谢感谢!
作者: roych    时间: 2023-9-9 22:54
yanwei82123300 发表于 2023-9-9 14:51
roych老师还需要您的帮助,我继续提取里面的"RAL"字段值,用做"喷漆颜色",按照您上面的方法套了半天,也不行 ...

这部分为啥是“+5”,你理解了吗?
InStr([Short Note],"VAPS ")+5

因为VAPS是4个字符,加上一个空格,所以是5个字符,找到”VAPS“的位置后,扣除掉这5个字符,才是目标的开始字符。
这个”喷漆颜色“的规律是不是以RAL开头,最多以一个空格结束?
如果是这样,那么RAL是3个字符,那么”+5“就要改成”+4“的。而不是把这个公式抄了之后,直接将”VAPS“替换为”RAL“。

如果不是这个规律,那么首先把开头和结束位置的规律找出来,才能用公式去处理。如果规律不好找的话,可能就要考虑正则表达式了。那个是更复杂的写法。
--------------------------------------------------
说句题外话。
对公式有啥不理解的地方你可以提出来,我尽量解释给你听,而不是做伸手党。
如果这次我帮你改好了,下次换个工艺,是不是再发一个帖子让我帮忙改?
作者: yanwei82123300    时间: 2023-9-10 08:52
roych 发表于 2023-9-9 22:54
这部分为啥是“+5”,你理解了吗?

因为VAPS是4个字符,加上一个空格,所以是5个字符,找到”VAPS“的 ...

roych老师谢谢您的指导,我理解+5的含义,昨天也改为+4了,但是没有提取出来想要的结果,想提取RAL(包含RAL)后四位数据,,因为"RAL"字段位置变化不固定,,RAL后面通常是数字,提取出来的数据只有十几条准确,其余都不是想要的.
例如RAL3001; RAL2002;RAL6029等等
作者: roych    时间: 2023-9-10 16:01
不是不固定,是你没找准规律。
以RAL开头,paint结束那段,用mid截取就对了。大致是这些:
RAL3000Paint
RAL2002 OrangeWuqing Paint
把paint部分截取掉,得到这样的结果:
RAL3000
RAL2002 OrangeWuqing

然后分2种情况,检查有没有 空格。如果有空格,就截取空格前面那部分,如果没有空格,就直接使用。最后就得到结果了。很难咩?如果觉得嵌套太烦,也可以分2步处理的。
[attach]64631[/attach]
不过文件我是不会上传的了。你自己摸索吧。


作者: yanwei82123300    时间: 2023-9-14 09:27
roych 发表于 2023-9-10 16:01
不是不固定,是你没找准规律。
以RAL开头,paint结束那段,用mid截取就对了。大致是这些:
RAL3000Paint
...

roych老师,,谢谢您的帮助问题已经解决:
我的方法如下:
第一步先定位
RAL定位: InStr([Short Note],"RAL")
第二步再取值
喷漆颜色: IIf(IsNull([short note])=True,"",IIf([RAL定位]=0,"",Mid([short note],[RAL定位],7)))




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3