VBA len функция не проходящая длина - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь захватить ячейку, проверить, есть ли в ней десятичные разряды, и удалить их, а затем поместить в ячейку указанный формат c в зависимости от количества символов в числе, функция len возвращает ноль и значение instr. функция работает, но при передаче переменной возвращает ноль. Спасибо всем, кто может помочь. В конце первой функции if я печатаю результаты трех переменных, которые не работают, в окно немедленного подтверждения, с помощью команды Debug.Print, пожалуйста, go для просмотра меню и активации окна непосредственного просмотра.

Function cnvtDta()
    ActiveSheet.Select  
    Data1 = Range("data").Value  
    Dim rslt As String  
    rslt = Data1  
     Set myrng = Range("data")  
     Dim wot, sowot  


   'Find decimal place in cell   
    dot = myrng.Find(".", myrng)  
     If dot = True Then 
   'if decimal place strip remainders and decimal point  
     Dim pos, res  

             pos = InStr(1, rslt, ".")  
             res = Left(rslt, pos)  

               sowot = Len(res)  


   End If  
   Debug.Print res
   Debug.Print sowot
   Debug.Print pos
  'Return specific formats to cell  
   'thank you kindly to anyone who can spare the time to genuinely help
  End Function  

1 Ответ

1 голос
/ 09 января 2020

Так что в основном есть пара частей к вашему вопросу.

  1. Проверьте, имеет ли значение десятичные дроби. Вот один из способов сделать это (на основе значений, а не строк)
Function DoesCellContainDecimals(inputRange As Range) As Boolean
    Dim tolerance As Double
    tolerance = 0.0001
    If Not IsNumeric(inputRange.Value2) Then
        'invalid argument
        DoesCellContainDecimals = False
        Exit Function
    End If
    If (Abs(Fix(inputRange.Value2) - inputRange.Value2) < tolerance) Then
        'value does not have meaningful decimals
        DoesCellContainDecimals = False
    Else
        'value has meaningful decimals
        DoesCellContainDecimals = True
    End If
End Function
Получить целую часть числа. Есть две функции. Аналогичное, но различное поведение с отрицательными числами (убедитесь, что значение является первым числом):
Int(6.5)  '6
Fix(6.5)  '6
Int(-6.5) '-7
Fix(-6.5) '-6
Форматирование числа. Либо включите его в строку, либо установите свойство Range.NumberFormat:
Format(6500000,"# ### ###") '6 500 000
Range("A1").NumberFormat = "# ### ##0" 'same effect as above but only when displaying in that cell.
...