Vba 根据长度和前3个字符替换数字
我正在尝试替换包含客户端移动号码的范围内的号码。我想更改不是6位、7位、10位和11位数字的数字。我还想更改前3位不是“032”的10位数字。以下是我到目前为止得出的结论: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
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:谢谢,因为我