Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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 Excel基于特定单元格值合并单元格_Excel_Vba - Fatal编程技术网

VBA Excel基于特定单元格值合并单元格

VBA Excel基于特定单元格值合并单元格,excel,vba,Excel,Vba,我想根据特定列中的信息自动合并多个列中基于列的单元格 根据下图,c列中的值将确定A列到K列需要合并在一起的行数。随着c列中值的每次更改,合并将再次开始 这对我很有用: Sub MergeCellsByC() Dim c As Range, sht As Worksheet, currV Dim n As Long, rw As Range, r As Range Set sht = ActiveSheet Set c = sht.Range("C4") 'a

我想根据特定列中的信息自动合并多个列中基于列的单元格

根据下图,c列中的值将确定A列到K列需要合并在一起的行数。随着c列中值的每次更改,合并将再次开始

这对我很有用:

Sub MergeCellsByC()

    Dim c As Range, sht As Worksheet, currV
    Dim n As Long, rw As Range, r As Range

    Set sht = ActiveSheet
    Set c = sht.Range("C4") 'adjust to suit....
    currV = Chr(0)          'start with a dummy value

    Do
        If c.Value <> currV Then
            If n > 1 Then
                Set rw = c.EntireRow.Range("A1:K1") 'A1:K1 relative to the row we're on...
                Application.DisplayAlerts = False
                'loop across the row and merge the cells above
                For Each r In rw.Cells
                    r.Offset(-n).Resize(n).Merge
                Next r
                Application.DisplayAlerts = True
            End If
            currV = c.Value
            n = 1
        Else
            n = n + 1 'increment count for this value
        End If

        If Len(c.Value) = 0 Then Exit Do 'exit on first empty cell
        Set c = c.Offset(1, 0) 'next row down
    Loop

End Sub
Sub-MergeCellsByC()
尺寸c作为范围,短小作为工作表,当前
尺寸n等于长度,rw等于范围,r等于范围
设置sht=ActiveSheet
设置c=短程(“C4”)'调整以适应。。。。
currV=Chr(0)'以伪值开始
做
如果c.值为currV,则
如果n>1,则
设置rw=c.EntireRow.Range(“A1:K1”)'A1:K1相对于我们所在行的值。。。
Application.DisplayAlerts=False
'在行上循环并合并上面的单元格
对于rw.单元格中的每个r
r、 偏移量(-n).调整大小(n).合并
下一个r
Application.DisplayAlerts=True
如果结束
currV=c.值
n=1
其他的
n=n+1'此值的增量计数
如果结束
如果Len(c.Value)=0,则在第一个空单元格上退出Do'Exit
设置c=c.Offset(1,0)'下一行
环
端接头

到目前为止,您尝试了什么?另请参见。我尝试了下面的方法,该方法在C列上运行良好,但我不知道如何使需要合并的其他列使用C列作为合并其他列的指南。Private Sub MergeCells_C()Application.screenUpdate=False Application.DisplayAlerts=False Dim rngMerge as Range,单元格作为范围集rngMerge=Range(“C1:C1000”)'在此处再次设置范围限制:对于rngMerge中的每个单元格,如果cell.Value=cell.Offset(1,0)。Value和IsEmpty(cell)=False,则设置范围(cell,cell.Offset(1,0)).Merge GoTo mergeend If Next Application.DisplayAlerts=True Application.ScreenUpdate=True End子请不要期望任何人阅读注释中的代码。修改您的问题,并将附加信息包括在最明显的位置(也可以正确格式化以便于阅读),谢谢Tim-几乎在那里,但它没有检测到c列值的变化;现在,上面的代码正在为每个列进行一次大合并;我需要它来合并C列中的值与我使用的值相同的行,因此可能有一些特定于您的数据集的内容我缺少了。您可以共享工作表(或模拟文件?)我如何附加示例文件您可以将其上载到文件共享网站并提供URL(例如box、dropbox、google drive等)
Sub MergeCellsByC()

    Dim c As Range, sht As Worksheet, currV
    Dim n As Long, rw As Range, r As Range

    Set sht = ActiveSheet
    Set c = sht.Range("C4") 'adjust to suit....
    currV = Chr(0)          'start with a dummy value

    Do
        If c.Value <> currV Then
            If n > 1 Then
                Set rw = c.EntireRow.Range("A1:K1") 'A1:K1 relative to the row we're on...
                Application.DisplayAlerts = False
                'loop across the row and merge the cells above
                For Each r In rw.Cells
                    r.Offset(-n).Resize(n).Merge
                Next r
                Application.DisplayAlerts = True
            End If
            currV = c.Value
            n = 1
        Else
            n = n + 1 'increment count for this value
        End If

        If Len(c.Value) = 0 Then Exit Do 'exit on first empty cell
        Set c = c.Offset(1, 0) 'next row down
    Loop

End Sub