ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

求助大神,提取数据【已解决】

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-6-4 19:24 | 显示全部楼层 |阅读模式
本帖最后由 x7893930 于 2024-6-4 19:47 编辑

麻烦大神,思路有,基础有点差,真的写不出来了


将A列内  汇率提取出来,有的前面是空格  有的前面是英文冒号   有的是中文冒号  还有直接跟在汇率俩字后面的,有的三位小数  有的两位  有的四位

我的思路是找到  7点(汇率都是7.****),提取出来以后,然后打散单元格内容,逐位判定isnumber,然后再提取出来。



请求.rar

7.94 KB, 下载次数: 15

TA的精华主题

TA的得分主题

发表于 2024-6-4 19:35 | 显示全部楼层
本帖最后由 shiruiqiang 于 2024-6-4 19:39 编辑

直接正则:7\.\d+
image.jpg

请求.rar

12.01 KB, 下载次数: 8

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-4 19:38 | 显示全部楼层
Option Explicit
Sub TEST1()
    Dim ar, i&
   
    ar = Range("A1", Cells(Rows.Count, "A").End(xlUp)).Value
    ar(1, 1) = "提取汇率"
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "7\.[0-9]+"
        For i = 2 To UBound(ar)
            If .test(ar(i, 1)) Then
                ar(i, 1) = .Execute(ar(i, 1))(0)
            Else
                ar(i, 1) = Empty
            End If
        Next i
    End With
   
    Columns("B").Clear
    [B1].Resize(UBound(ar)) = ar
    Beep
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-6-4 19:39 | 显示全部楼层
.............

请求.rar

15.03 KB, 下载次数: 8

评分

2

查看全部评分

TA的精华主题

TA的得分主题

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

大神您好,VBA要怎么写正则?麻烦给指点一下,正则表达式不会写

TA的精华主题

TA的得分主题

发表于 2024-6-4 19:41 | 显示全部楼层
x7893930 发表于 2024-6-4 19:41
大神您好,VBA要怎么写正则?麻烦给指点一下,正则表达式不会写

看附件,写好了

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-4 19:46 | 显示全部楼层

感谢大神,快准狠,向您学习

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-4 19:47 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-4 19:50 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-6-4 19:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Function ERate(cellText As String) As String
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    regex.Pattern = "(\d+\.\d+)"
    regex.Global = True
    regex.IgnoreCase = True
    Dim matches As Object
    Set matches = regex.Execute(cellText)
    If matches.Count > 0 Then
        ERate = matches(0).Value
    Else
       ERate = "No Exchange Rate Found"
    End If
    Set regex = Nothing
    Set matches = Nothing
End Function
Sub 提取数字()
    Dim ws As Worksheet
    Set ws = Sheet1
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 获取A列最后一个非空单元格的行号
   
    Dim cell As Range
    Dim result As String
   
    ' 遍历A列中的每个单元格
    For Each cell In ws.Range("A2:A" & lastRow)
        result = ERate(cell.Value)
        ' 将提取的汇率放在B列对应的单元格中
        ws.Cells(cell.Row, "b").Value = result
    Next cell
    MsgBox "完成!"
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 07:21 , Processed in 0.045594 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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