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 

回答你的问题:

您提供的代码不起作用有两个原因。

  1. Range("A:A")Range("B:B")都select整行,但testvariables一次只能保存一个单元值的内容。 如果您将代码限制在一个单元格中,则使用Range("A1").value ,例如,您编写的代码将起作用。
  2. 看起来你使用了不同的引号,这使得编译器将"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