Sub UserForm_InitializeCall()
Dim dicTmp As Object
Dim VntTmp As Variant
Dim CpyVnttmp As Variant
Dim VntV As Variant
Dim i As Integer
Dim j As Integer
Set dicTmp = CreateObject("Scripting.Dictionary") 'ディクショナリーを使わないと要らないでしょう。
With Worksheets("生産者")
VntTmp = .Range("A2", .Range("D65536").End(xlUp)).Value
End With
'If Not IsArray(VntTmp) Then 'ここから3行は普通は必要ないようです。
' VntTmp = Array(VntTmp) '上の3行でリストの元を作成してる場合必要ないようです。
'End If
'VntTmpの行数は分からないのが普通です。
i = UBound(VntTmp, 1) 'データの行数と合う
j = UBound(VntTmp, 2) 'データの項目数と合う
VntTmp(10 + 1, 2 + 1) = "Chiba" 'データの部分だけ数えると行、カラムどちらも+1しないとずれますね。添え字は0から。
CpyVnttmp = VntTmp '2次元の配列のコピーがこれで出来るんですが、何か分かりづらいですよね。
For Each VntV In VntTmp 'この場合のように隙間が無いワークシートから表を作る場合は必要ないようです。
On Error Resume Next
dicTmp.Add VntV, Empty
On Error GoTo 0
Next
With 農家選択.ListBox1
.List = VntTmp
.ColumnWidths = "30;150;100;20"
.ColumnCount = 4
End With
Set dicTmp = Nothing 'ディクショナリーを使わないと要らないでしょう。
農家選択.Show
End Sub
デバックで見たんですが、確かに実体が作られてました。VBとか一般の言語はアドレスだけが
コピーされるはずです。
なにやらまたまた難しそうなことを考えているようですね。
今週に入って急に寒くなりましたね~。
そちらの雪はいかがですかぁ?
でもこれからは一晩で根雪と言うこともあるので、油断は出来ないのですが、油断してます。
Excelは役に立つことをするのには、一番適してますね。VBなどで最初から最後まで作るのはかなり大変ですからね。ExcelならVBAでやりたいとこだけできます。但し、ガラパゴスソフト(約してガラソフ(^0^))ですので一般的なソフトとは趣がななり違います。