ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 提取数据到指定区域

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-4 16:58 | 显示全部楼层
本帖最后由 天地一相 于 2023-1-20 21:08 编辑

是你呀,谢谢你!这个我过会才能测试。移步瞅瞅我这个帖子呗,我想对你来说是手到擒来。

TA的精华主题

TA的得分主题

发表于 2023-1-4 17:22 | 显示全部楼层
天地一相 发表于 2023-1-4 16:58
是你呀,谢谢你!这个我过会才能测试。移步瞅瞅我这个帖子呗,我想对你来说是手到擒来。https://club.exc ...

公式看不懂,没法弄

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-4 17:29 | 显示全部楼层
jz_l 发表于 2023-1-4 17:22
公式看不懂,没法弄

本帖的我测试正确!强制声明不是说在模块级别使用吗?表内的VBA也能用?提示我其它未声明,我逐个定义了一遍。哪个公式,愿意的话我给你解释说明一下。谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-4 17:35 | 显示全部楼层
jz_l 发表于 2023-1-4 17:22
公式看不懂,没法弄

可能是J5:L5的公式有点复杂,其实那公式要干的活,我在8,9,10行的说明里应该说清楚了。其它公式应该没什么问题。H5的公式是判断计算结果是否符合于E5

TA的精华主题

TA的得分主题

发表于 2023-1-5 11:54 | 显示全部楼层
这个可以在不同分隔符的情况下都能提取数字。

Sub 提取数字()

    endrow = [a4].End(xlDown).Row '看有多少行
    For irow = 4 To endrow
        text_ = Cells(irow, 1)
        For i = 1 To Len(text_)
            If Not IsNumeric(Mid(text_, i, 1)) Then
                deli = Mid(text_, i, 1)             '找出分隔符
                Exit For
            End If
        Next
        arr_text = Split(text_, deli)
        Dim arr_num()
        num = 0
        For i = 0 To UBound(arr_text)
            ReDim Preserve arr_num(num)
            arr_num(num) = CInt(arr_text(i))         '转换为数字,这里是整数
            num = num + 1
        Next
        Cells(irow, 2).Resize(1, UBound(arr_num) + 1) = arr_num '打印
    Next
   
End Sub

求助.zip

15.33 KB, 下载次数: 2

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-8 21:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
tanglf188 发表于 2023-1-4 14:24
Sub TEST()
    countrow = Range("A" & Rows.Count).End(xlUp).Row
    For i = 4 To countrow

先谢。测试了你的代码。结果正确,如你所说,能处理各种符号。唯一的问题是速度慢。我用公式6秒处理,你的测试30秒。我好奇的是,全部的帮助都有考虑符号间隔的问题,但这符号不重要呀,可以不管啥符号直接作为一个数据占位处理的,这样的话,问题就简化成:对一个单元格的数据,按位取值,取几次。每次几位。我的问题示例:1 to 7 , 每列位置和位数:1,2 和 4,2 和 7,2 一直到 19,2 结束。循环,步进3. 这样估计速度就快了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-8 21:42 | 显示全部楼层
supermouse24 发表于 2023-1-5 11:54
这个可以在不同分隔符的情况下都能提取数字。

Sub 提取数字()

先谢,汇报下测试,没过,说是类型不匹配。不去识别符号可好?一律视为一个数据占位,直接规定,取几次,每次是从第几位开始取几位。于是就是:1 to 7 , 位置i=1,然后步进3,每次取2位。

TA的精华主题

TA的得分主题

发表于 2023-1-9 09:16 | 显示全部楼层
天地一相 发表于 2023-1-8 21:34
先谢。测试了你的代码。结果正确,如你所说,能处理各种符号。唯一的问题是速度慢。我用公式6秒处理,你 ...

作为常写代码的来说,肯定要考虑代码的冗余问题,能写活的不会写死,如果你确定间隔就是一位的话就只能写死了,万一有两位及以上就不能适用了

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-1-9 09:31 | 显示全部楼层
tanglf188 发表于 2023-1-9 09:16
作为常写代码的来说,肯定要考虑代码的冗余问题,能写活的不会写死,如果你确定间隔就是一位的话就只能写 ...

早,谢谢。我的数据,符号是一个或几个不重要,特点是数据整齐,这样的话,管你有没间隔,间隔几位,对整齐的数据,一律可采用按位取值,取几位的方法。这样的话,代码就能方便调整设置处理各种整齐的数据。不知我想的对不对。若可以,就请你给写一个这样的:取几次,1 to n(是几写几) 。首取位 i = 几。步进(后面取位)+几 (看具体取法填写,本贴就是3),每次取几个位数(本帖就是2).

TA的精华主题

TA的得分主题

发表于 2023-1-9 10:51 | 显示全部楼层
天地一相 发表于 2023-1-9 09:31
早,谢谢。我的数据,符号是一个或几个不重要,特点是数据整齐,这样的话,管你有没间隔,间隔几位,对整 ...

Sub TEST()
    T = Timer
    countrow = Range("A" & Rows.Count).End(xlUp).Row
    m = 2 '每次截取数字位数
    n = 3 '步进位
    sti = "," '需要截掉的字符
    For i = 4 To countrow
        st = Sheet1.Range("A" & i)
        md = ""
        k = 2
        Do
            If InStr(st, sti) > 0 Then
                Sheet1.Cells(i, k) = Mid(st, 1, m)
                st = Mid(st, n + 1, Len(st) - n)
                k = k + 1
            Else
                Sheet1.Cells(i, k) = st
                st = ""
            End If
            If st = "" Then Exit Do
        Loop
    Next
    MsgBox "一共用时:" & Format(Timer - T, "#0.00") & " 秒", , "执行完毕!"
End Sub

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 22:42 , Processed in 0.035969 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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