Board logo

標題: [發問] EXCEL根據條件篩選 [打印本頁]

作者: ffff56666    時間: 2018-10-8 23:59     標題: EXCEL根據條件篩選

各位大大, 有工作的員工能用函數按英文職位名稱排序嗎?
求各位指教,謝謝!
作者: faye59    時間: 2018-10-9 04:09

回復 1# ffff56666


    函數我想不到...
不過可以用簡單的巨集解決你的問題。
  1. Private Sub CommandButton1_Click()
  2. [G2:I1000] = ""
  3. [L2:N1000] = ""
  4. For Each aa In Range([A2], [A2].End(xlDown))
  5. Select Case aa.Offset(, 3)
  6.     Case "Yes"
  7.         nextrow = Sheets("Sheet1").Cells(Rows.Count, 7).End(xlUp).Row + 1
  8.         form = 7
  9.     Case "No"
  10.         nextrow = Sheets("Sheet1").Cells(Rows.Count, 12).End(xlUp).Row + 1
  11.         form = 12
  12. End Select
  13. Cells(nextrow, form) = nextrow - 1
  14. Cells(nextrow, form + 1) = aa.Offset(, 1)
  15. Cells(nextrow, form + 2) = aa.Offset(, 2)
  16. Next
  17. End Sub
複製代碼

作者: hcm19522    時間: 2018-10-9 09:58

(先)H2:I2{=IFERROR(INDEX(B:B,RIGHT(SMALL(IF($D$2:$D$9="Yes",CODE($B$2:$B$9)/1%+ROW(B$2:B$9)),ROW(A1)),2)),"")

G2=IF(H2="","",COUNTIF(H$2:H2,"<>"))
作者: ffff56666    時間: 2018-10-10 21:45

謝謝各位解答, 問題解決了
作者: Andy2483    時間: 2023-6-8 14:20

謝謝論壇,謝謝各位前輩
後學學習陣列與字典,(割雞牛刀)方法學習方案如下,請各位前輩指教

執行前:
[attach]36553[/attach]

執行結果:
[attach]36554[/attach]


Option Explicit
Sub TEST()
Dim Brr, Crr(1 To 1000, 1 To 3), V, Z, i&, R&, N&, T$
'↑宣告變數
Set Z = CreateObject("Scripting.Dictionary")
'↑令Z變數是 字典
Brr = Range([D2], [B65536].End(3))
'↑令Brr變數是 二維陣列,以B~D欄儲存格值帶入陣列中
With [G2].Resize(UBound(Brr), 3)
'↑以下是關於[G2]擴展向下Brr陣列縱向最大索引列號,向右擴展3欄範圍儲存格的程序
   .Value = Brr
   '↑令該區域儲存格值是 Brr陣列值
   .Sort KEY1:=.Item(3), Order1:=2, Header:=2, _
         Key2:=.Item(1), Order2:=1, Header:=2, Orientation:=1
   '↑令該區域儲存格做排序
   Brr = .Value: .ClearContents: .Offset(0, 5).ClearContents
   '↑令Brr陣列換裝盛排序過後的該區域儲存格值,
   '令結果區域儲存格清除內容

End With
For i = 1 To UBound(Brr)
'↑設順迴圈
   T = Brr(i, 3): V = Z(T)
   '↑令T變數是第1欄陣列值,V變數是T變數查Z字典的item
   If Not IsArray(V) Then V = Crr
   '↑如果V變數不是陣列? True就令V變數是Crr陣列
   R = Z(T & "|r") + 1: Z(T & "|r") = R
   '↑令R變數是T變數連接"|r"組成的新字串查Z字典item值+1,
   '令T變數連接"|r"組成的字串在Z字典的key,所對應的item是 R變數

   V(R, 1) = R: V(R, 2) = Brr(i, 1): V(R, 3) = Brr(i, 2)
   '↑令V陣列依序寫入值
   Z(T) = V
   '↑令V陣列放回Z字典中
Next
For Each V In Z.KEYS
'↑設逐項迴圈!令V變數是Z字典的key
   If Not IsArray(Z(V)) Then GoTo i01
   '↑如果以V變數查Z字典回傳item不是陣列? True就跳到標示i01位置繼續執行
   Cells(2, 7 + N * 5).Resize(Z(V & "|r"), 3) = Z(V)
   '↑令字典中的陣列item寫入儲存格中
   N = N + 1
   '↑令N變數累加1
i01: Next
Set Z = Nothing: Erase Brr, Crr
End Sub




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