Excel VBA-如何用科学计数法识别细胞

Excel VBA- how to identify cells with scientific notation

我搜索了 SO,但未能找到解决方案——如何通过 Excel vba 识别列中采用科学记数法的单元格?

这是我尝试使用科学记数法通过自动筛选行进行隔离的代码...

Private Sub cmdMoveScientificNotation_Click()

Dim objExcel As Excel.Application
Dim objWB As Excel.Workbook
Dim objWBtoAdd As Excel.Workbook
Dim newWS As Excel.Worksheet
Dim objWS As Excel.Worksheet
Dim i As Long
Dim Lrow As Long
Dim strSearch As String
Dim myRange As Range
Dim Cell As Range


Set objExcel = New Excel.Application

objExcel.Visible = True

Set objWB = Workbooks.Open("C:\TEST\Drop\Bank.xlsx", , False)
Set objWBtoAdd = Workbooks.Add
Set newWS = objWBtoAdd.ActiveSheet

Set objWS = objWB.ActiveSheet

    With objWS

        Lrow = .Range("A" & .Rows.Count).End(xlUp).Row
        myRange = .Range("A1:V" & Lrow)

            For Each Cell In myRange
                If (Cell.NumberFormat = "0.00E+00") Then
                .AutoFilter Field:=2, Criteria1:=strSearch
                .SpecialCells(xlTypeVisible).EntireRow.Copy
                End If

            Next Cell


    End With

newWS.PasteSpecial


End Sub

我怀疑您可能在问题错误中使用了 标签。如果您只是想一眼看出哪些单元格是科学记数法,您可以...

  1. 寻找中间有 "E" 的单元格,例如 123E+00(见下文)。

  2. 突出显示单元格并检查其格式,方法是按 Ctrl+1 打开 Number Format dialog,g 在这里你可以看到是否选择了 Scientific.


示例:

在下面的示例中,混合了格式为 Number[ 的单元格=57=]Scientific。我突出显示格式为 Scientific Notation 的单元格,以便您可以看到差异。


更多信息:


编辑:

我仍然不确定这个目标的目标是什么,但如果目标是确定哪些单元格当前具有 显示 的值,那么这里有一个替代解决方案.

例如,在某些情况下,当列的大小被调整为太窄而无法显示整个(标准记数法)数字时,单元格将自动格式化(自我缩写)为科学记数法。

在VBA中,单元格的.Text属性总是returns显示"formatted"值(如与 .Value 属性 相反 returns 实际 "raw" 基础值)。

因此,像这样的函数可用于使用科学计数法识别当前显示的单元格:

Function displayedAsScientific(c As Range) As Boolean
  Application.Volatile
  displayedAsScientific = IsNumeric(c.Value) And InStr(c.Text, "E") > 0
End Function

这张图片可能有助于也可能不会证明:

类似于:

If IsNumeric(cell.Value) And cell.text like "*E*" Then

Excel 如果数字太长不适合单元格的宽度,有时会在不更改数字格式的情况下切换为科学记数法。

如果您只需要查找已格式化为科学格式的单元格,请查看:

cell.NumberFormat

如果范围已格式化为科学记数法,这将适用于一个单元格和 return 一个消息框。

Sub BillNye
Dim MyRange As Range
Set MyRange = Range("A1")

If (MyRange.NumberFormat = "0.00E+00") Then
MsgBox "Scientific"
End If
End Sub

这将扫描范围 A1:A10 以获取科学格式,并 post 在 columb B 的单元格中添加评论(如果是科学格式)。您将需要修改您的范围并根据需要抵消方程式。正如代码所示,您可以过滤 "Scientific" 的 B 列以仅查看科学格式的值。

Sub BillNye()

Dim MyRange As Range
Set MyRange = Range("A1:A10")
Dim Cell As Range

For Each Cell In MyRange
    If (Cell.NumberFormat = "0.00E+00") Then
    Cell.Offset(, 1) = "Scientific"
    End If
Next Cell

End Sub

我建议将最后一行的范围修改为动态范围(除非您只需要使用一次,否则静态范围就可以了。)