我对VBA编码真的很陌生。
我遇到的问题是:
B60,D60,F60,H60(等)单元格的格式不同:x,y,z (x,y和z可以是数字0-10) 我想把它拼接成它:
B60 = x
B61 = y
B62 = z
D60 = x2
D61 = y2
D62 = z2
等
我找到了这段代码:
Dim objRegex
Dim Z
Dim Y
Dim lngRow As Long
Dim lngCnt As Long
Dim tempArr() As String
Dim strArr
Set objRegex = CreateObject("vbscript.regexp")
objRegex.Pattern = "^\s+(.+?)$"
'Define the range to be analysed
Z = Range([a1], Cells(Rows.Count, "b").End(xlUp)).Value2
ReDim Y(1 To 2, 1 To 1000)
For lngRow = 1 To UBound(Z, 1)
'Split each string by ","
tempArr = Split(Z(lngRow, 2), ",")
For Each strArr In tempArr
lngCnt = lngCnt + 1
'Add another 1000 records to resorted array every 1000 records
If lngCnt Mod 1000 = 0 Then ReDim Preserve Y(1 To 2, 1 To lngCnt + 1000)
Y(1, lngCnt) = Z(lngRow, 1)
Y(2, lngCnt) = objRegex.Replace(strArr, "$1")
Next
Next lngRow
'Dump the re-ordered range to columns C:D
[a1].Resize(lngCnt, 2).Value2 = Application.Transpose(Y)
但这对我来说并不适用。我只需要第60行来做这件事。我真的尝试编辑这段代码,但我不明白其中任何一个......有人可以帮帮我吗?真的很感激。
答案 0 :(得分:3)
这将为您解决问题。仅适用于第60行,并且不会覆盖现有值,因此您可以检查准确性。仅适用于每个单元格中3个以逗号分隔的值。
'Required declaration for the arrays to be 0-based in VBA.
Option Base 0
'Routine to split out the values and place them vertically under the original cell.
Sub SplitItOut()
'Variable to hold the contents of the cell in question.
Dim contents
'Column number of the column to start searching for data in.
Dim startColumn As Integer
'Counter variable used to keep track of the current column.
Dim columnCounter As Integer
'Array to store the comma-separated values in, after they have been separated from their commas.
Dim numArray() As String
Dim i As Integer
columnCounter = 0
'Starting column is 2 which is "B".
startColumn = 2
'Read in the initial contents of "B60". Cells function is using (row 60, column 2) style notation.
contents = Cells(60, startColumn).Value
'Keep looping until there is nothing but an empty string in the contents variable.
Do While contents <> ""
'Split out the numbers in the cell and store them in an array.
numArray = Split(contents, ",", -1)
'Loop through the 3 entries in the array.
For i = 0 To 2
'Place each entry in successive rows below the original cell.
'The Trim function is used to remove any potential extra spaces from the number.
Cells(61 + i, startColumn + columnCounter).Value = Trim(numArray(i))
Next
'Move to the next column.
columnCounter = columnCounter + 1
'Read in its contents.
contents = Cells(60, startColumn + columnCounter).Value
'If the contents are empty, move to the next column.
If contents = "" Then
columnCounter = columnCounter + 1
End If
'If the next column is also empty, the loop will exit, otherwise it will continue with the new contents of the current column.
contents = Cells(60, startColumn + columnCounter).Value
Loop
End Sub
如果每个单元格中包含不同数量的逗号分隔值,则需要更改该行:
For i = 0 To 2
到
For i = 0 to Ubound(numArray)
修改强>
修复了在每列数据之间使用1个空白列的代码。