【问题标题】:Need to concatenate varying number of cells using Macro需要使用宏连接不同数量的单元格
【发布时间】:2009-09-15 19:41:37
【问题描述】:
我需要根据前一个单元格中的变量连接一列单元格。这将一直持续到指定的变量发生变化。例如:
A B C D E
1 x @1 @1+@2+@3
2×@2
3 x @3
4 年 %1 %1+%2+%3
5 年 %2
6 年 %3
等等
我需要宏来查看 A1,如果它是 x,则在 E1 中开始连接字符串。然后移动到 A2,如果它是 x,则将 D2 添加到 E1 中的连接值,然后移动到 A3,如果它是 x,则将 D3 中的值添加到 E1 中的连接值,等等。一旦它在 A 列中遇到一个新变量(y ) 过程重新开始。这是可能吗?非常感谢您的帮助!!
【问题讨论】:
标签:
concatenation
excel
vba
【解决方案1】:
这是一些简单粗暴的代码,但它可以运行:
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 行开始。
【解决方案2】:
这是一个公式,粘贴到 E2 并复制下来,可以解决您的问题。它不会将您的答案整齐地放入 E1、E4 等,但会在列中向下排列。
你可以在 VBA 中做你想做的事。
公式:
=IF(A2<>A1,D2,E1&D2)
【解决方案3】:
试试这个:
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