Excel格式与VBA
在我工作的地方,我们列出了一些我们发现有损坏的车辆。 这些损坏代码有几个变化,我想在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 – 04.09.1(2) 03.07.1(3) (some vehicles have multiple damages)
基本上任何数字过去的长度5将把任何数字在第六的位置进入括号,用逗号分隔。
我可以用任何其他语言来做到这一点,这只是所有我遇到的Excel问题。
我尝试的东西似乎并不重要,在我能够取得任何进展之前,我的代码已经出错了
Dim test test = Worksheets(“Sheet1”).Range(“A:A”).Value Worksheets(“Sheet2”).Range(“B:B”).Value=test
我试图做一个function,结果不pipe我怎么打电话都不工作。 如果我只能对这些数字进行基本的格式化,那么我很可能从那里得出结论。
谢谢你们可以给我的任何帮助
您可以使用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)
并将其复制下来。 完成!
如果你想在一次冲击中转换单元格并replace源代码,请使用以下代码:
Sub ConvertAll() Dim rng As Range For Each rng In Range("A1:A100") rng.Value = ConvertIt(rng) Next End Sub
轻轻testing:
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
回答你的问题:
您提供的代码不起作用有两个原因。
-
Range("A:A")
和Range("B:B")
都select整行,但test
variables一次只能保存一个单元值的内容。 如果您将代码限制在一个单元格中,则使用Range("A1").value
,例如,您编写的代码将起作用。 - 看起来你使用了不同的引号,这使得编译器将
"Sheet1"
,"A:A"
混淆在一起。 等等是variables。
将范围定义为一个单元格,并且replace了引号,则代码将Sheet1上的单元格A1的值移动到Sheet2上的单元格B1:
Sub testThis() Dim Test Test = Worksheets("Sheet1").Range("A1").value Worksheets("Sheet2").Range("B1").value = Test End Sub
如果您想要处理Sheet1上的整个A列并将这些值放到Sheet2的列B中,则可以使用一个循环,它只是在一系列值上重复一个动作。 要做到这一点,我已经定义了两个范围。 一个用于跟踪Sheet1列A上的单元格,另一个用于跟踪Sheet2列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