Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.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
Vba 根据长度和前3个字符替换数字_Vba_Excel - Fatal编程技术网

Vba 根据长度和前3个字符替换数字

Vba 根据长度和前3个字符替换数字,vba,excel,Vba,Excel,我正在尝试替换包含客户端移动号码的范围内的号码。我想更改不是6位、7位、10位和11位数字的数字。我还想更改前3位不是“032”的10位数字。以下是我到目前为止得出的结论: Sub changetold() Dim rCel As Range Dim sTxt As String Dim first3numbers As String Dim lastrow, i, currentcell As Long Const MaxLength As Long

我正在尝试替换包含客户端移动号码的范围内的号码。我想更改不是6位、7位、10位和11位数字的数字。我还想更改前3位不是“032”的10位数字。以下是我到目前为止得出的结论:

Sub changetold()
    Dim rCel As Range
    Dim sTxt As String
    Dim first3numbers As String
    Dim lastrow, i, currentcell As Long

    Const MaxLength As Long = 11
    Const MinLength As Long = 6
    Const MidLength As Long = 7
    Const MaxmidLength As Long = 10

    first3numbers = "032"

    With ActiveSheet
        lastrow = .Cells(.Rows.count, "AC").End(xlUp).row
    End With

    currentcell = 12

    For i = 13 To lastrow
        currentcell = currentcell + 1
        sTxt = ActiveSheet.Range("CW" & currentcell).Value

        MsgBox (Len(sTxt))

        If Len(sTxt) <> MaxLength Or Len(sTxt) <> MinLength Or Len(sTxt) <> MidLength Or Len(sTxt) <> MaxmidLength Then
            sTxt = "101011"
        End If

        If Left(sTxt, 3) <> "032" And Len(sTxt) = MaxmidLength Then
            sTxt = "101011"
        End If
    Next i
End Sub
Sub changethell()
作为射程的Dim-rCel
将sTxt设置为字符串
将前3个数字设置为字符串
Dim lastrow,i,currentcell尽可能长
常量MaxLength,长度=11
Const MinLength As Long=6
长度为7的常数中间长度
Const MaxmidLength长=10
first3numbers=“032”
使用ActiveSheet
lastrow=.Cells(.Rows.count,“AC”).End(xlUp).row
以
currentcell=12
对于i=13至最后一行
currentcell=currentcell+1
sTxt=ActiveSheet.Range(“CW”和currentcell).Value
MsgBox(Len(sTxt))
如果Len(sTxt)MaxLength或Len(sTxt)MinLength或Len(sTxt)MidLength或Len(sTxt)MaxmidLength,则
sTxt=“101011”
如果结束
如果左(sTxt,3)“032”和Len(sTxt)=MaxmidLength,则
sTxt=“101011”
如果结束
接下来我
端接头
代码确实改变了单元格,但问题是它不准确。我想知道如何正确地执行此操作,如下图所示:

sTxt=ActiveSheet.Range(“CW”和currentcell).Value

没有发生任何事情,因为您正在将值存储在变量中,对其进行更改,但从未将其写回单元格

另外,不要使用太多的
Ifs
,而是使用
Select Case
。这会让你的生活更轻松:)

这就是你想要的吗?(未经测试

Sub changethell()
昏暗的最后一排一样长,我一样长
使用ActiveSheet
lastrow=.Cells(.Rows.Count,“AC”).End(xlUp).Row
对于i=13至最后一行
选择大小写长度(.Range(“CW”和i).Value)
案例6、7、11
案例10:如果左(.Range(“CW”)和i.Value,3)“032”,则.Range(“CW”和i.Value=101011
其他情况:。范围(“CW”&i)。值=101011
结束选择
接下来我
以
端接头
sTxt=ActiveSheet.Range(“CW”和currentcell).Value

没有发生任何事情,因为您正在将值存储在变量中,对其进行更改,但从未将其写回单元格

另外,不要使用太多的
Ifs
,而是使用
Select Case
。这会让你的生活更轻松:)

这就是你想要的吗?(未经测试

Sub changethell()
昏暗的最后一排一样长,我一样长
使用ActiveSheet
lastrow=.Cells(.Rows.Count,“AC”).End(xlUp).Row
对于i=13至最后一行
选择大小写长度(.Range(“CW”和i).Value)
案例6、7、11
案例10:如果左(.Range(“CW”)和i.Value,3)“032”,则.Range(“CW”和i.Value=101011
其他情况:。范围(“CW”&i)。值=101011
结束选择
接下来我
以
端接头

我想代码应该是这样的

Sub changetold()
    Dim sTxt As String
    Dim lastrow As Long, i As Long

    With ActiveSheet
        lastrow = .Cells(.Rows.Count, "AC").End(xlUp).Row
    End With

    For i = 13 To lastrow
        sTxt = Range("CW" & i)

        Select Case Len(sTxt)
        Case 6, 7, 11
        Case 10
            If Left(sTxt, 3) <> "032" Then Range("cw" & i) = "101011"
        Case Else
            Range("cw" & i) = "101011"
        End Select
    Next i
End Sub
Sub changethell()
将sTxt设置为字符串
昏暗的最后一排一样长,我一样长
使用ActiveSheet
lastrow=.Cells(.Rows.Count,“AC”).End(xlUp).Row
以
对于i=13至最后一行
sTxt=范围(“CW”和i)
选择案例长度(sTxt)
案例6、7、11
案例10
如果左(sTxt,3)“032”,则范围(“cw”和i)=“101011”
其他情况
范围(“cw”和i)=“101011”
结束选择
接下来我
端接头

我想代码应该是这样的

Sub changetold()
    Dim sTxt As String
    Dim lastrow As Long, i As Long

    With ActiveSheet
        lastrow = .Cells(.Rows.Count, "AC").End(xlUp).Row
    End With

    For i = 13 To lastrow
        sTxt = Range("CW" & i)

        Select Case Len(sTxt)
        Case 6, 7, 11
        Case 10
            If Left(sTxt, 3) <> "032" Then Range("cw" & i) = "101011"
        Case Else
            Range("cw" & i) = "101011"
        End Select
    Next i
End Sub
Sub changethell()
将sTxt设置为字符串
昏暗的最后一排一样长,我一样长
使用ActiveSheet
lastrow=.Cells(.Rows.Count,“AC”).End(xlUp).Row
以
对于i=13至最后一行
sTxt=范围(“CW”和i)
选择案例长度(sTxt)
案例6、7、11
案例10
如果左(sTxt,3)“032”,则范围(“cw”和i)=“101011”
其他情况
范围(“cw”和i)=“101011”
结束选择
接下来我
端接头

你有什么问题?你的问题在哪里?(1)“我想改变数字”并不能很好地描述你想要实现的目标。你需要更具体一些。你的问题,并添加你的代码实际做什么,你期望它做什么,如果有任何错误(哪里和哪些错误)。你可以阅读。(2) 旁注(不是解决方案):如果执行此操作,
Dim lastrow,i,currentcell As Long
只有最后一个变量是
Long
其他变量是
Variant
您需要为每个变量指定一种类型:
Dim lastrow As Long,i As Long,currentcell As Long
,如果这些变量是数字(而不是文本),第一个字符如何成为
“0”
?如果您有特定的单元格格式的数字,您可能需要考虑使用<代码>文本>代码>属性。您的问题是什么?你的问题在哪里?(1)“我想改变数字”并不能很好地描述你想要实现的目标。你需要更具体一些。你的问题,并添加你的代码实际做什么,你期望它做什么,如果有任何错误(哪里和哪些错误)。你可以阅读。(2) 旁注(不是解决方案):如果执行此操作,
Dim lastrow,i,currentcell As Long
只有最后一个变量是
Long
其他变量是
Variant
您需要为每个变量指定一种类型:
Dim lastrow As Long,i As Long,currentcell As Long
,如果这些变量是数字(而不是文本),第一个字符如何成为
“0”
?如果您有特定的单元格格式的数字,您可能需要考虑使用<代码>文本>代码>属性。@ SiddharthRout:谢谢。我错了。++
cse10
应该是
case10
。您还有许多不必要的代码,您可以将其删除:)。我已经把你的职位安排好了。如果您不喜欢,请随时回复it@SiddharthRout:谢谢,因为我