Board logo

標題: [發問] 如何刪除帶有合併欄的資料區塊 [打印本頁]

作者: luke    時間: 2013-6-6 07:11     標題: 如何刪除帶有合併欄的資料區塊

本帖最後由 luke 於 2013-6-6 07:13 編輯

各位大大

1.[Sheet1表]的「A:J欄」為不規則資料區, 其中部分欄位帶有一些合併的欄位
    如「B:D欄」和「G:I欄」, 約有100列(包含空白資料列).

2.如何先刪除整列空白資料列, 然後自A欄及(/或)F欄儲存格為空白值(無資料)中,
    去做刪除「A:E欄」和「F:J欄」資料區塊, 如附檔[sheet1結果]表所示:

VBA應如何寫出來

煩請先進  大大指導
[attach]15182[/attach]
作者: stillfish00    時間: 2013-6-7 16:28

本帖最後由 stillfish00 於 2013-6-7 16:38 編輯

回復 1# luke
土法煉鋼,參考看看
其實跟有沒有合併欄好像沒啥關係
  1. Sub test()
  2.     Dim r As Long, i As Long, ar
  3.     Dim rngDelete As Range
  4.    
  5.     With Sheets("sheet1")
  6.         '先整理A~E
  7.         r = Application.WorksheetFunction.Max( _
  8.             .Cells(.Rows.Count, "A").End(xlUp).Row, _
  9.             .Cells(.Rows.Count, "B").End(xlUp).Row, _
  10.             .Cells(.Rows.Count, "E").End(xlUp).Row)
  11.         With .Range("A1:E1").Resize(r)
  12.             ar = .Value
  13.             For i = 1 To UBound(ar)
  14.                 If ar(i, 1) = "" Then
  15.                     If rngDelete Is Nothing Then
  16.                         Set rngDelete = .Cells(i, 1).Resize(, .Columns.Count)
  17.                     Else
  18.                         Set rngDelete = Union(rngDelete, .Cells(i, 1).Resize(, .Columns.Count))
  19.                     End If
  20.                 End If
  21.             Next
  22.             If Not rngDelete Is Nothing Then
  23.                 rngDelete.Delete Shift:=xlUp
  24.                 Set rngDelete = Nothing
  25.             End If
  26.         End With
  27.         '同樣步驟,整理F~J
  28.         r = Application.WorksheetFunction.Max( _
  29.             .Cells(.Rows.Count, "F").End(xlUp).Row, _
  30.             .Cells(.Rows.Count, "G").End(xlUp).Row, _
  31.             .Cells(.Rows.Count, "J").End(xlUp).Row)
  32.         With .Range("F1:J1").Resize(r)
  33.             ar = .Value
  34.             For i = 1 To UBound(ar)
  35.                 If ar(i, 1) = "" Then
  36.                     If rngDelete Is Nothing Then
  37.                         Set rngDelete = .Cells(i, 1).Resize(, .Columns.Count)
  38.                     Else
  39.                         Set rngDelete = Union(rngDelete, .Cells(i, 1).Resize(, .Columns.Count))
  40.                     End If
  41.                 End If
  42.             Next
  43.             If Not rngDelete Is Nothing Then
  44.                 rngDelete.Delete Shift:=xlUp
  45.                 Set rngDelete = Nothing
  46.             End If
  47.         End With
  48.     End With
  49.    
  50. End Sub
複製代碼

作者: Hsieh    時間: 2013-6-7 18:56

回復 1# luke
  1. Sub ex()
  2. Application.ScreenUpdating = False
  3. For i = 1 To 6 Step 5
  4. For j = Cells(Rows.Count, i).End(xlUp).Row To 1 Step -1
  5.    If Cells(j, i) = "" Then Cells(j, i).Resize(, 5).Delete xlShiftUp
  6. Next
  7. Next
  8. Application.ScreenUpdating = True
  9. End Sub
複製代碼

作者: luke    時間: 2013-6-7 22:07

回復 2# stillfish00


回覆stillfish00

謝謝您再次協助

以上
作者: luke    時間: 2013-6-7 22:10

回復 3# Hsieh


感謝超版幫忙

以下是碰到問題:

因[Sheet1表]的「A:J欄」是【人為】清除造成不規則資料區,
本例若「A欄」或「F欄」有空白值如『A15』、『F15』、『F16』和『F17』儲存格
就會有錯誤如圖所示:

應如何修改語法
[attach]15200[/attach]
作者: lilytracy    時間: 2013-6-8 06:25

本帖最後由 lilytracy 於 2013-6-8 06:30 編輯

回復 5# luke



此語法Application.ScreenUpdating = False後, 加一句
  1. Range("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
複製代碼





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