Vba 根据某个单元格范围的列中的值合并单元格
我需要在G行中添加数据,如果E行有相同的字符串,则在A行中合并日期。我发现,这非常有用,但我需要在G7:G65536范围内执行,因为从1到6的行被合并 有什么方法可以修改这个代码吗Vba 根据某个单元格范围的列中的值合并单元格,vba,excel,merge,Vba,Excel,Merge,我需要在G行中添加数据,如果E行有相同的字符串,则在A行中合并日期。我发现,这非常有用,但我需要在G7:G65536范围内执行,因为从1到6的行被合并 有什么方法可以修改这个代码吗 我试着玩弄它,但它没有给我任何结果。我用你的评论得出了以下示例数据 我怀疑这样做的目的是使用列E作为唯一的键列,并在从列a构建日期串联列表的同时聚合(aka SUM)列G中的数量。前6行的前6行将被忽略,因为前6行中至少有一些是连接的。TBH,我发现你最初的叙述与你最近的评论相矛盾,所以我用后者作为“发现” Sub
我试着玩弄它,但它没有给我任何结果。我用你的评论得出了以下示例数据 我怀疑这样做的目的是使用列E作为唯一的键列,并在从列a构建日期串联列表的同时聚合(aka SUM)列G中的数量。前6行的前6行将被忽略,因为前6行中至少有一些是连接的。TBH,我发现你最初的叙述与你最近的评论相矛盾,所以我用后者作为“发现”
Sub merge_some_row_data()
Dim rw As Long, lr As Long, s As Long, str As String
Application.ScreenUpdating = False
With ActiveSheet.Cells(1, 1).CurrentRegion
With .Cells(7, 1).Resize(.Rows.Count - 6, .Columns.Count)
.Cells.Sort Key1:=.Columns(5), Order1:=xlAscending, _
Key2:=.Columns(1), Order2:=xlAscending, _
Orientation:=xlTopToBottom, Header:=xlNo
End With
lr = .Rows.Count
For rw = .Rows.Count To 7 Step -1
If .Cells(rw, "E").Value2 <> .Cells(rw - 1, "E").Value2 And rw < lr Then
.Cells(rw, "G") = Application.Sum(.Range(.Cells(rw, "G"), .Cells(lr, "G")))
str = vbNullString
For s = rw To lr
str = str & Chr(59) & .Cells(s, "A").Text 'Chr(59) is the ASCII code for a semi-colon
Next s
.Cells(rw, "A") = Mid(str, 2) 'truncate off the firsty semi-colon
.Cells(rw + 1, 1).Resize(lr - rw, 1).EntireRow.Delete
lr = rw - 1
End If
Next rw
End With
Application.ScreenUpdating = True
End Sub
子合并某些行数据()
尺寸rw为长,lr为长,s为长,str为字符串
Application.ScreenUpdating=False
使用ActiveSheet.Cells(1,1).CurrentRegion
使用.Cells(7,1).调整大小(.Rows.Count-6、.Columns.Count)
.Cells.Sort Key1:=.Columns(5),Order1:=xl升序_
键2:=.列(1),顺序2:=xl升序_
方向:=xltoptobttom,标题:=xlNo
以
lr=.Rows.Count
对于rw=.Rows.Count到7步骤-1
如果.Cells(rw,“E”).Value2.Cells(rw-1,“E”).Value2和rw
运行代码后,结果如下所示
如果您为自己的超级机密目的转录此框架时遇到任何困难,请随时使用经过编辑的样本数据、预期结果以及您无法适应自己情况的代码部分来修改您的原始问题。您尝试过什么?你能提供一些样本数据说明他们在链接帖子中做了什么?如果您更清楚自己遇到的问题,您可能会得到更好的响应。如果最大的障碍是“我从1到6的行被合并”,则将该代码中的一行更改为
循环,直到LNROW<7
。这会给我“应用程序定义或对象定义错误”,或者,如果我将其更改为循环,直到lngRow=7
,然后它再次显示“应用程序要求合并的单元格大小相同”Tyler,我试图将I=7添加到65536,I=65536添加到7(以防万一),并在这里替换它lngRow=.cells(I,columnToMatch.End(xlUp)。行
不起作用a)复制了哪些列?b) 除了G之外,还有其他要聚合或连接的列吗?您引用的示例对一列求和并连接另一列。c) 第7行是列标题行还是数据的第一行?这太棒了!谢谢。还有,我可以问你。我只需要在按下“合并”按钮后,在多个工作表中运行此代码(第2、5、8、11、14、17、20、23、26、29页)。是否可以不针对活动工作表运行此代码?有几种方法可以循环浏览工作簿中的每个工作表,或使用工作表名称数组浏览有限的工作表。事实上,上面带有ActiveSheet.Cells(1,1).CurrentRegion的代码只需要封装在另一个循环中,该循环标识要处理的每个工作表。我使用Dim WshtNames作为变量,InxW只要WshtNames=Array(Sheet2,Sheet5,Sheet8,Sheet11,Sheet14,Sheet17,Sheet20,Sheet23,Sheet26,Sheet29)
对于InxW=LBound(WshtNames)到UBound(WshtNames)
工作表(WshtNames(InxW))。使用ActiveSheet.Cells(1,1)激活和之后的。CurrentRegion
我有下一个InxW
。它给我对象定义的错误。我做错了什么?对不起,你能编辑你的代码,让它按E列搜索,并在G列中添加#s吗?我本来想自己做的,但当我在你的代码中将E换成G,G换成E时,一个产品覆盖了另一个。我怀疑你没有更改主排序列。这一点很重要,因为它是找到类似产品的关键。