Подсчет знаков после запятой по 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