Excel VBA - как идентифицировать ячейки с научной нотацией - PullRequest
0 голосов
/ 05 июня 2018

Я искал 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

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Что-то вроде:

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

Excel иногда переключается на научную нотацию без изменения формата номера, если число слишком длинное, чтобы соответствовать ширине ячейки.

Если вам нужно только искать ячейки, отформатированные как научные, посмотрите на:

cell.NumberFormat
0 голосов
/ 05 июня 2018

Это будет работать для ОДНОЙ ячейки и возвратит msgbox, если диапазон был отформатирован в научную запись.

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 для научного формата и оставит комментарий в ячейке вКолумб B, если это научно.Вам нужно будет изменить ваши диапазоны и сместить уравнение по мере необходимости.При наличии кода вы можете отфильтровать столбец 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

Я бы предложил изменить диапазон до последнего ряда, чтобы он был динамическим (если только вам не нужно использовать это один раз, тогда статический диапазон в порядке.)

0 голосов
/ 05 июня 2018

Я подозреваю, что вы могли использовать тег в вашем вопросе об ошибке.Если вы просто пытаетесь с первого взгляда определить, какие ячейки являются научными обозначениями, вы можете ...

  1. Искать ячейки с буквой "Е" в середине, например 123E+00(см. ниже).

  2. Выделите ячейку и проверьте ее формат, нажав Ctrl + 1 , чтобы открыть Числовой формат dialo, g, где вы можете видеть, выбрано ли Scientific.


Пример:

В приведенном ниже примере есть комбинация отформатированных ячееккак Number как Scientific.Я выделяю ячейки, отформатированные как Scientific Notation , чтобы вы могли увидеть разницу.

img


Дополнительная информация:

img

...