Board logo

標題: [發問] 資料整理與統計 [打印本頁]

作者: oak0723-1    時間: 2017-2-20 18:50     標題: 資料整理與統計

如附件
綠色標籤活頁是我一半利用函數一半用人工所做成
若要利用VB做成標籤名稱為"分筆量"活頁
要如何才能達成
作者: Kubi    時間: 2017-2-22 14:34

請測試
  1. Option Base 1

  2. Sub test()
  3.     Dim d As Object
  4.     Dim arr, brr()
  5.     Set d = CreateObject("Scripting.Dictionary")
  6.     s = Array(1000, 5000, 10000, 15000, 20000, 30000, 40000, 50000, 100000, 200000, 400000, 600000, 800000, 1000000, 2000000, 3000000)
  7.     er = [A65536].End(3).Row
  8.     arr = Range("A8:C" & er)
  9.     Range("A8:C" & er).Sort key1:=[A8], Order1:=2
  10.     For i = 1 To UBound(arr)
  11.         If Not d.exists(arr(i, 1)) Then
  12.             n = n + 1
  13.             d(arr(i, 1)) = n
  14.         End If
  15.     Next i
  16.     ReDim brr(d.Count, UBound(s) * 4)
  17.     [D8:D65536].ClearContents
  18.     [D8].Resize(d.Count) = Application.Transpose(d.keys)
  19.     Range("A8:C" & er) = arr
  20.     For i = 1 To UBound(arr)
  21.         For j = 2 To 3
  22.             If arr(i, j) >= 1000 Then
  23.                 For a = 1 To UBound(s) - 1
  24.                     If arr(i, j) >= s(a) And arr(i, j) < s(a + 1) Then
  25.                         brr(d(arr(i, 1)), (a - 1) * 4 + j * 2 - 3) = brr(d(arr(i, 1)), (a - 1) * 4 + j * 2 - 3) + arr(i, j)
  26.                         brr(d(arr(i, 1)), (a - 1) * 4 + j * 2 - 2) = brr(d(arr(i, 1)), (a - 1) * 4 + j * 2 - 2) + 1
  27.                         Exit For
  28.                     End If
  29.                 Next a
  30.             End If
  31.         Next j
  32.     Next i
  33.     [E8].Resize(UBound(brr), UBound(brr, 2)) = brr
  34.     arr = ""
  35.     Set d = Nothing
  36.     Erase brr
  37. End Sub
複製代碼

作者: oak0723-1    時間: 2017-2-22 16:52

謝謝kubi大大你熱心幫我這個忙
只是經我測試似乎(將程式碼以按鍵趨動)
除了數據顯示位置有誤外
依編號各級距所合計與筆數似乎與我自己做的函數+手動的數聚有所差距
作者: Kubi    時間: 2017-2-23 10:54

回復 3# oak0723-1

你的程式碼放錯模組,不應該放在工作表模組,應該放在一般模組內,請參考附加檔案。
請執行 [資料分筆] 按鈕。
[attach]26707[/attach]
作者: oak0723-1    時間: 2017-2-23 14:01

謝謝
小弟好好研究一下
作者: oak0723-1    時間: 2017-2-23 19:22

謝謝kubi大大
小弟剛剛換一組數據測試
發現編號排序並非由上而下遞減排列
如何修正為由上到下遞減排列
作者: Kubi    時間: 2017-2-24 10:50

回復 6# oak0723-1
請測試。
[attach]26713[/attach]
作者: 准提部林    時間: 2017-2-24 14:20

  1. Sub test_1()
  2. Dim xD As Object, Arr, Brr, V, N&, U%, i&, j%, k%, Km%
  3. Set xD = CreateObject("Scripting.Dictionary")
  4. s = Array(1, 5, 10, 15, 20, 30, 40, 50, 100, 200, 400, 600, 800, 1000, 2000, 3000, 60000)
  5. Arr = Range("A8:C" & [A65536].End(3).Row)

  6. ReDim Brr(1 To UBound(Arr), 1 To UBound(s) * 4 + 1)
  7. del
  8. For i = 1 To UBound(Arr)
  9.     V = Arr(i, 1): U = xD(V)
  10.     If U = 0 Then N = N + 1: U = N: xD(V) = N: Brr(U, 1) = V
  11.     For j = 2 To 3
  12.         Km = 0
  13.         For k = 0 To UBound(s)
  14.             If s(k) * 1000 > Arr(i, j) Then Km = (k - 1) * 4: Exit For
  15.         Next k
  16.         If Km >= 0 Then
  17.            Brr(U, Km + j * 2 - 2) = Brr(U, Km + j * 2 - 2) + Arr(i, j)
  18.            Brr(U, Km + j * 2 - 1) = Brr(U, Km + j * 2 - 1) + 1
  19.         End If
  20.     Next j
  21. Next i
  22. With [D8].Resize(N, UBound(s) * 4 + 1)
  23.      .Value = Brr
  24.      .Sort Key1:=.Item(1), Order1:=xlDescending, Header:=xlNo
  25. End With
  26. End Sub
複製代碼

作者: oak0723-1    時間: 2017-2-25 17:14

經小弟測試後確實為正解
謝謝kubi與准提部林大大熱心解答
讓小弟獲得解答
謝謝
非常感恩
勞力!!!
作者: oak0723-1    時間: 2017-3-15 11:47

請問若想在已標示黃底紅字之儲存格內輸入任意資料做分類,應如何做更改(如附件)
作者: Kubi    時間: 2017-3-17 10:12

回復 10# oak0723-1
請參考
[attach]26823[/attach]
作者: oak0723-1    時間: 2017-3-17 13:23

非常感恩





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