私はVBやVBAに精通していませんが、私はプログラミングに精通しています。VBAでリストを作成するにはどうすればいいですか?
私はExcel 2016で作業していて、別のワークシートのセルの列に基づいてコンボボックス(ユーザーフォームに表示されます)を作成しようとしています。私は空のセル、重複、いくつかの既知の値を削除し、次に私が巻き上げるものを並べ替える必要があります。
私は大部分は動作していました(私はすべてをソートしていました)が、それを上書きする前に保存しませんでした。それはthis answerに基づいていました。私はそれにソートを追加する方法を見つけることができませんでした。それは辞書を使って、ユーザーフォームをポップアップしてコンボボックスに入力するのに5秒かかりました。リストには1000個のセルしかないので、辞書はこのプロジェクトのデータ構造には複雑すぎるようです。
私はhereからコードを取得しようとしていますが、変数名が非常に曖昧で、VBに慣れていないので、何をしているのか分かりません。
この時点で、私は自分の検索を行い、置き換えて並べ替えるだけで、コピペスタに頼らないと思っています。 VBAにList()オブジェクトがあるかどうかはわかりません。誰もが配列と辞書について話しています。私はソート機能を提供するデータ構造を使用したいと思います。
このようなデータ構造にはどのようなデータ構造を使用しますか?
私は主に動作するコードを再構築しました。これは明らかでない場合、これはUserForm Initializeにあります。
Private Sub UserForm_Initialize()
'*Start with empty inputs
InitialsTextBox.Value = ""
MakeComboBox.Clear
ModelComboBox.Clear
'*Fill the Combo Boxes
Dim oDictionary As Object
Dim strCellContent As String
Dim rngComboValues As Range
Dim rngCell As Range
Set rngComboValues = Sheets("BOM").Range("B:B")
Set oDictionary = CreateObject("Scripting.Dictionary")
For Each rngCell In rngComboValues
strCellContent = rngCell.Value
If Not oDictionary.exists(strCellContent) Then
oDictionary.Add strCellContent, 0
End If
Next rngCell
For Each itm In oDictionary.keys
Me.MakeComboBox.AddItem itm
Next itm
Set oDictionary = Nothing
End Sub
編集/更新
以下の答えは良いものですが、VBAコードを実行しているコンピュータにインストールする追加のライブラリが必要です。これはほとんどの場合(.NETはかなり一般的ですが)うまくいくかもしれませんが、このプロジェクトでは依存関係を持たない、あるいはVBA言語を残すことを強く望みます。これが実行される環境は、そのようなことを好まないかもしれません。
これは正しい方向に進んでくれるのですか?http://stackoverflow.com/questions/3587662/how-do-i-sort-a-collection – sous2817
辞書はコレクションですか?他の方法がありますか?それとも、関係していないのですか? – YetAnotherRandomUser
辞書はコレクションのタイプです – sous2817