2017-10-16 23 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