需要使用Macro连接不同数量的单元格

时间:2009-09-15 19:41:38

标签: concatenation excel excel-vba vba

我需要根据前一个单元格中的变量连接一列单元格。这将继续,直到指定的变量发生变化。例如:

  A B C D  E
1 x     @1 @1+@2+@3
2 x     @2
3 x     @3
4 y     %1 %1+%2+%3
5 y     %2
6 y     %3
etc.

我需要宏来查看A1,如果是x,则在E1中开始连接字符串。然后移动到A2,如果是x,则将D2添加到E1中的连接值,然后移动到A3,如果是x,则将D3中的值添加到E1中的连接值,等等。一旦它到达A列中的新变量(y)这个过程重新开始。这是可能吗?非常感谢您的帮助!!

3 个答案:

答案 0 :(得分:2)

这是一些快速而肮脏的代码,但它起作用:

Dim i As Integer
Dim j As Integer
i = 1
j = 1

Dim initialValue As String

initialValue = Cells(i, 1).Value

Do While Cells(i, 1).Value <> ""
    Cells(j, 5).Value = ""
    Do While Cells(i, 1).Value = initialValue
        Cells(j, 5).Value = Cells(j, 5).Value & Cells(i, 4).Value
        i = i + 1
    Loop

   initialValue = Cells(i, 1).Value
   j = j + 1
Loop

它假定活动工作表是您的列。并且列号是硬编码的,您从第1行开始。

答案 1 :(得分:0)

这是一个公式,粘贴到E2并复制下来,这将解决您的问题。它不会整齐地将你的答案放入E1,E4等,但会在列中向下级联。

你可以完全按照你在VBA中所做的那样。

公式:

=IF(A2<>A1,D2,E1&D2)

答案 2 :(得分:0)

试试这个:

Dim row As Integer 
Dim col As Integer 
Dim working_row As Integer 
Dim rowVal As String, myStr As String 

rowVal = ""
row = 1
col = 4
While Cells(row, 1).Value <> ""
    If Cells(row, 1).Value <> rowVal Then
        myStr = ""
        working_row = row
        rowVal = Cells(row, 1).Value
    End If
    myStr = myStr & CStr(Cells(row, col).Value)
    Cells(working_row, col + 1).Value = myStr
    row = row + 1
Wend