作业帮 > 综合 > 作业

如何使用公式提取文字中的数字?

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/30 13:58:47
如何使用公式提取文字中的数字?

Excel中有没有一种公式或者VBS可以像如图所示一样只提取OT前的数字

可用者高分悬赏啊!


用公式麻烦,用VBA较简单,代码如下,详见附件
Private Sub CommandButton1_Click()
   Dim I%,S$,X!,Ra As Range
   Set Ra = Cells.Find("Examples:")
   If Ra Is Nothing Then MsgBox "没有找到原始数据列:Examples":Exit Sub
   Set Ra = Range(Ra.Offset(1),Cells(Cells.Rows.Count,Ra.Column).End(3))
   Ra.Offset(,1).ClearContents
   For Each Ra In Ra
      S = Ra.Text
      I = InStr(S,"OT")
      If I > 0 Then
         For j = I - 1 To 1 Step -1
            If InStr("0123456789.",Mid(S,j,1)) = 0 Then Exit For
         Next
         X = Val(Mid(S,j + 1))
         If X > 0 Then Ra.Offset(,1) = X
      End If
   Next
End Sub


再问: 谢谢!高手啊!可以告诉我怎么应用到别的文档中吗?能稍稍解释下Set Ra = Range(Ra.Offset(1), Cells(Cells.Rows.Count, Ra.Column).End(3))以及之后的公式吗?
再答: 将代码复制到其它表格的宏里或同样用按钮代码也行,关键是如果数据列的标题 "Examples:"改变了,代码里要同样改变。
对照我发给你的文件好解释一些:
Set Ra = Range(Ra.Offset(1), Cells(Cells.Rows.Count, Ra.Column).End(3))‘使Ra代表A2:A15
Ra.Offset(, 1).ClearContents'清空B2:B15的数据
For Each Ra In Ra'遍历A2:A15各单元格
S = Ra.Text'将单元格文本赋给字符串变量S, 以方便处理
I = InStr(S, "OT")'查找OT在字符串中的位置
If I > 0 Then'如果字符串中有OT存在
For j = I - 1 To 1 Step -1'对字符串的字符从OT之前开始往前查找数字 小数点 空格直到遇到其它字符退出循环,以确定数字的开始位置
If InStr("0123456789.  ", Mid(S, j, 1)) = 0 Then Exit For
Next
X = Val(Mid(S, j + 1))'从OT前数字的开始位置取右边的字符再转换为数字得最终结果
If X > 0 Then Ra.Offset(, 1) = X'当结果大于0时将结果放入右边的单元格