次のように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;
等?
これを達成するには、モジュロ演算を使用します。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 の番号:
(最初の行から開始して) 各行の はmodulo
、3
この0,1,2
ように永遠にリサイクルされます。行番号が の倍数である3
場合は常に がmodulo
返されるため、列(セル ( ) など)を0
参照する必要があります。3
B
B3
modulo
1
2
列 A の数値:
これは簡単です: 行ごとに3rd
行を切り替えます.. の場合(Cells(BCnt, 3).Row) Mod 3 = 0
、列のポインターをインクリメントしますA
。もちろん、列に到達し4th
たら、列に戻る必要があり1st
ます。
これが役立つことを願っています!!
次のようなことはできませんか。
Dim i,j AS int
For i = 1 to 3
For j = 1 to 6
NewVal = C(j):A(i)
Next j
Next i
これはテストされていませんが、どこに行くべきかを教えてくれます..
以下よりも簡単に見ることはできません
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 が実際に何であるかを理解できるようになります;)