У меня есть строки, которые состоят из начальных точек, за которыми следует число (например, "..2" или ".... 4". Я хочу удалить все начальные точки и преобразовать строку в длинную переменную.
Итак, я написал функцию, которая находит ведущие точки в строках и удаляет их. По какой-то причине функция работает для строки типа "..2", но не работает для "... 3". Функция InStr
не найдет "." в "... 3".
Строки считываются из столбца на рабочем листе. Они не отформатированы каким-либо странным способом, я попытался просто ввести их вручную на новом листе без каких-либо изменений настроек форматирования по умолчанию, те же результаты.
Итак, я попробовал несколько вещей. Я считаю, что должна быть какая-то ошибка, связанная с кодировкой символов, но я не могу понять, как решить эту проблему.
Я попытался использовать рекурсивную функцию, используя InStr для удаления точек, а затем попытался использовать функцию разделения с помощью «.» в качестве разделителя, чтобы проверить мое предположение. Split
имеет ту же проблему, работает для "..2", но не будет работать для "... 3".
Когда я отлаживаю, распечатываю строки, которые я зачитываю, «... 3», кажется, форматируется иначе, чем «..2» или «.1». Я не знаю почему.
здесь вы можете увидеть разницу в форматировании
Sub Gruppieren()
'read out strings first
'then try to delete the dots
Dim strArr() As String
Dim lngArr() As Long
Dim lLastRow As Long
Dim i As Long
lLastRow = getFirstEmptyRow("A", Tabelle1.Index)
ReDim strArr(1 To lLastRow)
ReDim lngArr(1 To lLastRow)
For i = 1 To UBound(strArr)
strArr(i) = Worksheets(1).Cells(i, 1).Value
Debug.Print strArr(i)
strArr(i) = clearLeadingDots(strArr(i))
'strArr(i) = splitMeIfYouCan(strArr(i))
If IsNumeric(strArr(i)) = True Then
lngArr(i) = CLng((strArr(i)))
Debug.Print lngArr(i)
End If
Next i
End Sub
'Функции:
Function clearLeadingDots(myText As String) As String
Dim i As Long
i = InStr(myText, ".")
If i <> 0 Then
myText = Right(CStr(myText), Len(myText) - i)
clearLeadingDots = clearLeadingDots(CStr(myText))
Else
clearLeadingDots = CStr(myText)
Exit Function
End If
End Function
Function splitMeIfYouCan(myText As String) As String
Dim myArr() As String
Dim i As Long
myArr = Split(myText, ".")
splitMeIfYouCan = myArr(UBound(myArr))
End Function
Изменить: Ответ состоял в том, что три точки были автоматически преобразованы в многоточие, поиск и устранение Chr(133)
сделали свою работу.