返回列表 上一主題 發帖

filter型態不符合

本帖最後由 軒云熊 於 2020-8-1 19:23 編輯
  1. 我也是新手順便練習一下 不過這段好像哪裡怪怪的  但我看不出來 請大大們 幫幫忙 該如何修改 感覺 好像迴圈 太多 不必要的代碼 好像很多 0.0
  2. Public Sub 練習跨工作表陣列練習()

  3.     For x = 2 To Sheets.Count
  4.         Sheets(x).Cells.Clear
  5.         Sheets(1).Rows(1).Copy Sheets(x).Rows(1)
  6.     Next x
  7.    
  8.     E = 2
  9.     A = Array("三商", "遠東", "信義")
  10.     K = Range(Cells(2, 1), Cells(2, 3).End(xlDown))
  11.     ReDim B(LBound(K) To UBound(K))
  12.     ReDim Preserve B(LBound(K) To UBound(K))

  13.     For x = 2 To Sheets.Count
  14.         For J = LBound(K) To UBound(K)
  15.             For I = LBound(A) To UBound(A)
  16.             If A(I) <> K(J, 2) Then E = 2
  17.                 If A(I) = K(J, 2) Then
  18.                 If Sheets(K(J, 2)).Cells(E, 1) <> "" Then E = E + 1
  19.                     Sheets(K(J, 2)).Cells(E, 1) = K(J, 1)
  20.                     Sheets(K(J, 2)).Cells(E, 2) = K(J, 2)
  21.                     Sheets(K(J, 2)).Cells(E, 3) = K(J, 3)
  22.                     E = E + 1
  23.                 End If
  24.             Next I
  25.         Next J
  26.     Exit For
  27.     Next x
  28.    
  29.     Erase A, K, B
  30.    
  31. End Sub
複製代碼

TOP

剛才試著把  For x = 2 To Sheets.Count 迴圈刪除 結果發現 根本用不到 ........XD

TOP

ReDim B(LBound(K) To UBound(K))
ReDim Preserve B(LBound(K) To UBound(K))
Erase B

這段也不用 ....XD

TOP

回復 8# ssooi


    E = E + 1 這段也不用 .....XD  抱歉 我也是新手我們可以互相學習

TOP

本帖最後由 軒云熊 於 2020-8-2 11:11 編輯

回復 10# n7822123

謝謝 n7822123 大大的 分享 小弟研究一下 XD
順便請問為甚麼使用                 
               D = Array(K(J, 1), K(J, 2), K(J, 3))
                Sheets(K(J, 2)).Rows(E) = D
的時候會出現 #N/A

javascript:;
應該如何寫 才不會出現 #N/A

888.png (79.11 KB)

888.png

TOP

本帖最後由 軒云熊 於 2020-8-2 15:21 編輯

回復 13# n7822123
謝謝 n7822123 的說明 我明白了  請問 那如果要讓  A = Array("三商", "遠東", "信義")  變成動態有彈性 該如何寫呢?
因為現在有一個問題 就是 如果工作表變多了 也只會比對3個工作表 想法是把工作表名子丟到Array()裡面 但是不知道怎麼丟   欄 跟 列  的問題 我是這樣寫
  1. Public Sub 跨工作表陣列練習()

  2.     For X = 2 To Sheets.Count
  3.         Sheets(X).Cells.Clear
  4.     Next X
  5.    
  6.     A = Array("三商", "遠東", "信義")
  7.     K = Range(Cells(2, 1), Cells(2, 4).End(xlDown))
  8.     F = Cells(1, Columns.Count).End(xlToLeft).Column

  9.     For J = LBound(K) To UBound(K)
  10.         For i = LBound(A) To UBound(A)
  11.             If A(i) = K(J, 2) Then
  12.                 If Sheets(K(J, 2)).Cells(1, 1) = "" Then Sheets(1).Rows(1).Copy Sheets(K(J, 2)).Rows(1)
  13.                 For D = 1 To F
  14.                     Sheets(K(J, 2)).Cells(Rows.Count, D).End(xlUp).Offset(1, 0) = K(J, D)
  15.                 Next D
  16.             End If
  17.         Next i
  18.     Next J

  19.     Erase A, K
  20.    
  21.     Sheets(1).Select
  22.     Cells(1, 1).Select
  23.    
  24. End Sub
複製代碼

TOP

謝謝 n7822123 的分享與教學 小弟學到新的 東西了 真的非常感謝
下面是結果  缺點 真的變慢了....XD 因為我的迴圈太多了..   
我會慢慢研究 n7822123大大還有 準提大大所寫的方式
但 有很多看不懂是真的. 不過我慢慢研究 如果不懂的地方 還要 麻煩前輩們指教 ^^"
  1. Public Sub 跨工作表陣列練習()

  2.     Dim A()
  3.     For X = 2 To Sheets.Count
  4.         Sheets(X).Cells.Clear
  5.         ReDim Preserve A(X - 2)
  6.         A(X - 2) = Sheets(X).Name
  7.     Next X
  8.    
  9.     F = Cells(1, Columns.Count).End(xlToLeft).Column
  10.     K = Range(Cells(2, 1), Cells(2, F).End(xlDown))
  11.    
  12.     For J = LBound(K) To UBound(K)
  13.         For i = LBound(A) To UBound(A)
  14.             If A(i) = K(J, 2) Then
  15.                 If Sheets(K(J, 2)).Cells(1, 1) = "" Then Sheets(1).Rows(1).Copy Sheets(K(J, 2)).Rows(1)
  16.                 For D = 1 To F
  17.                     Sheets(K(J, 2)).Cells(Rows.Count, D).End(xlUp).Offset(1, 0) = K(J, D)
  18.                 Next D
  19.             End If
  20.         Next i
  21.     Next J

  22.     Erase A, K
  23.    
  24.     Sheets(1).Select
  25.     Cells(1, 1).Select
  26.    
  27. End Sub
複製代碼

TOP

        靜思自在 : 能付出愛心就是福,能消除煩惱就是慧。
返回列表 上一主題