配列の中に日付やその他数値を含む値が格納されており、その配列の中から一番若い日付を取得する方法を教えて頂けないでしょうか。
在庫の管理上、コードと賞味期限およびその個数を管理しております。
そのリストをdictionaryで取得し、それぞれのコードをキーとして賞味期限と個数をアイテムに配列形式で格納しております。
そこで特定のキーに格納されてるアイテムである賞味期限と個数の配列から一番若い日付を取得する方法はございますでしょうか。
配列形式のアイテムに対して、worksheet関数のminを使用しましたが、
①賞味期限のシリアル値よりも個数の方が数値としては小さいため一番少ない個数が取得されてしまうこと、
②そもそもアイテムの配列形式として格納されている日付が数値として認識されず、個数が全て空欄だったとしても0が返される
という2点が問題として起こってしまいました。
以下にサンプルコードとExcelのスクショを掲載致しましたので、参考にして頂けますと幸いです。
なお、今回は便宜上、キーとなる特定のコードは 11行目 の 6018 と致しました。
VBA
1Sub dictionaryArray() 2 3Dim myDictionary As Object 4Set myDictionary = CreateObject("Scripting.Dictionary") 5 6Dim foundCd As Range 7Set foundCd = Cells.Find(what:="コード", lookat:=xlWhole) 8Dim i As Long, j As Long, n As Long 9Dim BBarray() As Variant 10 11'コードをKeyとして、コードに連なる賞味期限、個数をItemとして配列形式に格納 12For i = foundCd.Row + 1 To Cells(Rows.Count, foundCd.column).End(xlUp).Row 13 'UBoundでエラーがでないように再定義。 14 ReDim BBarray(0) As Variant 15 For j = foundCd.column + 1 To foundCd.End(xlToRight).column 16 n = UBound(BBarray) + 1 17 ReDim Preserve BBarray(n) 18 BBarray(n) = Cells(i, j).Value 'BBarray(0)には何も格納されていないことになる。 19 Next j 20' dictionaryにコードとその賞味期限、個数を登録。 21 myDictionary.Add Cells(i, foundCd.column).Value, BBarray 22Next i 23 24'dictionaryのKey、Itemをインデックスで指定できるように変数に格納。 25Dim BBkey As Variant, BBitem As Variant 26BBkey = myDictionary.keys 27BBitem = myDictionary.items 28 29Dim cd As Long 30cd = 6018 31 32'cdのBBkeyのインデックスを調べる。 33Dim cdIndex As Long 34For cdIndex = 0 To UBound(BBkey) 35 If (BBkey(cdIndex) = cd) Then 36 Exit For 37 End If 38Next cdIndex 39 40Debug.Print Application.WorksheetFunction.Min(BBitem(cdIndex)) 41 42End Sub
お手数おかけしますが、教えて頂けますと幸いです。
回答4件
あなたの回答
tips
プレビュー