-1

次のように2列のデータがあります。

A1: A; A2: B; A3: C and B1: 1; B2:2; B3:3

C連結された値を次のように列に持つ単純なループが VBA にありますか。

C1: A1; C2: A2; C3: A3; C4: B1; C5: B2; C6: B3;等?

4

4 に答える 4

1

これを達成するには、モジュロ演算を使用します。C以下のサブルーチンは、入力する必要がある列の最後の行が次のとおりであることを前提としています (テスト用lLastRowに設定しました)。=25

Sub test()

    Dim lLastRow As Long, ACnt As Long, BCnt As Long
    ACnt = 1

    ' Last row of column C that needs to be filled with Data
    lLastRow = 25

    For BCnt = 1 To lLastRow
        ' Use modulo arithmetic to point to the right cell in column B
        Cells(BCnt, 3) = Cells(ACnt, 1) & IIf(BCnt Mod 3 <> 0, BCnt Mod 3, 3)
        ' We should increment column A every three rows
        ACnt = IIf((Cells(BCnt, 3).Row) Mod 3 = 0, ACnt + 1, ACnt)
        ' Reset column A pointer when we go beyond 3
        ACnt = IIf(ACnt = 4, 1, ACnt)
    Next BCnt

End Sub

列 B の番号: (最初の行から開始して) 各行の はmodulo3この0,1,2ように永遠にリサイクルされます。行番号が の倍数である3場合は常に がmodulo返されるため、列(セル ( ) など)を0参照する必要があります。3BB3modulo12

列 A の数値: これは簡単です: 行ごとに3rd行を切り替えます.. の場合(Cells(BCnt, 3).Row) Mod 3 = 0、列のポインターをインクリメントしますA。もちろん、列に到達し4thたら、列に戻る必要があり1stます。

これが役立つことを願っています!!

于 2013-09-08T20:15:05.403 に答える
0

次のようなことはできませんか。

Dim i,j AS int
For i = 1 to 3
 For j = 1 to 6
  NewVal = C(j):A(i)
 Next j
Next i

これはテストされていませんが、どこに行くべきかを教えてくれます..

于 2013-09-08T18:34:38.513 に答える
0

以下よりも簡単に見ることはできません

Sub concat()

Dim i As Integer

    With ActiveSheet
        For i = 1 To .UsedRange.Rows.Count
            .Cells(i, 3) = .Cells(i, 1) & .Cells(i, 2)
        Next i
    End With
End Sub

または多分そこにある:

Sub concat2()

    With ActiveSheet
        .Range("C1") = "=CONCATENATE(RC[-2],RC[-1])"
        .Range("C1").AutoFill Destination:=.Range("C1:C" & .UsedRange.Rows.Count)
    End With

End Sub

これにより、vba 以外のユーザーも列 C が実際に何であるかを理解できるようになります;)

于 2013-09-09T13:30:06.340 に答える