返回列表 上一主題 發帖

[發問] 先不重複篩選後,並自動設為下拉式選單

回復 1# iceandy6150


自己試試吧!
  1. Sub 下拉選單()

  2. '工作表2的A欄
  3. Arr = Range([工作表2!A2], [工作表2!A65535].End(3))
  4. List$ = ""
  5. For R = 1 To UBound(Arr)  '去除重複
  6.   If InStr(List, Arr(R, 1)) = 0 Then List = List & "," & Arr(R, 1)
  7. Next
  8. With [G2:G100].Validation  '下拉格式的範圍自己改
  9.   .Delete
  10.   .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=List
  11. End With

  12. '工作表2的B欄
  13. Arr = Range([工作表2!B2], [工作表2!B65535].End(3))
  14. List = ""
  15. For R = 1 To UBound(Arr)  '去除重複
  16.   If InStr(List, Arr(R, 1)) = 0 Then List = List & "," & Arr(R, 1)
  17. Next
  18. With [H2:H100].Validation  '下拉格式的範圍自己改
  19.   .Delete
  20.   .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=List
  21. End With

  22. '工作表2的C欄
  23. Arr = Range([工作表2!C2], [工作表2!C65535].End(3))
  24. List = ""
  25. For R = 1 To UBound(Arr)  '去除重複
  26.   If InStr(List, Arr(R, 1)) = 0 Then List = List & "," & Arr(R, 1)
  27. Next
  28. With [I2:I100].Validation  '下拉格式的範圍自己改
  29.   .Delete
  30.   .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=List
  31. End With
  32. End Sub
複製代碼
自動設下拉式選單0518.rar (25.74 KB)
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 4# n7822123


   
原寫法有瑕疵,未考慮項目可能有互相包含的字串

修正如下 (紅色部分)



Sub 下拉選單()

'工作表2的A欄
Arr = Range([工作表2!A2], [工作表2!A65535].End(3))
List$ = ""
For R = 1 To UBound(Arr)  '去除重複
  If InStr("," & List & ",", "," & Arr(R, 1) & ",") = 0 Then List = List & "," & Arr(R, 1)
Next
With [G2:G100].Validation  '下拉格式的範圍自己改
  .Delete
  .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=List
End With

'工作表2的B欄
Arr = Range([工作表2!B2], [工作表2!B65535].End(3))
List = ""
For R = 1 To UBound(Arr)  '去除重複
  If InStr("," & List & ",", "," & Arr(R, 1) & ",") = 0 Then List = List & "," & Arr(R, 1)
Next
With [H2:H100].Validation  '下拉格式的範圍自己改
  .Delete
  .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=List
End With

'工作表2的C欄
Arr = Range([工作表2!C2], [工作表2!C65535].End(3))
List = ""
For R = 1 To UBound(Arr)  '去除重複
  If InStr("," & List & ",", "," & Arr(R, 1) & ",") = 0 Then List = List & "," & Arr(R, 1)
Next
With [I2:I100].Validation  '下拉格式的範圍自己改
  .Delete
  .Add Type:=xlValidateList, Operator:=xlBetween, Formula1:=List
End With

End Sub
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 n7822123 於 2020-5-19 11:17 編輯

回復 1# iceandy6150

【第二個自動化完美做法】
就是既然準則在[用途類別(科目)] --(工作表1的I欄)
那按下按鈕後
會自動把工作表1的I欄,設定下拉式清單,一次50列,來源是工作表2的H
然後I欄下拉選定某個值後
會自動把工作表1的H欄,填入工作表2對照表格中相對應的值
會自動把工作表1的G欄,填入工作表2對照表格中相對應的值
(連動的概念)


原來你的需求只是這麼簡單~ 10分鐘搞定
這我常常幫公司的同事做
不需命名名稱、不用函數
看你有沒有心想學別人的做法



xls版本是給舊版Excel的人使用的,
2007以後請開xlsm版本


自動設下拉式選單0519.rar (46.43 KB)
程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

回復 10# 准提部林


幾百上千行的內容用字典檔擠成字串, 再塞進清單中, 會不會超過文字長度限制???

回準大~原來字典的Key 與 item 都可以是 String,而String 最多可裝大約 20 億 ( 2^31)個字元。

而此做法每個item 已不是 String,變成物件,物件又可以定義多個屬性,每個屬性都可以是String

只要單一 String 變數 不超過 20 億 ( 2^31)個字元,就不會有問題。

至於字典 key的數量與物件能擴充的屬性數量,網路上查不到相關資訊

不過我猜字典跟陣列一樣,是虛擬的,能裝多少東西取決於"電腦記憶體"

如此行程式 Arr = Range([A1], Cells(Rows.Count, Columns.Count))

使用新版Excel 的人執行這行基本上都會跳出 "記憶體不足"  (除非你電腦記憶體非常大)

程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 n7822123 於 2020-5-20 00:21 編輯

回復 12# iceandy6150


有搜尋ByVal Target As Range的用法,但還不是很懂,我們這版之前也有相關主題

不是三言兩語學得來的,直接給你網址吧~ (GTW 這個人寫的 VBA教學很適合 VBA新手看)

目錄第14項    當然他只介紹幾種常用的而以,要更詳細還是買本書吧!  


https://blog.gtwang.org/programming/vba

另外是,我只會插入AXTIVE的按鈕,裡面放程式碼

你那兩個按鈕...好像也不是按鈕,為什麼可以按啊? 真神奇

任何圖片 滑鼠右鍵 > 指定巨集  都可以指定你要點擊圖片時,所要執行的巨集

程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

        靜思自在 : 一個缺口的杯子,如果換一個角度看它,它仍然是圓的。
返回列表 上一主題