返回列表 上一主題 發帖

在不固定範圍內找出相同資料

在不固定範圍內找出相同資料

如何在不固定範圍內(如圖01的 Z12:AK~,資料列數由Range(.[D12], .[D65536].End(xlUp)決定)
找出相同的廠商,然後把相同的廠商排列在一起,資料轉成像圖02這樣

圖02"成品"欄位的數值,由圖01的"QTY"欄x"DEMAND PCS"欄

01

01.PNG
2018-10-18 22:28

02

02.PNG
2018-10-18 22:28

ACC.rar (4.32 KB)
Jess

A12:B23{=IFERROR(INDIRECT("工作表1!"&TEXT(RIGHT(SMALL(IF((MOD(COLUMN($AB12:$AK24),3)=1)*(工作表1!$AB$12:$AK$24>0),CODE(工作表1!$AB$12:$AK$24)/1%%+ROW(AB$12:AK$24)/1%+COLUMN($AB12:$AK24)-(COLUMN(A1)=2)*2),ROW(A1)),4),"!R0C00"),),"")

G12:G23{=IF(A12="","",SUM(IFERROR(工作表1!M$12:M$24*(工作表1!AB$12:AK$24=A12)*(工作表1!Z$12:AI$24=B12)*工作表1!AA$12:AJ$24,)))

I12:I23{=INDEX(工作表1!D:D,LARGE(IF((工作表1!AB$12:AK$24=A12)*(工作表1!Z$12:AI$24=B12),ROW(D$12:D$24)),1))&""
隨意窩 "EXCEL迷"  blog  或 http://blog.xuite.net/hcm19522/twblog
已收集5000篇 EXCEL函數

TOP

回復 1# jesscc

請參考
  1. Sub test()
  2.     Dim arr
  3.     Dim brr()
  4.     arr = Range("D12", "AK" & [D65536].End(xlUp).Row)
  5.     For i = 1 To UBound(arr)
  6.         For j = 23 To 33 Step 3
  7.             If arr(i, j) <> "" Then
  8.                 n = n + 1
  9.                 ReDim Preserve brr(1 To 9, 1 To n)
  10.                 brr(1, n) = arr(i, j + 2)
  11.                 brr(2, n) = arr(i, j)
  12.                 brr(7, n) = arr(i, 10) * arr(i, j + 1)
  13.                 brr(9, n) = arr(i, 1)
  14.             End If
  15.         Next j
  16.     Next i
  17.     With Sheets("工作表2")
  18.         .Rows("12:65536").Delete
  19.         .[A12].Resize(n, 9) = Application.Transpose(brr)
  20.         .Select
  21.     End With
  22. End Sub
複製代碼

TOP

回復 3# Kubi

跟需求目的稍有差異,相同的廠商沒有排列在一起。不過這部分用人工篩選也沒關係,謝謝大大。
另外有個小問題arr和brr()有什麼差別?
Jess

TOP

回復 4# jesscc
Q1:相同的廠商沒有排列在一起
A1:只要在With Sheets("工作表2")內的.Select之前插入底下這行程式碼
.[A12].Resize(n, 9).Sort key1:=.[A12]

Q2:arr和brr()有什麼差別?
A2:arr:屬靜態陣列,用在可確認陣列大小的情況
brr():屬動態陣列,用在無法確認陣列大小的情況

TOP

謝謝K大的幫忙
Jess

TOP

        靜思自在 : 做該做的事是智慧,做不該做的事是愚癡。
返回列表 上一主題