2017-10-16 69 views
0

我正在尝试构建一个新代码,该代码将每次数据组更改时将标题列(从数据的第1行)复制并插入到列表中。每个分组的大小是不同的,大小从一个月变到下一个。为了增加进一步的复杂性,分组的名称可以改变。例如,我需要的代码打破名单下来是这样的:新组开始时插入标题行的宏

Header 
Corporate 
Corporate 
Corporate 
Insert header 
Financial 
Financial 
Insert header 
Public 
etc 

的数据需要保持在同一张纸上,所以没有需要移动任何地方

到目前为止,我已经想好了数据沿此线的东西,但不知道正确的语法,以使用,使该操作:

Do forever 
‘stop at the end 
    If group_cellvalue(vArraycounter) = “” then leave 
    Endif 
vArraycounter = vArraycounter + 1 
    ‘test the current group against that in the previous row if different, insert 
    'header 
    If group_cellvalue((vArraycounter) <> group_cellvalue((vArraycounter - 1) 
    then 
     InsertRow 
     InsertHeadingText 
     'Increment counter to get back on track 
     vArraycounter = vArraycounter + ? 
    Endif 
End For 

任何提示或建议非常赞赏:)

回答

0

假设:总会有一个初始列标题;在初始列标题下面的值中没有差距。

然后下面的代码是一个起点。将它粘贴到一个模块中,并调整Test sub,使其指向初始列标题的位置。

Option Explicit 

Public Sub Test() 
    Headerize Sheet1.Range("A1") 
End Sub 

Public Sub Headerize(ByVal prngFirstHeader As Excel.Range) 
    Dim rngScan As Excel.Range 

    Set rngScan = prngFirstHeader.Cells(3, 1) 

    Do Until IsEmpty(rngScan.Value) 
     If rngScan.Value <> rngScan.Cells(0, 1).Value Then 
      prngFirstHeader.Copy 
      rngScan.Insert Shift:=XlInsertShiftDirection.xlShiftDown 
     End If 

     Set rngScan = rngScan.Cells(2, 1) 
    Loop 

    Set rngScan = Nothing 
End Sub 
+0

嗨。谢谢你。我努力让这个工作 - 它使用的代码是新的。我试图将这个应用于我自己的问题。 我是否需要声明两个潜艇或是第一个例子和第二个例子?我已经用两者都试过了,前者宏似乎什么也不做,后者当你去查看宏时,宏从宏列表中消失 设置值(x,y)时,我是否正确思考左边的数字是行,右边是列? 我会送我所做的代码,但不知道如何在本网站的格式,将学习 – user7327273

+0

我的代码: 分测试(BYVAL标题为Excel.Range) 昏暗rngScan作为Excel.Range 随着表( “附件B的在职职工”) 。选择 设置rngScan = prngFirstHeader.Cells(3,12)“放眼第3行,12列 做,当不为IsEmpty(rngScan.Value) 如果rngScan.Value < > rngScan.Cells(0,12).Value Then prngFirstHeader.Copy rngScan.Insert Shift:= XlInsertShiftDirection.xlShiftDown End If 集rngScan = rngScan.Cells(2,12) 环路 集rngScan =无 结束随着 结束子 – user7327273

+0

可以删除'Test'子,这是只是为了显示的一个示例呼叫'Headerize'分。你所要做的就是从代码中调用'Headerize',并将它传递给第一个头,这个头必须在检测到差异时重复下去。例如,如果要重复的报头位于地址C3的工作表“XYZ”上,请在代码中放置'Headerize ThisWorkbook.Worksheets(“XYZ”)。Range(“C3”)''。 – Excelosaurus