Board logo

標題: [發問] 請教關於利用迴圈判斷在需要的地方插入列 [打印本頁]

作者: a703130    時間: 2011-10-28 14:57     標題: 請教關於利用迴圈判斷在需要的地方插入列

請問各位前輩們

我目前有個文件因為資料量很龐大
每次整理都需要很久的時間
所以將腦筋動到VBA上,希望能讓我的工作更有效率

但是我卻遇到了問題..百思不得其解下來請前輩幫忙

如附件的檔案,我想要在每個step中間插入一列空白
然後可以保留前後兩行,其餘隱藏
以我手動的方式做, 先搜尋step 14 在上面插入一列
然後會選取step13的倒數第二列,壓住shift,end+↑,再往下選取step13的第二列
將其隱藏 ==> 亦即保留step 13的第一列以及第二列,就像是附件的step13、14

每個文件開始不一定是step13,且每個step的列數是不一樣的
所以我想到的方式是用endup或是enddown,但是要判斷每個step中間要如何插入列,我就沒轍了
因為列好像不能設定變數,((我的能力不足,爬文似乎也沒有找到類似的方法))

[attach]8367[/attach]

所以請前輩們幫忙,希望能夠省下無謂的時間
謝謝
作者: oobird    時間: 2011-10-28 15:50

插入空白列後就大於65536列了。你的Office2003不支持。
作者: GBKEE    時間: 2011-10-28 16:28

回復 1# a703130
  1. Sub Ex()
  2.     Dim Rng(1 To 2) As Range
  3.     With Sheets("Page1")
  4.         Set Rng(1) = .Range("a2")
  5.         Set Rng(2) = Rng(1).End(xlDown)
  6.         Do While Rng(1).Row <> Rows.Count
  7.             If .Range(Rng(1), Rng(2)).Rows.Count >= 3 Then .Range(Rng(1).Offset(1), Rng(2).Offset(-1)).EntireRow.Hidden = True
  8.             Set Rng(1) = Rng(2).End(xlDown)
  9.             Set Rng(2) = Rng(1).End(xlDown)
  10.         Loop
  11.     End With
  12. End Sub
複製代碼

作者: a703130    時間: 2011-10-31 10:25

回復 2# oobird

大大說的也有道理

如果是在不會超過的情況下,是否有其辦法??
作者: a703130    時間: 2011-10-31 10:39

回復 3# GBKEE

謝謝大大指導
不過這方式似乎只能保留第一行&最後一行

沒辦法按照 Step 方式 去做

不知道是否還需要修改什麼地方??
作者: Hsieh    時間: 2011-10-31 15:30

回復 5# a703130
  1. Sub nn()
  2. Dim A As Range, Rng As Range, Rng1 As Range, Rng2 As Range
  3. Set d = CreateObject("Scripting.Dictionary")
  4. Range("D:D").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
  5. Cells.EntireRow.Hidden = False
  6. For Each A In Range([D2], [D65536].End(xlUp))
  7. If d.exists(A.Value) = False Then
  8.    d(A.Value) = A.Value
  9.    If Rng2 Is Nothing Then Set Rng2 = A Else Set Rng2 = Union(A, Rng2)
  10. End If
  11.   If A = A.Offset(1, 0) Then
  12.      If Rng Is Nothing Then Set Rng = A Else Set Rng = Union(A, Rng)
  13.      Else
  14.      If Rng1 Is Nothing Then Set Rng1 = A.Offset(1, 0) Else Set Rng1 = Union(A.Offset(1, 0), Rng1)
  15.    End If
  16. Next
  17. Rng1.EntireRow.Insert
  18. Rng.EntireRow.Hidden = True
  19. Rng2.EntireRow.Hidden = False
  20. End Sub
複製代碼
[attach]8387[/attach]
作者: a703130    時間: 2011-11-2 09:26

回復 6# Hsieh

此方法可行

不過這方法似乎已經超過我所知道的語言

不知道前輩是否能幫忙註解,讓我能夠更容易學習

謝謝
作者: Hsieh    時間: 2011-11-2 09:43

回復 7# a703130

這並無特殊語法
請針對不解之處發問
作者: GBKEE    時間: 2011-11-2 09:57

回復  Hsieh
此方法可行a703130 發表於 2011/11/2 09:26

樓主Excel的版本為2003 依你的附檔 來操作 Hsieh 超版的程式
Rng1.EntireRow.Insert  這裡的程式碼 會發生錯誤 .
如同 oobird 超版說  插入空白列後就大於65536列了。你的Office2003不支持。
所以 樓主 可能需升級Excel的版本.
作者: linsurvey2005    時間: 2017-2-22 05:08

回復 3# GBKEE


依標題另請教大大,我的問題想把原始資料插入整列進去
筆數很多需要再不同編號處插入整列分割開

[attach]26698[/attach]
[attach]26699[/attach]




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)