用VBA实现Excel格式
在我工作的地方,我们保存着一份我们发现有损坏的车辆的清单。这些损坏代码有几个变体,我想在excel中设置一个VBA脚本,以自动更改单元格内容的正确格式,但我并不真正使用VBA脚本,excel数据对象让我感到困惑 下面是我想要的几个例子用VBA实现Excel格式,vba,excel,formatting,Vba,Excel,Formatting,在我工作的地方,我们保存着一份我们发现有损坏的车辆的清单。这些损坏代码有几个变体,我想在excel中设置一个VBA脚本,以自动更改单元格内容的正确格式,但我并不真正使用VBA脚本,excel数据对象让我感到困惑 下面是我想要的几个例子 06071 – VBA Function – 06.07.1 031211 – VBA Function- 03.12.1(1) 0409237-VBA Function – 04.09.2(3,7) 040912 030713 –VBA Function – 0
06071 – VBA Function – 06.07.1
031211 – VBA Function- 03.12.1(1)
0409237-VBA Function – 04.09.2(3,7)
040912 030713 –VBA Function – 04.09.1(2) 03.07.1(3) (some vehicles have multiple damages)
基本上,长度超过5的任何数字都会将第6位之后的任何数字放入括号中,用逗号分隔
我可以用任何其他语言来做这件事,只是用我遇到的一个又一个问题的所有随机Excel资料
我尝试什么似乎无关紧要,我的代码在我过去取得任何进展之前就出现了漏洞
Dim test
test = Worksheets(“Sheet1”).Range(“A:A”).Value
Worksheets(“Sheet2”).Range(“B:B”).Value=test
我试图创建一个函数,但不管我如何调用它,它最终都无法工作。如果我能对这些数字进行基本的格式化,我很可能会从中找到答案
感谢你们能给我的任何帮助你们可以用UDF(用户定义函数)实现这一点:在VBA的新模块中放置以下代码:
Function ConvertIt(rng As Range) As String
Dim varStr As Variant
Dim strSource As String, strResult As String
Dim i As Integer
For Each varStr In Split(Trim(rng.Value), " ")
strSource = CStr(varStr)
strResult = strResult & _
Mid(strSource, 1, 2) & "." & _
Mid(strSource, 3, 2) & "." & _
Mid(strSource, 5, 1)
If Len(strSource) > 5 Then
strResult = strResult & "("
For i = 6 To Len(strSource)
strResult = strResult & Mid(strSource, i, 1) & ","
Next i
strResult = Left(strResult, Len(strResult) - 1) & ")"
End If
strResult = strResult & " "
Next
ConvertIt = Left(strResult, Len(strResult) - 1)
End Function
假设您的数据在工作表的A列中,将此公式放在B2:=ConvertIt(A2)
中,然后将其复制下来。完成了
如果要一次性转换单元格并替换源,请使用以下代码:
Sub ConvertAll()
Dim rng As Range
For Each rng In Range("A1:A100")
rng.Value = ConvertIt(rng)
Next
End Sub
可以使用UDF(用户定义函数)执行此操作:将以下代码放置在VBA中的新模块中:
Function ConvertIt(rng As Range) As String
Dim varStr As Variant
Dim strSource As String, strResult As String
Dim i As Integer
For Each varStr In Split(Trim(rng.Value), " ")
strSource = CStr(varStr)
strResult = strResult & _
Mid(strSource, 1, 2) & "." & _
Mid(strSource, 3, 2) & "." & _
Mid(strSource, 5, 1)
If Len(strSource) > 5 Then
strResult = strResult & "("
For i = 6 To Len(strSource)
strResult = strResult & Mid(strSource, i, 1) & ","
Next i
strResult = Left(strResult, Len(strResult) - 1) & ")"
End If
strResult = strResult & " "
Next
ConvertIt = Left(strResult, Len(strResult) - 1)
End Function
假设您的数据在工作表的A列中,将此公式放在B2:=ConvertIt(A2)
中,然后将其复制下来。完成了
如果要一次性转换单元格并替换源,请使用以下代码:
Sub ConvertAll()
Dim rng As Range
For Each rng In Range("A1:A100")
rng.Value = ConvertIt(rng)
Next
End Sub
轻度测试:
Function FormatStuff(v)
Dim i As Long, c As String, v2 As String, num As String
Dim num2 As String, x As Long
v2 = v
v = v & " "
For i = 1 To Len(v)
c = Mid(v, i, 1)
If c Like "#" Then
num = num & c
Else
If num <> "" And Len(num) >= 5 Then
num2 = Left(num, 2) & "." & Mid(num, 3, 2) & _
"." & Mid(num, 5,1)
If Len(num) > 5 Then
num2 = num2 & "("
For x = 6 To Len(num)
num2 = num2 & IIf(x > 6, ",", "") & Mid(num, x, 1)
Next x
num2 = num2 & ")"
End If
v2 = Replace(v2, num, num2)
End If
num = ""
End If
Next i
FormatStuff = v2
End Function
函数格式(v)
Dim i为长,c为字符串,v2为字符串,num为字符串
尺寸num2为字符串,x为长度
v2=v
v=v&“
对于i=1到Len(v)
c=中间(v,i,1)
如果c喜欢“#”,那么
num=num&c
其他的
如果num“”和Len(num)>=5,则
num2=左(num,2)&“&Mid(num,3,2)&_
“&中间(数字,5,1)
如果Len(num)>5,则
num2=num2&“
对于x=6到Len(num)
num2=num2&IIf(x>6,“,”)&Mid(num,x,1)
下一个x
num2=num2&“.”
如果结束
v2=替换(v2,num,num2)
如果结束
num=“”
如果结束
接下来我
FormatStuff=v2
端函数
轻度测试:
Function FormatStuff(v)
Dim i As Long, c As String, v2 As String, num As String
Dim num2 As String, x As Long
v2 = v
v = v & " "
For i = 1 To Len(v)
c = Mid(v, i, 1)
If c Like "#" Then
num = num & c
Else
If num <> "" And Len(num) >= 5 Then
num2 = Left(num, 2) & "." & Mid(num, 3, 2) & _
"." & Mid(num, 5,1)
If Len(num) > 5 Then
num2 = num2 & "("
For x = 6 To Len(num)
num2 = num2 & IIf(x > 6, ",", "") & Mid(num, x, 1)
Next x
num2 = num2 & ")"
End If
v2 = Replace(v2, num, num2)
End If
num = ""
End If
Next i
FormatStuff = v2
End Function
函数格式(v)
Dim i为长,c为字符串,v2为字符串,num为字符串
尺寸num2为字符串,x为长度
v2=v
v=v&“
对于i=1到Len(v)
c=中间(v,i,1)
如果c喜欢“#”,那么
num=num&c
其他的
如果num“”和Len(num)>=5,则
num2=左(num,2)&“&Mid(num,3,2)&_
“&中间(数字,5,1)
如果Len(num)>5,则
num2=num2&“
对于x=6到Len(num)
num2=num2&IIf(x>6,“,”)&Mid(num,x,1)
下一个x
num2=num2&“.”
如果结束
v2=替换(v2,num,num2)
如果结束
num=“”
如果结束
接下来我
FormatStuff=v2
端函数
要回答您未询问的问题:
您提供的代码不起作用有两个原因
Range(“A:A”)
和Range(“B:B”)
都选择整行,但是
test
变量一次只能保存一个单元格值的内容。
如果将代码限制为一个单元格,请使用
范围(“A1”).value
,例如,您编写的代码将
工作李>
“Sheet1”
,“A:A”
。等等都是变量Sub testThis()
Dim Test
Test = Worksheets("Sheet1").Range("A1").value
Worksheets("Sheet2").Range("B1").value = Test
End Sub
如果您想在Sheet1上计算整个A列,并将这些值放入Sheet2上的B列,您可以使用循环,它只是在一系列值上重复一个操作。为此,我定义了两个范围。一个用于跟踪表1 A列上的单元格,另一个用于跟踪表2 B列上的单元格。我假设A列中的数据没有中断:
Sub testThat()
Dim CellinColumnA As Range
Set CellinColumnA = Worksheets("Sheet1").Range("A1")
Dim CellinColumnB As Range
Set CellinColumnB = Worksheets("Sheet2").Range("B1")
Do While CellinColumnA.value <> ""
CellinColumnB.value = CellinColumnA.value
Set CellinColumnA = CellinColumnA.Offset(1, 0)
Set CellinColumnB = CellinColumnB.Offset(1, 0)
Loop
End Sub
subtestthat()
暗淡的CellinColumnA As系列
设置CellinColumnA=工作表(“表1”)。范围(“A1”)
Dim CellinColumnB As范围
设置CellinColumnB=工作表(“表2”)。范围(“B1”)
当CellinColumnA.value“”时执行此操作
CellinColumnB.value=CellinColumnA.value
设置CellinColumnA=CellinColumnA.Offset(1,0)
设置CellinColumnB=CellinColumnB.Offset(1,0)
环
端接头
要回答您未询问的问题:
您提供的代码不起作用有两个原因
Range(“A:A”)
和Range(“B:B”)
都选择整行,但是
test
变量一次只能保存一个单元格值的内容。
如果将代码限制为一个单元格,请使用
范围(“A1”).value
,例如,您编写的代码将
工作李>
“Sheet1”
,“A:A”
。等等都是变量Sub testThis()
Dim Test
Test = Worksheets("Sheet1").Range("A1").value
Worksheets("Sheet2").Range("B1").value = Test
End Sub
如果您想在Sheet1上计算整个A列,并将这些值放入Sheet2上的B列,您可以使用循环,它只是在一系列值上重复一个操作。为此,我定义了两个范围。一个用来跟踪表1列A上的单元格,另一个用来跟踪表2列B上的单元格。我假设我