Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
KR KR is offline
external usenet poster
 
Posts: 121
Default using array, Match, trying to eliminate duplicates - how to return or translate result to a boolean?

I am cycling through some larger multidimensional arrays to find records
that match certain criteria. When I find a match, I copy a row of data to a
smaller array, which ultimately populates a row in my spreadsheet (after I
find all the matches, I add them to the target cell with a chr(10) between
each, to put each match on a new "row" within the cell).

I've run into a problem with duplicate matches, which results in my row
having duplicate data in it. I think I know how to address this, I'm just
not sure of the syntax to make it work.

Assuming I will never have more than 10 good (non-duplicate) matches, and I
do have a unique field to compare, I was thinking of adding a new
one-dimensional array and clearing it between excel rows. Each time I find
an entry that matches my criteria, I would just use the match function to
see if that value was already in the one dimensional array, and if so, skip
to the next match (if it isn't in the 1-D array, add it as normal).

So I've put some code below, but it returns a position or N/A. What is the
best way to translate that into a boolean so I can use it in my IF
statement?

'--------------------------------------------------------------
Dim CompareArray(1 to 10)
Dim CompareItem as String
Dim FoundDuplicate as Boolean

'do stuff until a match is found

FoundMatch = Excel.worksheetfunction.Match(CompareItem, CompareArray,0)

'how do I translate FoundMatch (integer or N/A) into FoundDuplicate Boolean?

If FoundDuplicate = False then
'add it to my larger data array
End if
'---------------------------------------------------------------


--
The enclosed questions or comments are entirely mine and don't represent the
thoughts, views, or policy of my employer. Any errors or omissions are my
own.


  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 923
Default using array, Match, trying to eliminate duplicates - how to return or translate result to a boolean?

If I read you right then you are creating for each matching row a long
string of each of the array elements that then populates a cell. Have you
considered using a Collection object (look up in vba help), this will throw
an error if you try to add a duplicate item. So just ignore the error.
Then read out the collection directly into your worksheet. Something
like......

Dim YourData As New Collection, YourString As String

' build your string here

On Error Resume Next
YourData.Add YourString, CStr(YourString)

' read out collection
For Each Item In YourData
'populate sheet with values
Next Item
--
Cheers
Nigel



"KR" wrote in message
...
I am cycling through some larger multidimensional arrays to find records
that match certain criteria. When I find a match, I copy a row of data to

a
smaller array, which ultimately populates a row in my spreadsheet (after I
find all the matches, I add them to the target cell with a chr(10) between
each, to put each match on a new "row" within the cell).

I've run into a problem with duplicate matches, which results in my row
having duplicate data in it. I think I know how to address this, I'm just
not sure of the syntax to make it work.

Assuming I will never have more than 10 good (non-duplicate) matches, and

I
do have a unique field to compare, I was thinking of adding a new
one-dimensional array and clearing it between excel rows. Each time I find
an entry that matches my criteria, I would just use the match function to
see if that value was already in the one dimensional array, and if so,

skip
to the next match (if it isn't in the 1-D array, add it as normal).

So I've put some code below, but it returns a position or N/A. What is the
best way to translate that into a boolean so I can use it in my IF
statement?

'--------------------------------------------------------------
Dim CompareArray(1 to 10)
Dim CompareItem as String
Dim FoundDuplicate as Boolean

'do stuff until a match is found

FoundMatch = Excel.worksheetfunction.Match(CompareItem, CompareArray,0)

'how do I translate FoundMatch (integer or N/A) into FoundDuplicate

Boolean?

If FoundDuplicate = False then
'add it to my larger data array
End if
'---------------------------------------------------------------


--
The enclosed questions or comments are entirely mine and don't represent

the
thoughts, views, or policy of my employer. Any errors or omissions are my
own.




  #3   Report Post  
Posted to microsoft.public.excel.programming
KR KR is offline
external usenet poster
 
Posts: 121
Default using array, Match, trying to eliminate duplicates - how to return or translate result to a boolean?

Close, but I'm actually building multiple strings (about 30) for each row
(e.g. 30 columns used). I only need to compare one particular field to
determine if I should add the next set of data to those 30 strings or not.
In the collection solution, I'd also need to use the error condition to do
conditionally stuff, so I wouldn't be able to just resume next, and
unfortunately I don't have a conceptual understanding of error trapping and
using that information. One of the many things on my list of "stuff it would
be really useful to know more about".

I don't mind the 'hack' solution of just comparing that small array using
Match, if someone can tell me how to capture the range of N/A to integer
possible outcomes of Match, so I can use it. I'm thinking that I could do
something like

If FoundMatch =N/A then
'go ahead and add all my strings
End if

p.s., since I know I'll be asking in my next post anyway... what is the
proper way to describe "N/A" in VBA, per the first line of the If statement
above? Should it be in quotes? I remember from another post (a long time
ago) that it was something not immediately obvious or intuitive...


"Nigel" wrote in message
...
If I read you right then you are creating for each matching row a long
string of each of the array elements that then populates a cell. Have you
considered using a Collection object (look up in vba help), this will

throw
an error if you try to add a duplicate item. So just ignore the error.
Then read out the collection directly into your worksheet. Something
like......

Dim YourData As New Collection, YourString As String

' build your string here

On Error Resume Next
YourData.Add YourString, CStr(YourString)

' read out collection
For Each Item In YourData
'populate sheet with values
Next Item
--
Cheers
Nigel



"KR" wrote in message
...
I am cycling through some larger multidimensional arrays to find records
that match certain criteria. When I find a match, I copy a row of data

to
a
smaller array, which ultimately populates a row in my spreadsheet (after

I
find all the matches, I add them to the target cell with a chr(10)

between
each, to put each match on a new "row" within the cell).

I've run into a problem with duplicate matches, which results in my row
having duplicate data in it. I think I know how to address this, I'm

just
not sure of the syntax to make it work.

Assuming I will never have more than 10 good (non-duplicate) matches,

and
I
do have a unique field to compare, I was thinking of adding a new
one-dimensional array and clearing it between excel rows. Each time I

find
an entry that matches my criteria, I would just use the match function

to
see if that value was already in the one dimensional array, and if so,

skip
to the next match (if it isn't in the 1-D array, add it as normal).

So I've put some code below, but it returns a position or N/A. What is

the
best way to translate that into a boolean so I can use it in my IF
statement?

'--------------------------------------------------------------
Dim CompareArray(1 to 10)
Dim CompareItem as String
Dim FoundDuplicate as Boolean

'do stuff until a match is found

FoundMatch = Excel.worksheetfunction.Match(CompareItem, CompareArray,0)

'how do I translate FoundMatch (integer or N/A) into FoundDuplicate

Boolean?

If FoundDuplicate = False then
'add it to my larger data array
End if
'---------------------------------------------------------------


--
The enclosed questions or comments are entirely mine and don't represent

the
thoughts, views, or policy of my employer. Any errors or omissions are

my
own.






  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 86
Default using array, Match, trying to eliminate duplicates - how to r


"KR" wrote:

If FoundMatch =N/A then
'go ahead and add all my strings
End if

p.s., since I know I'll be asking in my next post anyway... what is the
proper way to describe "N/A" in VBA, per the first line of the If statement
above? Should it be in quotes? I remember from another post (a long time
ago) that it was something not immediately obvious or intuitive...


KR,
"=NA()" is the way #NA is defined in a cell. You could try the following
methodolgy. I tested it with =NA(), letters, and numbers in the cells that
are inserted into the DataArray and the CriteriaArray. The methodolgy did
not work if .Cells( i, DataCol).Value was used instead of .Cells( i,
DataCol).Text
..
..
Dim NumDataRows As Long, NumCriRows As Long
Dim DataArray() As String
Dim CriteriaArray() As String
Dim CountArray() As Single
Dim ThisSheet As String

ThisSheet = ActiveSheet.Name
Worksheets(ThisSheet).Activate

For i = 1 To NumDataRows
DataArray(i) = Worksheets(ThisSheet).Cells( i, DataCol).Text
Next i

For j = 1 To NumCriRows
CriteriaArray(j) = Worksheets(ThisSheet).Cells( j, CriCol).Text
Next j

For j = 1 To NumCriRows
cntr = 0
For i = 1 To NumDataRows
If (DataArray(i) = CriteriaArray(j)) Then
cntr = cntr + 1
' whatever else you want to do.......
End If
Next i
CountArray(j, 1) = cntr
Next j
..
..

HTH,
Raul
  #5   Report Post  
Posted to microsoft.public.excel.programming
KR KR is offline
external usenet poster
 
Posts: 121
Default using array, Match, trying to eliminate duplicates - how to r

Thank you to all who contributed. The final solution I adopted (in case
anyone was watching this thread) was to create a small 1-dimensional array
and use Application.Match (exact match) to see if each successive key was
already in the new array or not. I used IsError on the return value from the
Application.Match to handle the NA() value that is returned if the item is
not found in the array. If it was an error [NA()], then I ran the code to
add my key to the small array, and then captured the rest of the info from
my larger array that corresponded to that value. Clean and simple, much
better than what I started with. Thanks again,
Keith


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
Return match result gootroots Excel Worksheet Functions 1 November 3rd 09 10:48 AM
How do I return multiple occurrences of a match in an array? Umbu Excel Worksheet Functions 1 May 25th 08 05:07 PM
Help with Excel array functions - select, add & return result [email protected] Excel Worksheet Functions 0 July 12th 07 06:36 PM
return array result in cell based on comparing dates Ruthki Excel Worksheet Functions 7 June 30th 05 11:41 PM
match multiple criteria & return value from array Tat Excel Worksheet Functions 2 June 21st 05 04:31 PM


All times are GMT +1. The time now is 06:45 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"