Excel复杂的多列和多行连接使用vba

我正在为一家在线商店创build一个充满产品的电子表格,我真的需要一些帮助。

我有一个父母产品与几个儿童产品(认为不同大小和颜色的T恤)。

为了简单起见,我们可以使用两种颜色(红色和蓝色)和两种尺寸(小和大) – 这可以给出4种可能的不同产品组合(即小红,小蓝,大红和大蓝)

这些数据在我的工作表中列出,如下所示:

sku colour size price t-shirt-rs red small 0 t-shirt-rl red large 2 t-shirt-bs blue small 0 t-shirt-bl blue large 2 

现在; 这里是棘手的部分 – 在父产品行我需要合并所有上述数据到一个单元格,如下所示:

 "t-shirt-rs[red#small[0;t-shirt-rl[red#large[2;t-shirt-bs[blue#small[0;t-shirt-bl[blue#large[2" 

“[”分隔每个新的子产品名称(SKU)和它们的选项,“#”分隔子产品选项,然后还有一个“[”分隔价格调整,然后是“;” 每个儿童产品之间

上面是否有道理?

我必须上传的第一个父母产品有4个选项(尺寸,颜色,主题和材料),每个选项最多有9个选项(4种尺寸,9种颜色,6种图案和2种材料)。 我想我正在(4x9x6x2 =)432个儿童产品,这将使一个非常长的手动连接工作。

我可以做一个简单的= A2&“[”&B2&“#”&C2 …..在我需要的单元格中,但是我担心这会花费很长时间。

我希望能够像上面那样列出儿童产品(大量复制和粘贴:o),然后使用vba合并到单个单元格中并添加['s,#'和's在所有正确的地方。

我想像这样的东西:

 with the first row (add " symbol?) & 1st cell & "[" & 2nd cell & "#" & 3rd cell & "#" & 4th cell ..... move down one row same as above keep going until I run out of child products?? add final " symbol 

我是VBA新手,所以不知道从哪里开始恐怕。 任何人都可以请指出我在正确的方向吗?

谢谢,艾伦

继评论之后,我会这样做:

在单元格E2中:

 = A2 & "[" & B2 & "#" & C2 & "#" & D2 

在单元格F2中:

 = F1 & E2 

(这个假设F1是空的)

然后将E2F2向下拖动以获取数据的长度。 您的最终值将是最后一行F cell的值。

希望是有道理的。

更新:

现在,你知道你的最终值是F列中的最后一个单元格,但是你需要"围绕它,所以在你想要最终解决scheme的单元格中,input这个公式:

 ="""" & OFFSET(F2,COUNTA(F2:F100000)-1,0) & """" 

这将find列F中的最后一个值,并用所需的引号括起来。

尝试类似的东西。 我评论它在做什么。

  'Children either refers to a range or a 2-d array Function GetDescriptor(children) As String Dim descriptor As String Dim i As Long Dim arr 'query if a range If TypeOf children Is Range Then 'a) single cell range returns a scalar and b) doesn't make sense here anyway If children.Areas(1).Count = 1 Then Exit Function 'load the data into an array (quicker than looping through cells) arr = children.Value End If 'loop through the data For i = LBound(arr, 1) To UBound(arr, 1) 'join the row's data together as specified descriptor = descriptor & _ arr(i, LBound(arr, 2)) & "[" & _ arr(i, LBound(arr, 2) + 1) & "#" & _ arr(i, LBound(arr, 2) + 2) & "[" & _ arr(i, LBound(arr, 2) + 3) & _ IIf(i < UBound(arr, 1), ";", "") Next i 'return wrapped in " GetDescriptor = """" & descriptor & """" End Function 

你需要遍历每一行中的每一列。 每列都需要以不同的方式处理,因为每个列都需要不同的分隔符。 下面的代码应该让你开始。 您需要研究函数,以便您可以实际返回值以及返回上次使用的行的函数。 这是相当硬编码,但它应该让你开始。

 Sub myConcat() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets("Sheet1") ' change to appropriate sheet Dim col As Long ' keeps track of what column we're on Dim row As Long ' keeps track of what row we're on Dim str As String 'stores string as we build it across the columns Dim finalstring As String ' stores string as we build it across rows; this will be our final return value For row = 2 To 5 'change 5 to last row that needs processed For col = 1 To 4 ' number of colums with data Select Case col Case 1 str = Cells(row, col).Value Case 2 str = str & "[" & Cells(row, col).Value Case 3 str = str & "#" & Cells(row, col).Value Case 4 str = str & "[" & Cells(row, col).Value & ";" End Select 'Debug.Print str Next col finalstring = finalstring & str Debug.Print finalstring Next row End Sub