Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Dear Group,
I am completely stumped by this. I am filling a dictionary and then looping over an array made from its keys later. However, if I loop to the count size of the dictionary I will hit an error. The reason seems to be that the array that is made via the keys method, is one element shorter than the dictionary count? Sample code below: Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '' INPUTS HERE '' Public Const distance As Single = 26.1 Public lrods As Dictionary Public lrods_1 As Dictionary Public lrods_9 As Dictionary Public worst As Integer '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' Sub Identify_lrods() Dim ws As Worksheet Dim i As Integer Set lrods = New Dictionary Set lrods_1 = New Dictionary Set lrods_9 = New Dictionary 'look at sheet 3 Set ws = ThisWorkbook.Worksheets("3") 'loop through cells till empty i = 0 Do While IsEmpty(ws.Range("J" & 3 + i)) < True If ws.Range("P" & 3 + i) (distance / 1000) And ws.Range("B" & 3 + i) = 1 Then _ lrods_1.Add ws.Range("J" & CStr(3 + i)), ws.Range("P" & CStr(3 + i)) If ws.Range("P" & 3 + i) (distance / 1000) And ws.Range("B" & 3 + i) = 9 Then _ lrods_9.Add ws.Range("J" & CStr(3 + i)), ws.Range("P" & CStr(3 + i)) i = i + 2 'skip every second Loop Debug.Print "after filling dictionaries - the i value was", i - 2 Debug.Print "dictionary info", lrods_9.Count, UBound(lrods_9.Keys) End Sub Many thanks, Tim |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On Aug 18, 11:36*am, thorgan wrote:
Dear Group, I am completely stumped by this. I am filling a dictionary and then looping over an array made from its keys later. However, if I loop to the count size of the dictionary I will hit an error. The reason seems to be that the array that is made via the keys method, is one element shorter than the dictionary count? Sample code below: Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '' *INPUTS HERE '' Public Const distance As Single = 26.1 Public lrods As Dictionary Public lrods_1 As Dictionary Public lrods_9 As Dictionary Public worst As Integer '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' Sub Identify_lrods() Dim ws As Worksheet Dim i As Integer Set lrods = New Dictionary Set lrods_1 = New Dictionary Set lrods_9 = New Dictionary 'look at sheet 3 Set ws = ThisWorkbook.Worksheets("3") 'loop through cells till empty i = 0 Do While IsEmpty(ws.Range("J" & 3 + i)) < True * * If ws.Range("P" & 3 + i) (distance / 1000) And ws.Range("B" & 3 + i) = 1 Then _ * * * * lrods_1.Add ws.Range("J" & CStr(3 + i)), ws.Range("P" & CStr(3 + i)) * * If ws.Range("P" & 3 + i) (distance / 1000) And ws.Range("B" & 3 + i) = 9 Then _ * * * * lrods_9.Add ws.Range("J" & CStr(3 + i)), ws.Range("P" & CStr(3 + i)) * * i = i + 2 'skip every second Loop Debug.Print "after filling dictionaries - the i value was", i - 2 Debug.Print "dictionary info", lrods_9.Count, UBound(lrods_9.Keys) End Sub Many thanks, Tim UPDATE: A colleague figured this out - the arrays created from dictionaries seem to start their index at zero. However, something odd came of that. Later the .keys array was assigned to an array dimensioned as (1 to dictionary.count). No errors occurred, but it seems that the array was shifted - i.e. filled with, say, 15 keys, but array(15) would return an error. Odd. Any thoughts? Tim |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
What do Array(0) through Array(14) return?
-- HTH, Barb Reinhardt "thorgan" wrote: On Aug 18, 11:36 am, thorgan wrote: Dear Group, I am completely stumped by this. I am filling a dictionary and then looping over an array made from its keys later. However, if I loop to the count size of the dictionary I will hit an error. The reason seems to be that the array that is made via the keys method, is one element shorter than the dictionary count? Sample code below: Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '' INPUTS HERE '' Public Const distance As Single = 26.1 Public lrods As Dictionary Public lrods_1 As Dictionary Public lrods_9 As Dictionary Public worst As Integer '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' Sub Identify_lrods() Dim ws As Worksheet Dim i As Integer Set lrods = New Dictionary Set lrods_1 = New Dictionary Set lrods_9 = New Dictionary 'look at sheet 3 Set ws = ThisWorkbook.Worksheets("3") 'loop through cells till empty i = 0 Do While IsEmpty(ws.Range("J" & 3 + i)) < True If ws.Range("P" & 3 + i) (distance / 1000) And ws.Range("B" & 3 + i) = 1 Then _ lrods_1.Add ws.Range("J" & CStr(3 + i)), ws.Range("P" & CStr(3 + i)) If ws.Range("P" & 3 + i) (distance / 1000) And ws.Range("B" & 3 + i) = 9 Then _ lrods_9.Add ws.Range("J" & CStr(3 + i)), ws.Range("P" & CStr(3 + i)) i = i + 2 'skip every second Loop Debug.Print "after filling dictionaries - the i value was", i - 2 Debug.Print "dictionary info", lrods_9.Count, UBound(lrods_9.Keys) End Sub Many thanks, Tim UPDATE: A colleague figured this out - the arrays created from dictionaries seem to start their index at zero. However, something odd came of that. Later the .keys array was assigned to an array dimensioned as (1 to dictionary.count). No errors occurred, but it seems that the array was shifted - i.e. filled with, say, 15 keys, but array(15) would return an error. Odd. Any thoughts? Tim |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
On Aug 18, 1:20*pm, Barb Reinhardt
wrote: What do Array(0) through Array(14) return? -- HTH, Barb Reinhardt "thorgan" wrote: On Aug 18, 11:36 am, thorgan wrote: Dear Group, I am completely stumped by this. I am filling a dictionary and then looping over an array made from its keys later. However, if I loop to the count size of the dictionary I will hit an error. The reason seems to be that the array that is made via the keys method, is one element shorter than the dictionary count? Sample code below: Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '' *INPUTS HERE '' Public Const distance As Single = 26.1 Public lrods As Dictionary Public lrods_1 As Dictionary Public lrods_9 As Dictionary Public worst As Integer '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' '''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''' Sub Identify_lrods() Dim ws As Worksheet Dim i As Integer Set lrods = New Dictionary Set lrods_1 = New Dictionary Set lrods_9 = New Dictionary 'look at sheet 3 Set ws = ThisWorkbook.Worksheets("3") 'loop through cells till empty i = 0 Do While IsEmpty(ws.Range("J" & 3 + i)) < True * * If ws.Range("P" & 3 + i) (distance / 1000) And ws.Range("B" & 3 + i) = 1 Then _ * * * * lrods_1.Add ws.Range("J" & CStr(3 + i)), ws.Range("P" & CStr(3 + i)) * * If ws.Range("P" & 3 + i) (distance / 1000) And ws.Range("B" & 3 + i) = 9 Then _ * * * * lrods_9.Add ws.Range("J" & CStr(3 + i)), ws.Range("P" & CStr(3 + i)) * * i = i + 2 'skip every second Loop Debug.Print "after filling dictionaries - the i value was", i - 2 Debug.Print "dictionary info", lrods_9.Count, UBound(lrods_9.Keys) End Sub Many thanks, Tim UPDATE: A colleague figured this out - the arrays created from dictionaries seem to start their index at zero. However, something odd came of that. Later the .keys array was assigned to an array dimensioned as (1 to dictionary.count). No errors occurred, but it seems that the array was shifted - i.e. filled with, say, 15 keys, but array(15) would return an error. Odd. Any thoughts? Tim- Hide quoted text - - Show quoted text - Hi Barb, thanks for your interest. The array elements are now correctly filled with the keys. I had defined the array to be array(1 to 15), rather than dim array(14). So I didn't think that after the array=dictionary.keys assignment it would work as the latter rather than the former (or the former with an error). Kind regards, Tim |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
count the number of rows with entries greater than zero | Excel Worksheet Functions | |||
Defining Variable Type for Items and Keys in Dictionary | Excel Programming | |||
Count of Number Values Greater Than, Less Than | Excel Worksheet Functions | |||
count a number that is less than a number and greater than a numbe | Excel Worksheet Functions | |||
dictionary keys | Excel Programming |