返回列表 上一主題 發帖

[發問] 請問有人能幫忙解答嗎?函數公式該如何寫呢?

回復 6# alltest
自動篩選:
  1. Sub Ex()
  2.     Dim E As Variant, r As Integer, xi As Integer
  3.     Dim Rng(1 To 2)
  4.     With Workbooks("book1.xls").Sheets("異常明細")
  5.         .AutoFilterMode = False
  6.         For Each E In Array("黃色", "紅色", "青色")
  7.             .Range("A2", .UsedRange.SpecialCells(xlCellTypeLastCell).Address).AutoFilter Field:=2, Criteria1:=E
  8.             xi = .Cells(Rows.Count, 2).End(xlUp).Row
  9.             For r = 5 To .Cells(1, .Columns.Count).End(xlToLeft).Column Step 3
  10.                 Set Rng(1) = .Range("b1:d" & xi)
  11.                 Set Rng(2) = .Range(.Cells(1, r).Resize(, 3).Address & ":" & .Cells(xi, r + 2).Address)
  12.                 Set Rng(1) = Union(Rng(1), Rng(2))
  13.                 With Workbooks("book2.xls").Sheets(E & "-" & .Cells(1, r))
  14.                     .Cells.Clear
  15.                     Rng(1).Copy .[A1]
  16.                 End With
  17.             Next
  18.         Next
  19.         .AutoFilterMode = False
  20.     End With
  21. End Sub
複製代碼
  1. Sub Ex1() '新增活頁簿
  2.     Dim E As Variant, r As Integer, xi As Integer
  3.     Dim Rng(1 To 2), Wb As Workbook
  4.     Set Wb = Workbooks.Add(1)                                           '新增活頁簿
  5.     With Workbooks("book1.xls").Sheets("異常明細")
  6.         .AutoFilterMode = False
  7.         For Each E In Array("黃色", "紅色", "青色")
  8.             .Range("A2", .UsedRange.SpecialCells(xlCellTypeLastCell).Address).AutoFilter Field:=2, Criteria1:=E
  9.             xi = .Cells(Rows.Count, 2).End(xlUp).Row
  10.             For r = 5 To .Cells(1, .Columns.Count).End(xlToLeft).Column Step 3
  11.                 Set Rng(1) = .Range("b1:d" & xi)
  12.                 Set Rng(2) = .Range(.Cells(1, r).Resize(, 3).Address & ":" & .Cells(xi, r + 2).Address)
  13.                 Set Rng(1) = Union(Rng(1), Rng(2))
  14.                 Wb.Sheets.Add(, Sheets(Sheets.Count)).Name = E & "-" & .Cells(1, r) '新增工作表:命名
  15.                 Rng(1).Copy ActiveSheet.[A1]
  16.             Next
  17.         Next
  18.         .AutoFilterMode = False
  19.     End With
  20. End Sub
複製代碼

TOP

回復 10# alltest
Ex 放哪裡都可以
Ex1 (新增活頁簿)需放在book1.xls 或以存檔的活頁簿中

TOP

回復 12# alltest
EX   放在 book1 會出現錯誤訊息          book2 會出現錯誤訊息
你的 book1,book2 上傳看看.
EX1  放在 book1 可以執行,但出現的結果怪怪的說~
如何怪怪, 請說看看.

TOP

本帖最後由 GBKEE 於 2012-12-28 07:59 編輯

回復 14# alltest
EX   放在 book1 會出現錯誤訊息        book2 會出現錯誤訊息
如圖 :  book2 工作表名稱錯誤





      
EX1  放在 book1 可以執行,但出現的結果怪怪的說~

如圖 book1 請新增一工作表 命名為 : "表頭"





修改 Sub Ex1() 如下
  1. Sub Ex1() '新增活頁簿
  2. Dim E As Variant, r As Integer, xi As Integer, xC As Integer
  3. Dim Rng(1 To 2), Wb As Workbook
  4. Set Wb = Workbooks.Add(1) '新增活頁簿
  5. With Workbooks("book1.xls").Sheets("異常明細")
  6. .AutoFilterMode = False
  7. xC = .Cells(1, .Columns.Count).End(xlToLeft).Column
  8. For Each E In Array("黃色", "紅色", "青色")
  9. .Range("A2", .UsedRange.SpecialCells(xlCellTypeLastCell).Address).AutoFilter Field:=2, Criteria1:=E
  10. xi = .Cells(Rows.Count, 2).End(xlUp).Row
  11. For r = 5 To xC Step 3
  12. Set Rng(1) = .Range("b3:d" & xi)
  13. Set Rng(2) = .Range(.Cells(3, r).Resize(, IIf(r < xC - 1, 3, 2)).Address & ":" & .Cells(xi, r + IIf(r < xC - 1, 2, 1)).Address)
  14. Set Rng(1) = Union(Rng(1), Rng(2))
  15. Wb.Sheets.Add(, Sheets(Sheets.Count)).Name = E & "-" & .Cells(1, r) '新增工作表:命名
  16. With ActiveSheet
  17. If r < xC - 1 Then
  18. Workbooks("book1.xls").Sheets("表頭").[A1].CurrentRegion.Copy .[A1]
  19. 'book1 請新增一工作表 命名為 : "表頭"
  20. Else
  21. Workbooks("book1.xls").Sheets("表頭").[A4].CurrentRegion.Copy .[A1]
  22. End If
  23. Rng(1).Copy ActiveSheet.[A3]
  24. End With
  25. Next
  26. Next
  27. .AutoFilterMode = False
  28. End With
  29. Wb.Sheets(1).Move After:=Wb.Sheets(Wb.Sheets.Count)
  30. Wb.Sheets(1).Activate
  31. End Sub
複製代碼

TOP

回復 18# c_c_lai
便 OK 了! (  Rows.Count  ---->  .Rows.Count )
使用2003(老版本)忘記了,2007版(含)以上 Rows.Count , 必需如此 . .Rows.Count

TOP

        靜思自在 : 能幹不幹,不如苦幹實幹。
返回列表 上一主題