Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 553
Default Queing Math Problem using VBA and Dictionary Object

I have a problem I am tryign to solve using VBA. I was wondering of anyone
was up to the challenge in helping me solve the issue. I have two sets of
data stored in two dictionaries. I want to be able to compare the data and
solve and come up with a solution to what has changed in the revised data.

Assume I have que. In this que, I have empty spots. For fun lets say its a
que at a movie theatre with people in line who can also save spots for
friends who have not arrived yet. The empty spots are as follows:

Position 157
Position 153
Position 152
Position 136
Position 106
Position 105
Position 104
Position 103
Position 95
Position 59
Position 35
Position 3

Then a bunch of new empty positions are created for the que. For fun lets
say that some new people enter the que and/or these new or existing people
save additional spots for friends. The new empty slots in the que are as
follows:

Position 163
Position 162
Position 161
Position 160
Position 158
Position 154
Position 153
Position 137
Position 107
Position 106
Position 105
Position 104
Position 96
Position 60
Position 36
Position 20
Position 3

I will always know in advance what the total difference in positions (empty
+ filled) is. In this example I will know in advance that the ques differ by
6 spaces. And I will always have the two resulting data sets. I need a
function to figure out where the empty slots were created in the original que
and where the new filled spots are. I want to be able to compare the data in
the ques (dictionary object) and attempt to figure out where the 6 spaces
came about.

You know from looking at the data above that Position 3 is still the same.
So any new position had to be created after Position 3.

The correct answer here is that I created 1 new empty spot at Position 20, 4
new empty spots at Positions 159-162, and 1 new filled spot at Position 163.
1 + 4 + 1 = 6.

Can anyone provide me with some insight as to how to compare these data sets
to solve this problem? I might be more of a math question than a VBA
question but I since I am using VBA, it will still be helpful!

Thanks

EM
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 9,101
Default Queing Math Problem using VBA and Dictionary Object

I put 1 column of numbers (deleted word postiion) in column A and the other
in column B and ran this macro. This is similar to code I wrote for somebody
last week. It is esier doing this in excel the using arrays because in excel
you can easily add rows.

When using arrays if you put a piece of data in the middle you have to push
all the members of the array down one position.

I like doing things like this in C Language where you can easily create
linked lists using pointers. In C to add a member in the middle of an array
you allocate memory for the new item and the you use pointer to add the new
member into a linked list.

Sub lineupdata()

RowCount = 1
Do While Range("A" & RowCount) < "" Or _
Range("B" & RowCount) < ""

Select Case (Range("B" & RowCount).Value - Range("A" & RowCount).Value)
Case Is < 0
Range("B" & RowCount).Insert shift:=xlShiftDown
Case Is = 0
'Do nothing
Case Is 0
Range("A" & RowCount).Insert shift:=xlShiftDown
End Select

RowCount = RowCount + 1
Loop

End Sub


"ExcelMonkey" wrote:

I have a problem I am tryign to solve using VBA. I was wondering of anyone
was up to the challenge in helping me solve the issue. I have two sets of
data stored in two dictionaries. I want to be able to compare the data and
solve and come up with a solution to what has changed in the revised data.

Assume I have que. In this que, I have empty spots. For fun lets say its a
que at a movie theatre with people in line who can also save spots for
friends who have not arrived yet. The empty spots are as follows:

Position 157
Position 153
Position 152
Position 136
Position 106
Position 105
Position 104
Position 103
Position 95
Position 59
Position 35
Position 3

Then a bunch of new empty positions are created for the que. For fun lets
say that some new people enter the que and/or these new or existing people
save additional spots for friends. The new empty slots in the que are as
follows:

Position 163
Position 162
Position 161
Position 160
Position 158
Position 154
Position 153
Position 137
Position 107
Position 106
Position 105
Position 104
Position 96
Position 60
Position 36
Position 20
Position 3

I will always know in advance what the total difference in positions (empty
+ filled) is. In this example I will know in advance that the ques differ by
6 spaces. And I will always have the two resulting data sets. I need a
function to figure out where the empty slots were created in the original que
and where the new filled spots are. I want to be able to compare the data in
the ques (dictionary object) and attempt to figure out where the 6 spaces
came about.

You know from looking at the data above that Position 3 is still the same.
So any new position had to be created after Position 3.

The correct answer here is that I created 1 new empty spot at Position 20, 4
new empty spots at Positions 159-162, and 1 new filled spot at Position 163.
1 + 4 + 1 = 6.

Can anyone provide me with some insight as to how to compare these data sets
to solve this problem? I might be more of a math question than a VBA
question but I since I am using VBA, it will still be helpful!

Thanks

EM

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 553
Default Queing Math Problem using VBA and Dictionary Object

Thanks for the interest! I see what you have done. You have created a
visual which illustrates the two data sets side-by-side as seen below in
Column A and Column B. You can not eye-ball where the insertions likely
occured. I need to now summarize the results as follows:

Empty spots that remained the same: 3

Empty spots that Moved:
35(1),59(1),95(1),103(1),104(1),105(1),106(1),136( 1),152(1),153(1),157(1)

New empty spots: 20,160,161,162,163

Note the () above denote the movement of the original spot (i.e. (1) means
it moved 1 spot.

I assuming that I have to loop through column B and compare to the values in
column A using the maximum difference (6 in this example) that I will always
know in advance as some sort of range marker. So because 3 exists in both
columns, it has remained the same. Because 20 does not exist and is not
within 6 spaces of the next position, it likely is a new spot. Because 36 is
within 6 spots of the previous value in the first column (35) and not withing
6 spots of the next highest value in first column (59) it must be a shifted
position stemming from 35 (i.e. 1 shift). I am assuming that you would have
to delete the values in column A when successufully compared so that when you
get to 160 in column B you would test to see if there are any previous values
in A to compare it to. If not, then it would qualify as a new empty slot.
(Just thinking out loud here). Once I have this licked in Excel I will try
to migrate it into code.

Col A Col B
163
162
161
160
158
157
154
153 153
152
137
136
107
106 106
105 105
104 104
103
96
95
60
59
36
35
20
3 3

Thanks

EM

"Joel" wrote:

I put 1 column of numbers (deleted word postiion) in column A and the other
in column B and ran this macro. This is similar to code I wrote for somebody
last week. It is esier doing this in excel the using arrays because in excel
you can easily add rows.

When using arrays if you put a piece of data in the middle you have to push
all the members of the array down one position.

I like doing things like this in C Language where you can easily create
linked lists using pointers. In C to add a member in the middle of an array
you allocate memory for the new item and the you use pointer to add the new
member into a linked list.

Sub lineupdata()

RowCount = 1
Do While Range("A" & RowCount) < "" Or _
Range("B" & RowCount) < ""

Select Case (Range("B" & RowCount).Value - Range("A" & RowCount).Value)
Case Is < 0
Range("B" & RowCount).Insert shift:=xlShiftDown
Case Is = 0
'Do nothing
Case Is 0
Range("A" & RowCount).Insert shift:=xlShiftDown
End Select

RowCount = RowCount + 1
Loop

End Sub


"ExcelMonkey" wrote:

I have a problem I am tryign to solve using VBA. I was wondering of anyone
was up to the challenge in helping me solve the issue. I have two sets of
data stored in two dictionaries. I want to be able to compare the data and
solve and come up with a solution to what has changed in the revised data.

Assume I have que. In this que, I have empty spots. For fun lets say its a
que at a movie theatre with people in line who can also save spots for
friends who have not arrived yet. The empty spots are as follows:

Position 157
Position 153
Position 152
Position 136
Position 106
Position 105
Position 104
Position 103
Position 95
Position 59
Position 35
Position 3

Then a bunch of new empty positions are created for the que. For fun lets
say that some new people enter the que and/or these new or existing people
save additional spots for friends. The new empty slots in the que are as
follows:

Position 163
Position 162
Position 161
Position 160
Position 158
Position 154
Position 153
Position 137
Position 107
Position 106
Position 105
Position 104
Position 96
Position 60
Position 36
Position 20
Position 3

I will always know in advance what the total difference in positions (empty
+ filled) is. In this example I will know in advance that the ques differ by
6 spaces. And I will always have the two resulting data sets. I need a
function to figure out where the empty slots were created in the original que
and where the new filled spots are. I want to be able to compare the data in
the ques (dictionary object) and attempt to figure out where the 6 spaces
came about.

You know from looking at the data above that Position 3 is still the same.
So any new position had to be created after Position 3.

The correct answer here is that I created 1 new empty spot at Position 20, 4
new empty spots at Positions 159-162, and 1 new filled spot at Position 163.
1 + 4 + 1 = 6.

Can anyone provide me with some insight as to how to compare these data sets
to solve this problem? I might be more of a math question than a VBA
question but I since I am using VBA, it will still be helpful!

Thanks

EM

Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Iterating over a nested Dictionary object donvreug Excel Programming 4 October 19th 08 09:20 AM
iterating through a Dictionary object Ben Excel Programming 4 September 8th 08 06:07 PM
ByRef argument type mismatch when passing dictionary object signon77 Excel Programming 7 January 8th 08 10:03 PM
Using the Dictionary object vqthomf Excel Programming 5 April 10th 07 05:42 PM
Dictionary Object in Windows XP Alan Beban[_2_] Excel Programming 5 March 13th 05 08:04 PM


All times are GMT +1. The time now is 07:26 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"