gpt4 book ai didi

vba - 使用公式从字符串中提取两个数字

转载 作者:行者123 更新时间:2023-12-02 13:28:00 26 4
gpt4 key购买 nike

我有从 Google XML 响应中提取数字的公式,可以是:

  1. 9 часов 24 минут
  2. 10 小时 0 分钟
  3. 9 小时 20 分钟
  4. 11 小时 13 分钟
  5. 10 标准 55 分钟
  6. 9 蒂玛 5 分钟
  7. 19 分钟

这是当前公式(值在 BZ1 中):

=IFERROR(IF(VALUE(IF(FIND("min";BZ1;1)=11;MID(BZ1;FIND("min";BZ1;1)-2;1);MID(BZ1;FIND("min";BZ1;1)-3;2)))<30; VALUE(LEFT(BZ1;FIND("h";BZ1;1)-2))&","&5;VALUE(LEFT(BZ1;FIND("h";BZ1;1)-2))+1);"")

例如,公式将小时和分钟四舍五入为小时

  • 1 小时 39 分钟 -> 2
  • 10 小时 12 分钟 -> 10,5
  • 9 小时 20 分钟 -> 9,5

存在一个问题,即它无法考虑 hoursmin 的语言更改。

有没有可能让它发挥作用:

  • 如果只有数字(案例 19 分钟)-> 提取数字
  • 如果有两个数字(案例1 h 39 min)->提取第一个数字作为小时,然后从最后两个空格提取数字作为分钟
<小时/>

编辑:

检查单元格中有多少个数字(CA25 中的目标):

SUM(LEN(CA25)-LEN(SUBSTITUTE(CA25;{1;2;3;4;5;6;7;8;9};)))>1

如果超过1

LEFT(CA25;(FIND(" ";CA25;1)-1))&TRIM(MID(SUBSTITUTE(CA25;" ";REPT(" ";50));100;50))

如果小于1

LEFT(CA25;SUM(LEN(CA25)-LEN(SUBSTITUTE(CA25;{"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"};""))))

大家一起

=IF(SUM(LEN(CA25)-LEN(SUBSTITUTE(CA25;{1;2;3;4;5;6;7;8;9};)))>1;LEFT(CA25;(FIND(" ";CA25;1)-1))&TRIM(MID(SUBSTITUTE(CA25;" ";REPT(" ";50));100;50));LEFT(CA25;SUM(LEN(CA25)-LEN(SUBSTITUTE(CA25;{"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"};"")))))

这给出了输出:

enter image description here

现在需要将这些转换为小时并四舍五入为一小时

<小时/>

编辑2:

这里是公式(目标 BZ1):

=IFERROR(IF(LEN(BZ1)-LEN(SUBSTITUTE(BZ1;" ";""))>2;LEFT(BZ1;(FIND(" ";BZ1;1)-1))+IF(TRIM(MID(SUBSTITUTE(BZ1;" ";REPT(" ";50));100;50))<60;1;1);IF(LEFT(BZ1;SUM(LEN(BZ1)-LEN(SUBSTITUTE(BZ1;{"0";"1";"2";"3";"4";"5";"6";"7";"8";"9"};""))))<60;1;1));"")

最佳答案

这是一个小的用户定义函数:

Option Explicit
Public Function Tyme(inpt As String) As Double
Dim arr, U As Long
Tyme = 0
arr = Split(inpt, " ")
U = UBound(arr)
If U = 0 Then Exit Function
If U = 1 Then
Tyme = CDbl(arr(0))
Else
Tyme = CDbl(arr(0)) + CDbl(arr(2)) / 60#
End If
End Function

它:

  • 与语言无关
  • 返回一个未舍入浮点值(小时)

一些例子:

enter image description here

用户定义函数 (UDF) 非常容易安装和使用:

  1. ALT-F11 调出 VBE 窗口
  2. ALT-IALT-M 打开一个新模块
  3. 粘贴内容并关闭 VBE 窗口

如果保存工作簿,UDF 将随之保存。如果您使用 2003 年以后的 Excel 版本,则必须保存文件为 .xlsm 而不是 .xlsx

删除 UDF:

  1. 如上所示调出 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

使用 Excel 中的 UDF:

=Tyme(A1)

要了解有关宏的更多一般信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关 UDF 的详细信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能使其工作!

注释:

  1. 舍入应在udf外部应用
  2. 修改 udf 来处理秒也很容易
  3. 可以很容易地修改 udf 以返回真实的 Excel 时间而不是浮点时间

关于vba - 使用公式从字符串中提取两个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60506653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com