设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 813|回复: 7
打印 上一主题 下一主题

[模块/函数] 老师们给看看这个例子,附件中的EXCEL例子,来自excelhome老师给做的,来提取喷漆工艺...

[复制链接]
跳转到指定楼层
1#
发表于 2023-9-4 10:06:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

老师们给看看这个例子,附件中的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


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2023-9-7 21:24:26 | 只看该作者
个人觉得写复杂了。其实可以直接用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)),"")
复制代码
最终结果见附件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

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

roych老师还需要您的帮助,我继续提取里面的"RAL"字段值,用做"喷漆颜色",按照您上面的方法套了半天,也不行,请您受累给看看,感谢感谢!
5#
发表于 2023-9-9 22:54:01 | 只看该作者
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“。

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

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

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

然后分2种情况,检查有没有 空格。如果有空格,就截取空格前面那部分,如果没有空格,就直接使用。最后就得到结果了。很难咩?如果觉得嵌套太烦,也可以分2步处理的。

不过文件我是不会上传的了。你自己摸索吧。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
8#
 楼主| 发表于 2023-9-14 09:27:13 | 只看该作者
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)))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-28 19:44 , Processed in 0.096816 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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