PC Review


Reply
Thread Tools Rate Thread

Chip Pearson's DistinctValues function

 
 
Mike Fogleman
Guest
Posts: n/a
 
      22nd Mar 2009
BTW, Chip's site is throwing an error right now.

How can I get the array of distinct values results into a single cell
delimited with a comma?

InputRange
A2| E01AB
A3| E01AB
A4| E01CD
A5| A11

Output
AE15| E01AB,E01CD,A11

The input and output ranges will be determined with VB.
Mike F


 
Reply With Quote
 
 
 
 
Bernd P
Guest
Posts: n/a
 
      22nd Mar 2009
Hello,

=multicat(INDEX(pfreq(A2:A5),,1),",")

Multicat you will find here:
http://www.sulprobil.com/html/concatenate.html
And Pfreq:
http://www.sulprobil.com/html/pfreq.html

Regards,
Bernd
 
Reply With Quote
 
Jacob Skaria
Guest
Posts: n/a
 
      22nd Mar 2009
Dear Mike

Launch VBE using Alt+F11, Insert module and paste the below function. Access
this under UserDefined functions.

Function GetDistinctValueString(varRange As String)
Dim varCell As Range
For Each varCell In Range(varRange)
If InStr(strTemp & ",", "," & varCell.Text & ",") = 0 Then
GetDistinctValueString = GetDistinctValueString & "," & varCell.Text
End If
Next
GetDistinctValueString = Mid(GetDistinctValueString, 2)
End Function

If this post helps click Yes
--------------
Jacob Skaria

 
Reply With Quote
 
Chip Pearson
Guest
Posts: n/a
 
      22nd Mar 2009

Mike,

The site is back up and running.

Create a VBA function as follows:

Public Function Join(Arr As Variant, Sep As String) As String
Join = VBA.Join(Arr, Sep)
End Function

Then, in a worksheet cell, use the following formula:

=Join(DistinctValues(A1:A5,TRUE),",")

Cordially,
Chip Pearson
Microsoft Most Valuable Professional
Excel Product Group, 1998 - 2009
Pearson Software Consulting, LLC
www.cpearson.com
(email on web site)



On Sun, 22 Mar 2009 09:17:01 -0400, "Mike Fogleman"
<(E-Mail Removed)> wrote:

>BTW, Chip's site is throwing an error right now.
>
>How can I get the array of distinct values results into a single cell
>delimited with a comma?
>
>InputRange
>A2| E01AB
>A3| E01AB
>A4| E01CD
>A5| A11
>
>Output
>AE15| E01AB,E01CD,A11
>
>The input and output ranges will be determined with VB.
>Mike F
>

 
Reply With Quote
 
Jacob Skaria
Guest
Posts: n/a
 
      22nd Mar 2009
Oops, a small mistake.. Try this

Function GetDistinctValueString(varRange As String)
Dim varCell As Range
For Each varCell In Range(varRange)
If InStr(GetDistinctValueString & ",", "," & varCell.Text & ",") = 0 Then
GetDistinctValueString = GetDistinctValueString & "," & varCell.Text
End If
Next
GetDistinctValueString = Mid(GetDistinctValueString, 2)
End Function

If this post helps click Yes
--------------
Jacob Skaria


 
Reply With Quote
 
Mike Fogleman
Guest
Posts: n/a
 
      22nd Mar 2009
How would I incorporate your 2 functions in this routine?

Sub Test()
Dim InputRange As Range
Dim ResultArray As Variant
Dim Ndx As Long

Set InputRange = Range("InputValues")
ResultArray = DistinctValues(InputValues:=InputRange, IgnoreCase:=True)
'calls Chip's DistinctValues function
If IsArray(ResultArray) = True Then
For Ndx = LBound(ResultArray) To UBound(ResultArray)
Range("J" & Ndx).Value = ResultArray(Ndx)
'Debug.Print ResultArray(Ndx)
Next Ndx
Else
If IsError(ResultArray) = True Then
Debug.Print "ERROR: " & CStr(ResultArray)
Else
Debug.Print "UNEXPECTED RESULT: " & CStr(ResultArray)
End If
End If
End Sub

Mike F
"Bernd P" <(E-Mail Removed)> wrote in message
news:2eca0578-31bb-4cb8-a39d-(E-Mail Removed)...
> Hello,
>
> =multicat(INDEX(pfreq(A2:A5),,1),",")
>
> Multicat you will find here:
> http://www.sulprobil.com/html/concatenate.html
> And Pfreq:
> http://www.sulprobil.com/html/pfreq.html
>
> Regards,
> Bernd



 
Reply With Quote
 
Mike Fogleman
Guest
Posts: n/a
 
      22nd Mar 2009
Thanks Chip, works perfect:

Public Function Join(Arr As Variant, Sep As String) As String
'joins ResultArray into single cell
Join = VBA.Join(Arr, Sep)
End Function

Sub Test2()
Dim InputRange As Range
Dim ResultArray As Variant
Dim Ndx As Long

Set InputRange = Range("InputValues")
ResultArray = DistinctValues(InputValues:=InputRange, IgnoreCase:=True)
'Join(DistinctValues(A1:A5,TRUE),",")
If IsArray(ResultArray) = True Then
Range("J1").Value = Join(DistinctValues(InputRange, True), ", ")
'Debug.Print ResultArray(Ndx)
Else
If IsError(ResultArray) = True Then
Debug.Print "ERROR: " & CStr(ResultArray)
Else
Debug.Print "UNEXPECTED RESULT: " & CStr(ResultArray)
End If
End If
End Sub

Mike F
"Chip Pearson" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
>
> Mike,
>
> The site is back up and running.
>
> Create a VBA function as follows:
>
> Public Function Join(Arr As Variant, Sep As String) As String
> Join = VBA.Join(Arr, Sep)
> End Function
>
> Then, in a worksheet cell, use the following formula:
>
> =Join(DistinctValues(A1:A5,TRUE),",")
>
> Cordially,
> Chip Pearson
> Microsoft Most Valuable Professional
> Excel Product Group, 1998 - 2009
> Pearson Software Consulting, LLC
> www.cpearson.com
> (email on web site)
>
>
>
> On Sun, 22 Mar 2009 09:17:01 -0400, "Mike Fogleman"
> <(E-Mail Removed)> wrote:
>
>>BTW, Chip's site is throwing an error right now.
>>
>>How can I get the array of distinct values results into a single cell
>>delimited with a comma?
>>
>>InputRange
>>A2| E01AB
>>A3| E01AB
>>A4| E01CD
>>A5| A11
>>
>>Output
>>AE15| E01AB,E01CD,A11
>>
>>The input and output ranges will be determined with VB.
>>Mike F
>>



 
Reply With Quote
 
Chip Pearson
Guest
Posts: n/a
 
      22nd Mar 2009
I think you can significantly simplify your code. First of all, you're
calling the DistinctValues function twice, which an lead to
performance problems if the input range is large.

Try code like

Sub AAA()
Dim InputRange As Range
Dim Vals As Variant
Set InputRange = Range("A1:A5")
Vals = DistinctValues(InputRange, True)
If IsArray(Vals) = True Then
Range("J1").Value = Join(Vals, ",")
End If
End Sub


Cordially,
Chip Pearson
Microsoft Most Valuable Professional
Excel Product Group, 1998 - 2009
Pearson Software Consulting, LLC
www.cpearson.com
(email on web site)


On Sun, 22 Mar 2009 10:42:05 -0400, "Mike Fogleman"
<(E-Mail Removed)> wrote:

>Thanks Chip, works perfect:
>
>Public Function Join(Arr As Variant, Sep As String) As String
>'joins ResultArray into single cell
> Join = VBA.Join(Arr, Sep)
>End Function
>
>Sub Test2()
> Dim InputRange As Range
> Dim ResultArray As Variant
> Dim Ndx As Long
>
> Set InputRange = Range("InputValues")
> ResultArray = DistinctValues(InputValues:=InputRange, IgnoreCase:=True)
> 'Join(DistinctValues(A1:A5,TRUE),",")
> If IsArray(ResultArray) = True Then
> Range("J1").Value = Join(DistinctValues(InputRange, True), ", ")
> 'Debug.Print ResultArray(Ndx)
> Else
> If IsError(ResultArray) = True Then
> Debug.Print "ERROR: " & CStr(ResultArray)
> Else
> Debug.Print "UNEXPECTED RESULT: " & CStr(ResultArray)
> End If
> End If
>End Sub
>
>Mike F
>"Chip Pearson" <(E-Mail Removed)> wrote in message
>news:(E-Mail Removed)...
>>
>> Mike,
>>
>> The site is back up and running.
>>
>> Create a VBA function as follows:
>>
>> Public Function Join(Arr As Variant, Sep As String) As String
>> Join = VBA.Join(Arr, Sep)
>> End Function
>>
>> Then, in a worksheet cell, use the following formula:
>>
>> =Join(DistinctValues(A1:A5,TRUE),",")
>>
>> Cordially,
>> Chip Pearson
>> Microsoft Most Valuable Professional
>> Excel Product Group, 1998 - 2009
>> Pearson Software Consulting, LLC
>> www.cpearson.com
>> (email on web site)
>>
>>
>>
>> On Sun, 22 Mar 2009 09:17:01 -0400, "Mike Fogleman"
>> <(E-Mail Removed)> wrote:
>>
>>>BTW, Chip's site is throwing an error right now.
>>>
>>>How can I get the array of distinct values results into a single cell
>>>delimited with a comma?
>>>
>>>InputRange
>>>A2| E01AB
>>>A3| E01AB
>>>A4| E01CD
>>>A5| A11
>>>
>>>Output
>>>AE15| E01AB,E01CD,A11
>>>
>>>The input and output ranges will be determined with VB.
>>>Mike F
>>>

>

 
Reply With Quote
 
Mike Fogleman
Guest
Posts: n/a
 
      22nd Mar 2009
Yes I noticed that as I stepped through the code. Thanks

Mike F
"Chip Pearson" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
>I think you can significantly simplify your code. First of all, you're
> calling the DistinctValues function twice, which an lead to
> performance problems if the input range is large.
>
> Try code like
>
> Sub AAA()
> Dim InputRange As Range
> Dim Vals As Variant
> Set InputRange = Range("A1:A5")
> Vals = DistinctValues(InputRange, True)
> If IsArray(Vals) = True Then
> Range("J1").Value = Join(Vals, ",")
> End If
> End Sub
>
>
> Cordially,
> Chip Pearson
> Microsoft Most Valuable Professional
> Excel Product Group, 1998 - 2009
> Pearson Software Consulting, LLC
> www.cpearson.com
> (email on web site)
>
>
> On Sun, 22 Mar 2009 10:42:05 -0400, "Mike Fogleman"
> <(E-Mail Removed)> wrote:
>
>>Thanks Chip, works perfect:
>>
>>Public Function Join(Arr As Variant, Sep As String) As String
>>'joins ResultArray into single cell
>> Join = VBA.Join(Arr, Sep)
>>End Function
>>
>>Sub Test2()
>> Dim InputRange As Range
>> Dim ResultArray As Variant
>> Dim Ndx As Long
>>
>> Set InputRange = Range("InputValues")
>> ResultArray = DistinctValues(InputValues:=InputRange,
>> IgnoreCase:=True)
>> 'Join(DistinctValues(A1:A5,TRUE),",")
>> If IsArray(ResultArray) = True Then
>> Range("J1").Value = Join(DistinctValues(InputRange, True), ", ")
>> 'Debug.Print ResultArray(Ndx)
>> Else
>> If IsError(ResultArray) = True Then
>> Debug.Print "ERROR: " & CStr(ResultArray)
>> Else
>> Debug.Print "UNEXPECTED RESULT: " & CStr(ResultArray)
>> End If
>> End If
>>End Sub
>>
>>Mike F
>>"Chip Pearson" <(E-Mail Removed)> wrote in message
>>news:(E-Mail Removed)...
>>>
>>> Mike,
>>>
>>> The site is back up and running.
>>>
>>> Create a VBA function as follows:
>>>
>>> Public Function Join(Arr As Variant, Sep As String) As String
>>> Join = VBA.Join(Arr, Sep)
>>> End Function
>>>
>>> Then, in a worksheet cell, use the following formula:
>>>
>>> =Join(DistinctValues(A1:A5,TRUE),",")
>>>
>>> Cordially,
>>> Chip Pearson
>>> Microsoft Most Valuable Professional
>>> Excel Product Group, 1998 - 2009
>>> Pearson Software Consulting, LLC
>>> www.cpearson.com
>>> (email on web site)
>>>
>>>
>>>
>>> On Sun, 22 Mar 2009 09:17:01 -0400, "Mike Fogleman"
>>> <(E-Mail Removed)> wrote:
>>>
>>>>BTW, Chip's site is throwing an error right now.
>>>>
>>>>How can I get the array of distinct values results into a single cell
>>>>delimited with a comma?
>>>>
>>>>InputRange
>>>>A2| E01AB
>>>>A3| E01AB
>>>>A4| E01CD
>>>>A5| A11
>>>>
>>>>Output
>>>>AE15| E01AB,E01CD,A11
>>>>
>>>>The input and output ranges will be determined with VB.
>>>>Mike F
>>>>

>>



 
Reply With Quote
 
Mike Fogleman
Guest
Posts: n/a
 
      22nd Mar 2009
The input range would not exceed 7 rows at a time, however, in the course of
creating my report, there would be many input ranges numbering several
hundred. I will use this to avoid calling the function twice.
Thanks, Mike F
"Chip Pearson" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
>I think you can significantly simplify your code. First of all, you're
> calling the DistinctValues function twice, which an lead to
> performance problems if the input range is large.
>
> Try code like
>
> Sub AAA()
> Dim InputRange As Range
> Dim Vals As Variant
> Set InputRange = Range("A1:A5")
> Vals = DistinctValues(InputRange, True)
> If IsArray(Vals) = True Then
> Range("J1").Value = Join(Vals, ",")
> End If
> End Sub
>
>
> Cordially,
> Chip Pearson
> Microsoft Most Valuable Professional
> Excel Product Group, 1998 - 2009
> Pearson Software Consulting, LLC
> www.cpearson.com
> (email on web site)
>
>
> On Sun, 22 Mar 2009 10:42:05 -0400, "Mike Fogleman"
> <(E-Mail Removed)> wrote:
>
>>Thanks Chip, works perfect:
>>
>>Public Function Join(Arr As Variant, Sep As String) As String
>>'joins ResultArray into single cell
>> Join = VBA.Join(Arr, Sep)
>>End Function
>>
>>Sub Test2()
>> Dim InputRange As Range
>> Dim ResultArray As Variant
>> Dim Ndx As Long
>>
>> Set InputRange = Range("InputValues")
>> ResultArray = DistinctValues(InputValues:=InputRange,
>> IgnoreCase:=True)
>> 'Join(DistinctValues(A1:A5,TRUE),",")
>> If IsArray(ResultArray) = True Then
>> Range("J1").Value = Join(DistinctValues(InputRange, True), ", ")
>> 'Debug.Print ResultArray(Ndx)
>> Else
>> If IsError(ResultArray) = True Then
>> Debug.Print "ERROR: " & CStr(ResultArray)
>> Else
>> Debug.Print "UNEXPECTED RESULT: " & CStr(ResultArray)
>> End If
>> End If
>>End Sub
>>
>>Mike F
>>"Chip Pearson" <(E-Mail Removed)> wrote in message
>>news:(E-Mail Removed)...
>>>
>>> Mike,
>>>
>>> The site is back up and running.
>>>
>>> Create a VBA function as follows:
>>>
>>> Public Function Join(Arr As Variant, Sep As String) As String
>>> Join = VBA.Join(Arr, Sep)
>>> End Function
>>>
>>> Then, in a worksheet cell, use the following formula:
>>>
>>> =Join(DistinctValues(A1:A5,TRUE),",")
>>>
>>> Cordially,
>>> Chip Pearson
>>> Microsoft Most Valuable Professional
>>> Excel Product Group, 1998 - 2009
>>> Pearson Software Consulting, LLC
>>> www.cpearson.com
>>> (email on web site)
>>>
>>>
>>>
>>> On Sun, 22 Mar 2009 09:17:01 -0400, "Mike Fogleman"
>>> <(E-Mail Removed)> wrote:
>>>
>>>>BTW, Chip's site is throwing an error right now.
>>>>
>>>>How can I get the array of distinct values results into a single cell
>>>>delimited with a comma?
>>>>
>>>>InputRange
>>>>A2| E01AB
>>>>A3| E01AB
>>>>A4| E01CD
>>>>A5| A11
>>>>
>>>>Output
>>>>AE15| E01AB,E01CD,A11
>>>>
>>>>The input and output ranges will be determined with VB.
>>>>Mike F
>>>>

>>



 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

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


Similar Threads
Thread Thread Starter Forum Replies Last Post
Thank you Chip Pearson =?Utf-8?B?TWljaGFlbA==?= Microsoft Excel Misc 3 5th Feb 2005 08:35 PM
Thanks, Chip Pearson Susan Ramlet Microsoft Excel Misc 1 27th Jul 2004 08:38 PM
Chip Pearson Ricardo Microsoft Excel Programming 0 10th Nov 2003 07:51 PM
CHIP PEARSON - THANX bertieBassett Microsoft Excel Programming 0 3rd Nov 2003 02:01 PM
Re: Chip Pearson or someone Chip Pearson Microsoft Excel Programming 3 18th Sep 2003 05:22 AM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 12:00 AM.