在excel中连接单元格

时间:2013-09-08 18:28:12

标签: excel-vba vba excel

我有两列数据如下:

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

VBA中是否存在一个简单的循环,使列C的连接值为:

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

4 个答案:

答案 0 :(得分: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,因此我们需要在3列上引用B(即单元格( B3)。否则,modulo会准确返回我们想要的内容(12)。

列数: 这更简单:我们切换行的每个3rd行。所以当(Cells(BCnt, 3).Row) Mod 3 = 0时,我们递增列A的指针。当然,当我们到达4th行时,我们需要返回1st行。

我希望这会有所帮助!!

答案 1 :(得分:1)

我希望尽可能避免使用VBA,因此请给出如下数据设置:

tigeravatar formula solution for user2759430

单元格C1中的公式并向下复制:

=IF(ROW(A1)>COUNTA(A:B),"",INDEX(A:B,MOD(ROW(A1)-1,COUNTA(A:A))+1,1+(ROW(A1)>COUNTA(A:A))))

修改

作为替代解释,Ioannis指出,给出了这样的数据设置:

tigeravatar formula solution for user2759430 v2

单元格C1中的公式并向下复制:

=IF(ROW(A1)>COUNTA(A:A)*COUNTA(B:B),"",INDEX(A:A,INT((ROW(A1)-1)/COUNTA(B:B))+1)&INDEX(B:B,1+MOD(ROW(A1)-1,COUNTA(B:B))))

答案 2 :(得分: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

这是未经测试的,但为您提供了去哪里的方向..

答案 3 :(得分: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列实际上是什么;)