Подсчет знаков после запятой по Excel VBA

В моем превосходстве есть разные типы десятичных чисел, и разные десятичные знаки тоже.

Например. 112,33, 112,356, 145,1, 25,01, 27,001

Мне нужно знать количество ячеек с двумя десятичными знаками, например, 25.01, которые должны быть одним из них. Мне нужен этот код для Excel VBA

3 ответа

Вы можете использовать технику VBA, как показано в следующем примере:

Dim digit As Integer
Dim num As Double
num = 123.456
digit = Len(CStr(num)) - InStr(CStr(num), ".")

где digit количество десятичных знаков

Относительно вашего первого образца:

digit = Len(CStr(112.33)) - InStr(CStr(112.33), ".")

Rgds,

Улучшение очень удобной функции, представленной Мэтью Хагеманном.

Эта версия;

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

  • Работает независимо от того, хранится ли число в ячейке как текст или как число

VBA:

Function CountDecimalPlaces(InputCell As Range) As Integer
'Counts the number of decimal places in a cell
Dim StringConvert As String

If InputCell.Cells.Count > 1 Then
    CountDecimalPlaces = 0
    Exit Function
End If

StringConvert = InputCell.Value

If InStr(1, StringConvert, ".") = 0 Then
    CountDecimalPlaces = 0
Else
    CountDecimalPlaces = Len(StringConvert) - InStr(1, StringConvert, ".")
End If

End Function
Function GetNumberDecimalPlaces(theCell As Range) As Integer

Dim periodPlace as integer, stringLength as integer

periodPlace = InStr(1, theCell.Text, ".")

If periodPlace = 0 Then
    GetNumberDecimalPlaces = 0
Else
    stringLength = Len(theCell.Text)

    GetNumberDecimalPlaces = stringLength - periodPlace
End If

End Function

Ответ Алекса может быть расширен для случая, когда десятичный символ (точка или запятая) неизвестен. Это может быть так, если числа взяты из листа Excel и региональные настройки заранее неизвестны. Другим расширением является обработка (целых) чисел без десятичных дробей.

Dim iDigits As Integer
Dim vNumber As Variant

vNumber = Excel.Application.ActiveCell.value

If VBA.IsNumeric(vNumber) And Not VBA.IsEmpty(vNumber) Then
    iDigits = Len(vNumber) - Len(VBA.Fix(vNumber))

    ' correct for decimal character if iDigits > 0
    iDigits = IIf(iDigits > 0, iDigits - 1, 0)
Else
    iDigits = 0
End If
Другие вопросы по тегам