3

私は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行だけが必要です。私は本当にこのコードを編集しようとしましたが、私はそれを理解していません.誰かが私を助けてくれますか? 本当に感謝しています。

4

1 に答える 1

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 つの空白列を使用するようにコードを修正しました。

于 2012-09-04T13:29:25.173 に答える