返回列表 上一主題 發帖

判斷式出現0,多餘的空白

這問題用VBA應較適合:
  1. Sub TEST()
  2. Dim R&, xD, Arr, Brr, j&, Jm&, T$, N&
  3. [L:O].ClearContents
  4. [L1:O1] = Array("日期", "樣式", "工作人員", "數量")
  5.  
  6. R = Cells(Rows.Count, 1).End(xlUp).Row - 1
  7. If R < 2 Then Exit Sub
  8. Arr = [A2:F2].Resize(R)
  9. ReDim Brr(1 To R, 1 To 4)
  10. Set xD = CreateObject("Scripting.Dictionary")
  11.  
  12. For j = 1 To R
  13.   T = Arr(j, 1) & Arr(j, 2):  N = xD(T)
  14.   If N = 0 Then Jm = Jm + 1: xD(T) = Jm:  N = Jm
  15.  
  16.   Brr(N, 1) = Arr(j, 1): Brr(N, 2) = Arr(j, 2)
  17.   If InStr(Brr(N, 3), Arr(j, 4)) = 0 Then
  18.     Brr(N, 3) = Trim(Brr(N, 3) & " " & Arr(j, 4))
  19.   End If
  20.   Brr(N, 4) = Brr(N, 4) + Val(Arr(j, 6))
  21. Next j
  22. [L2:O2].Resize(Jm) = Brr
  23. End Sub
複製代碼

TOP

本帖最後由 准提部林 於 2015-9-26 19:07 編輯

回復 3# mark761222

花個時間研究看看, 不難:(程式有部份修改)
  1. Sub TEST()
  2. Dim R&, xD, Arr, Brr, j&, Jm&, T$, N&
  3. '↓清除之前的結果
  4. [L:O].ClearContents
  5. [L1:O1] = Array("日期", "樣式", "工作人員", "數量") 
  6.  
  7. '↓以A欄取得最後一筆〔列號〕
  8. R = Cells(Rows.Count, 1).End(xlUp).Row
  9. If R < 2 Then Exit Sub
  10.  
  11. '↓將資料範圍設為陣列(含標題列)
  12. Arr = [A1:F1].Resize(R)
  13.  
  14. '↓設一個空陣列,以接受結果
  15. ReDim Brr(1 To R, 1 To 4)
  16.  
  17. '↓設一個字典檔,以唯一〔索引值〕收集相關數據
  18. Set xD = CreateObject("Scripting.Dictionary")
  19.  
  20. For j = 2 To R
  21.   '↓A&B欄文字合為〔索引值〕
  22.   T = Arr(j, 1) & Arr(j, 2)
  23.  
  24.   '↓取出〔索引值〕在字典檔中所帶的〔序號〕,
  25.    這〔序號〕用來識別填入〔陣列〕的〔位置〕
  26.   N = xD(T) 
  27.  
  28.   '↓如果〔序號〕為0,表示是新的〔索引值〕,
  29.    將〔序號〕遞增1,再納入字典檔
  30.   If N = 0 Then Jm = Jm + 1: xD(T) = Jm:  N = Jm
  31.  
  32.   '↓填入〔日期.樣式〕
  33.   Brr(N, 1) = Arr(j, 1): Brr(N, 2) = Arr(j, 2)
  34.  
  35.   '↓填入〔工作人員〕,InStr 用來判斷是否重覆
  36.   If InStr(Brr(N, 3), Arr(j, 4)) = 0 Then
  37.     Brr(N, 3) = Trim(Brr(N, 3) & " " & Arr(j, 4))
  38.   End If
  39.  
  40.   '↓填入〔累計數量〕
  41.   Brr(N, 4) = Brr(N, 4) + Val(Arr(j, 6))
  42. Next j
  43.  
  44. '↓列出結果
  45. [L2:O2].Resize(Jm) = Brr
  46. End Sub
複製代碼

TOP

回復 5# mark761222


[A:B] 與Range("A:B") 同義
[A2:B5] 與Range("A2:B5") 同義

其它問題若要說明,可能寫好幾頁也不一定能說明白,
買書或多看論壇的資料,慢慢進階吧!

TOP

        靜思自在 : 甘願做、歡喜受。
返回列表 上一主題