Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
移除零和#x27;s位于一个数字字符串VBA的开头_Vba_Excel - Fatal编程技术网

移除零和#x27;s位于一个数字字符串VBA的开头

移除零和#x27;s位于一个数字字符串VBA的开头,vba,excel,Vba,Excel,我有一列数字,如果数字以零开头,我需要从列中的每个单元格中删除前导的零。试试看 with worksheets("Sheet1") with .columns(1) .numberformat = "General" .texttocolumns destination:=.cells(1), _ datatype:=xlFixedWidth, fieldinfo:=Array(0, 1) end wi

我有一列数字,如果数字以零开头,我需要从列中的每个单元格中删除前导的零。

试试看

with worksheets("Sheet1")
    with .columns(1)
        .numberformat = "General"
        .texttocolumns destination:=.cells(1), _
                       datatype:=xlFixedWidth, fieldinfo:=Array(0, 1)
    end with
end with
试试看


如果转换为数字对您来说不是一个可行的解决方案,那么此UDF将起作用:

Function StripLeadingZeros(MyString As String)
Dim X As Long
For X = 1 To Len(MyString)
    If Left(MyString, 1) = "0" Then
        MyString = Right(MyString, Len(MyString) - 1)
    Else
        Exit For
    End If
Next
StripLeadingZeros = MyString
End Function

如果转换为数字对您来说不是一个可行的解决方案,那么此UDF将起作用:

Function StripLeadingZeros(MyString As String)
Dim X As Long
For X = 1 To Len(MyString)
    If Left(MyString, 1) = "0" Then
        MyString = Right(MyString, Len(MyString) - 1)
    Else
        Exit For
    End If
Next
StripLeadingZeros = MyString
End Function

我相信您可以找到如何遍历每个单元格的方法,所以我不会在下面的代码示例中演示这一点。这样就行了。用需要处理的每个单元格替换A4

Dim My_Number As String
Dim i As Integer
My_Number = Range("A4")
For i = 1 To Len(My_Number) - 1
    If InStr(1, My_Number, "0") = 1 Then
        My_Number = Right(My_Number, Len(My_Number) - 1)
    Else
        Range("A4") = My_Number
        Exit For
    End If
Next

Instr正在寻找字符串第一个位置的零。如果找到一个零,那么下一行会将除第一个(零)之外的所有字符串写入单元格。

我相信您可以找到如何遍历每个单元格的方法,因此我不打算在下面的代码示例中演示这一点。这样就行了。用需要处理的每个单元格替换A4

Dim My_Number As String
Dim i As Integer
My_Number = Range("A4")
For i = 1 To Len(My_Number) - 1
    If InStr(1, My_Number, "0") = 1 Then
        My_Number = Right(My_Number, Len(My_Number) - 1)
    Else
        Range("A4") = My_Number
        Exit For
    End If
Next

Instr正在寻找字符串第一个位置的零。如果If找到一个零,则下一行会将除第一个(零)之外的所有字符串写入单元格。

将单元格格式化为数字而不是文本,Excel将为您执行此操作。您没有尝试类似于
如果是数字(activecell),则activecell.Value=cdbl(activecell.Value)
?将单元格格式化为数字而不是文本,Excel会帮你做到这一点。你没有尝试过类似于
如果是数字(activecell)那么activecell.Value=cdbl(activecell.Value)
?如果有多个前导零呢?嘿,我更新了上面的代码部分。实际上,您只需在字符串中循环并检查第一个字符是否为零。这大概有100种方法。丹就是这么做的?如果有超过1个前导零呢?嘿,我更新了上面的代码部分。实际上,您只需在字符串中循环并检查第一个字符是否为零。这大概有100种方法,丹就是这么做的?那么为什么你的首字母是0呢?@findwindow-谢谢你的关注。修正了上面的问题。在我的头顶上写下这句话;我一定是在白日梦中想着脚注。@findwindow-您只读了对的FieldInfo参数的一半描述。您错过了“当数据被分隔时,…”。这是一个xlFixedWidth“拆分”(实际上根本不是拆分),0表示拆分的固定宽度位置的起点。0和A的单个两元素数组仅表示一列;完全没有拆分。是的,我不太明白
xlFixedWidth
是什么意思。XD这个术语真的很糟糕,因为宽度对我来说意味着列宽,但它意味着列数?如果您只需在数组中用0表示,似乎
xlFixedWidth
是多余的?谢谢你的解释,为什么你的首字母是0?@findwindow-谢谢你的理解。修正了上面的问题。在我的头顶上写下这句话;我一定是在白日梦中想着脚注。@findwindow-您只读了对的FieldInfo参数的一半描述。您错过了“当数据被分隔时,…”。这是一个xlFixedWidth“拆分”(实际上根本不是拆分),0表示拆分的固定宽度位置的起点。0和A的单个两元素数组仅表示一列;完全没有拆分。是的,我不太明白
xlFixedWidth
是什么意思。XD这个术语真的很糟糕,因为宽度对我来说意味着列宽,但它意味着列数?如果您只需在数组中用0表示,似乎
xlFixedWidth
是多余的?谢谢你的解释