excel - InStr 在某些情况下找不到点
问题描述
我的字符串由前导点和数字组成(例如“..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)
完成了这项工作。
解决方案
推荐阅读
- vue.js - $vuetify.goTo 在 v-dialog 全屏模式下不起作用
- rasa - 翻译 NLU 模型中 RASA 实体提取的问题
- gulp - 已解决 - gulp : 为网站构建几个 dist,每个都有自己的自定义 js
- chart.js - Chart.js如何改变颜色的宽度
- bash - 如何将vim用作less -R?
- nativescript - tns 预览对意外令牌不起作用
- javascript - 命令行“node index.js”在 Windows 10 上无法正确输出,如何使其工作?
- typescript - 使用 webpack/TerserPlugin 在项目中配置 TypeScript 后,React Suspens/lazy 代码拆分被破坏
- reactjs - 如何在 React 中用 Jest 模拟 window.location.href?
- c# - 将 xml 发布到 .Net Core Web API