Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 根据某个单元格范围的列中的值合并单元格_Vba_Excel_Merge - Fatal编程技术网

Vba 根据某个单元格范围的列中的值合并单元格

Vba 根据某个单元格范围的列中的值合并单元格,vba,excel,merge,Vba,Excel,Merge,我需要在G行中添加数据,如果E行有相同的字符串,则在A行中合并日期。我发现,这非常有用,但我需要在G7:G65536范围内执行,因为从1到6的行被合并 有什么方法可以修改这个代码吗 我试着玩弄它,但它没有给我任何结果。我用你的评论得出了以下示例数据 我怀疑这样做的目的是使用列E作为唯一的键列,并在从列a构建日期串联列表的同时聚合(aka SUM)列G中的数量。前6行的前6行将被忽略,因为前6行中至少有一些是连接的。TBH,我发现你最初的叙述与你最近的评论相矛盾,所以我用后者作为“发现” Sub

我需要在G行中添加数据,如果E行有相同的字符串,则在A行中合并日期。我发现,这非常有用,但我需要在G7:G65536范围内执行,因为从1到6的行被合并

有什么方法可以修改这个代码吗


我试着玩弄它,但它没有给我任何结果。

我用你的评论得出了以下示例数据

我怀疑这样做的目的是使用列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时,一个产品覆盖了另一个。我怀疑你没有更改主排序列。这一点很重要,因为它是找到类似产品的关键。