Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 220
Default RangeExclude function

Has anyone written a good, fast function that takes two range arguments,
and returns a range variable equal to the first range excluding the
intersection of the first and second ranges. The function I have
written is very basic and slow.

I would be very interested if there is a faster version of this
function. Thanks in advance.








Public Function RangeExclusion(FromRange As Excel.Range, ExcludeRange As
Excel.Range) As Excel.Range
Dim rngCell As Excel.Range, rngAnswer As Excel.Range

If ExcludeRange Is Nothing Then
Set RangeExclusion = FromRange
Exit Function
ElseIf FromRange Is Nothing Then
Set RangeExclusion = Nothing
Exit Function
End If

For Each rngCell In FromRange
If Application.Intersect(rngCell, ExcludeRange) Is Nothing Then
If rngAnswer Is Nothing Then
Set rngAnswer = rngCell
Else
Set rngAnswer = Union(rngAnswer, rngCell)
End If
End If
Next

Set RangeExclusion = rngAnswer

' Clean up.
Set rngCell = Nothing
Set rngAnswer = Nothing
End Function
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,272
Default RangeExclude function

'-----------------------------------------------------------------
Function AntiUnion(SetRange As Range, UsedRange As Range) As Range
'-----------------------------------------------------------------
Dim saveSet
saveSet = SetRange.Formula
SetRange.ClearContents
UsedRange = 0
Set AntiUnion = SetRange.SpecialCells(xlCellTypeBlanks)
SetRange = saveSet
End Function


--

HTH

RP

"R Avery" wrote in message
...
Has anyone written a good, fast function that takes two range arguments,
and returns a range variable equal to the first range excluding the
intersection of the first and second ranges. The function I have
written is very basic and slow.

I would be very interested if there is a faster version of this
function. Thanks in advance.








Public Function RangeExclusion(FromRange As Excel.Range, ExcludeRange As
Excel.Range) As Excel.Range
Dim rngCell As Excel.Range, rngAnswer As Excel.Range

If ExcludeRange Is Nothing Then
Set RangeExclusion = FromRange
Exit Function
ElseIf FromRange Is Nothing Then
Set RangeExclusion = Nothing
Exit Function
End If

For Each rngCell In FromRange
If Application.Intersect(rngCell, ExcludeRange) Is Nothing Then
If rngAnswer Is Nothing Then
Set rngAnswer = rngCell
Else
Set rngAnswer = Union(rngAnswer, rngCell)
End If
End If
Next

Set RangeExclusion = rngAnswer

' Clean up.
Set rngCell = Nothing
Set rngAnswer = Nothing
End Function



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,441
Default RangeExclude function

Bob,

I like that - though when I was thinking of ways to do this with a function,
I dismissed your apporach, with the thought that "Functions can't operate on
ranges, they can only return values" but it works quite nicely.

Thanks,
Bernie
Maybe/Maybe Not MS Excel MVP

"Bob Phillips" wrote in message
...
'-----------------------------------------------------------------
Function AntiUnion(SetRange As Range, UsedRange As Range) As Range
'-----------------------------------------------------------------
Dim saveSet
saveSet = SetRange.Formula
SetRange.ClearContents
UsedRange = 0
Set AntiUnion = SetRange.SpecialCells(xlCellTypeBlanks)
SetRange = saveSet
End Function


--

HTH

RP

"R Avery" wrote in message
...
Has anyone written a good, fast function that takes two range arguments,
and returns a range variable equal to the first range excluding the
intersection of the first and second ranges. The function I have
written is very basic and slow.

I would be very interested if there is a faster version of this
function. Thanks in advance.








Public Function RangeExclusion(FromRange As Excel.Range, ExcludeRange As
Excel.Range) As Excel.Range
Dim rngCell As Excel.Range, rngAnswer As Excel.Range

If ExcludeRange Is Nothing Then
Set RangeExclusion = FromRange
Exit Function
ElseIf FromRange Is Nothing Then
Set RangeExclusion = Nothing
Exit Function
End If

For Each rngCell In FromRange
If Application.Intersect(rngCell, ExcludeRange) Is Nothing Then
If rngAnswer Is Nothing Then
Set rngAnswer = rngCell
Else
Set rngAnswer = Union(rngAnswer, rngCell)
End If
End If
Next

Set RangeExclusion = rngAnswer

' Clean up.
Set rngCell = Nothing
Set rngAnswer = Nothing
End Function





  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,718
Default RangeExclude function

Maybe/Maybe Not MS Excel MVP

Check the MVP site for the latest MVP NG password<g.

Doesn't work too well if there are array formulas in the range since it
doesn't array-enter them on the restore. Also, would you want to set calc
to manual?

--
Jim Rech
Excel MVP
"Bernie Deitrick" <deitbe @ consumer dot org wrote in message
...
| Bob,
|
| I like that - though when I was thinking of ways to do this with a
function,
| I dismissed your apporach, with the thought that "Functions can't operate
on
| ranges, they can only return values" but it works quite nicely.
|
| Thanks,
| Bernie
| Maybe/Maybe Not MS Excel MVP
|
| "Bob Phillips" wrote in message
| ...
| '-----------------------------------------------------------------
| Function AntiUnion(SetRange As Range, UsedRange As Range) As Range
| '-----------------------------------------------------------------
| Dim saveSet
| saveSet = SetRange.Formula
| SetRange.ClearContents
| UsedRange = 0
| Set AntiUnion = SetRange.SpecialCells(xlCellTypeBlanks)
| SetRange = saveSet
| End Function
|
|
| --
|
| HTH
|
| RP
|
| "R Avery" wrote in message
| ...
| Has anyone written a good, fast function that takes two range
arguments,
| and returns a range variable equal to the first range excluding the
| intersection of the first and second ranges. The function I have
| written is very basic and slow.
|
| I would be very interested if there is a faster version of this
| function. Thanks in advance.
|
|
|
|
|
|
|
|
| Public Function RangeExclusion(FromRange As Excel.Range, ExcludeRange
As
| Excel.Range) As Excel.Range
| Dim rngCell As Excel.Range, rngAnswer As Excel.Range
|
| If ExcludeRange Is Nothing Then
| Set RangeExclusion = FromRange
| Exit Function
| ElseIf FromRange Is Nothing Then
| Set RangeExclusion = Nothing
| Exit Function
| End If
|
| For Each rngCell In FromRange
| If Application.Intersect(rngCell, ExcludeRange) Is Nothing
Then
| If rngAnswer Is Nothing Then
| Set rngAnswer = rngCell
| Else
| Set rngAnswer = Union(rngAnswer, rngCell)
| End If
| End If
| Next
|
| Set RangeExclusion = rngAnswer
|
| ' Clean up.
| Set rngCell = Nothing
| Set rngAnswer = Nothing
| End Function
|
|
|
|


  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,441
Default RangeExclude function

Jim,

I just did (though it took some time to find the link) so now I can leave my
signature line alone <vbg, and I'm guessing you can, too.

I didn't do a lot of testing, just once with a blank worksheet, and was
simply surprised to see that it worked at all. So much for depending on the
stated limitations of U-D-Functions.

Of course, in a sub it would be easy to get around all those other
limitations by simply adding a blank worksheet, doing the 'disunion' on the
blank sheet, recording the address string, and then deleting the worksheet.

Bernie
Still a MS Excel MVP

"Jim Rech" wrote in message
...
Maybe/Maybe Not MS Excel MVP


Check the MVP site for the latest MVP NG password<g.

Doesn't work too well if there are array formulas in the range since it
doesn't array-enter them on the restore. Also, would you want to set calc
to manual?

--
Jim Rech
Excel MVP
"Bernie Deitrick" <deitbe @ consumer dot org wrote in message
...
| Bob,
|
| I like that - though when I was thinking of ways to do this with a
function,
| I dismissed your apporach, with the thought that "Functions can't

operate
on
| ranges, they can only return values" but it works quite nicely.
|
| Thanks,
| Bernie
| Maybe/Maybe Not MS Excel MVP
|
| "Bob Phillips" wrote in message
| ...
| '-----------------------------------------------------------------
| Function AntiUnion(SetRange As Range, UsedRange As Range) As Range
| '-----------------------------------------------------------------
| Dim saveSet
| saveSet = SetRange.Formula
| SetRange.ClearContents
| UsedRange = 0
| Set AntiUnion = SetRange.SpecialCells(xlCellTypeBlanks)
| SetRange = saveSet
| End Function
|
|
| --
|
| HTH
|
| RP
|
| "R Avery" wrote in message
| ...
| Has anyone written a good, fast function that takes two range
arguments,
| and returns a range variable equal to the first range excluding the
| intersection of the first and second ranges. The function I have
| written is very basic and slow.
|
| I would be very interested if there is a faster version of this
| function. Thanks in advance.
|
|
|
|
|
|
|
|
| Public Function RangeExclusion(FromRange As Excel.Range,

ExcludeRange
As
| Excel.Range) As Excel.Range
| Dim rngCell As Excel.Range, rngAnswer As Excel.Range
|
| If ExcludeRange Is Nothing Then
| Set RangeExclusion = FromRange
| Exit Function
| ElseIf FromRange Is Nothing Then
| Set RangeExclusion = Nothing
| Exit Function
| End If
|
| For Each rngCell In FromRange
| If Application.Intersect(rngCell, ExcludeRange) Is Nothing
Then
| If rngAnswer Is Nothing Then
| Set rngAnswer = rngCell
| Else
| Set rngAnswer = Union(rngAnswer, rngCell)
| End If
| End If
| Next
|
| Set RangeExclusion = rngAnswer
|
| ' Clean up.
| Set rngCell = Nothing
| Set rngAnswer = Nothing
| End Function
|
|
|
|






  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 2,718
Default RangeExclude function

So much for depending on the stated limitations of U-D-Functions.

The limitations (not affecting other cells, not taking actions, etc.) apply
only when the VB function is called from a formula, i.e. a worksheet cell.
MS doesn't want a formulas triggering a change in the recalc chain, much
less a file save in the middle of a calc<g.


Jim Rech
Excel MVP
"Bernie Deitrick" <deitbe @ consumer dot org wrote in message
...
Jim,

I just did (though it took some time to find the link) so now I can leave
my
signature line alone <vbg, and I'm guessing you can, too.

I didn't do a lot of testing, just once with a blank worksheet, and was
simply surprised to see that it worked at all. So much for depending on
the
stated limitations of U-D-Functions.

Of course, in a sub it would be easy to get around all those other
limitations by simply adding a blank worksheet, doing the 'disunion' on
the
blank sheet, recording the address string, and then deleting the
worksheet.

Bernie
Still a MS Excel MVP

"Jim Rech" wrote in message
...
Maybe/Maybe Not MS Excel MVP


Check the MVP site for the latest MVP NG password<g.

Doesn't work too well if there are array formulas in the range since it
doesn't array-enter them on the restore. Also, would you want to set
calc
to manual?

--
Jim Rech
Excel MVP
"Bernie Deitrick" <deitbe @ consumer dot org wrote in message
...
| Bob,
|
| I like that - though when I was thinking of ways to do this with a
function,
| I dismissed your apporach, with the thought that "Functions can't

operate
on
| ranges, they can only return values" but it works quite nicely.
|
| Thanks,
| Bernie
| Maybe/Maybe Not MS Excel MVP
|
| "Bob Phillips" wrote in message
| ...
| '-----------------------------------------------------------------
| Function AntiUnion(SetRange As Range, UsedRange As Range) As Range
| '-----------------------------------------------------------------
| Dim saveSet
| saveSet = SetRange.Formula
| SetRange.ClearContents
| UsedRange = 0
| Set AntiUnion = SetRange.SpecialCells(xlCellTypeBlanks)
| SetRange = saveSet
| End Function
|
|
| --
|
| HTH
|
| RP
|
| "R Avery" wrote in message
| ...
| Has anyone written a good, fast function that takes two range
arguments,
| and returns a range variable equal to the first range excluding the
| intersection of the first and second ranges. The function I have
| written is very basic and slow.
|
| I would be very interested if there is a faster version of this
| function. Thanks in advance.
|
|
|
|
|
|
|
|
| Public Function RangeExclusion(FromRange As Excel.Range,

ExcludeRange
As
| Excel.Range) As Excel.Range
| Dim rngCell As Excel.Range, rngAnswer As Excel.Range
|
| If ExcludeRange Is Nothing Then
| Set RangeExclusion = FromRange
| Exit Function
| ElseIf FromRange Is Nothing Then
| Set RangeExclusion = Nothing
| Exit Function
| End If
|
| For Each rngCell In FromRange
| If Application.Intersect(rngCell, ExcludeRange) Is Nothing
Then
| If rngAnswer Is Nothing Then
| Set rngAnswer = rngCell
| Else
| Set rngAnswer = Union(rngAnswer, rngCell)
| End If
| End If
| Next
|
| Set RangeExclusion = rngAnswer
|
| ' Clean up.
| Set rngCell = Nothing
| Set rngAnswer = Nothing
| End Function
|
|
|
|






  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 220
Default RangeExclude function

That is pretty sexy. I just wish I could then undo the effect that your
macro had on the range, and it would be perfect =P
  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,272
Default RangeExclude function

Do you want a UDF or a VBA function?

--

HTH

RP

"R Avery" wrote in message
...
That is pretty sexy. I just wish I could then undo the effect that your
macro had on the range, and it would be perfect =P



  #9   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 220
Default RangeExclude function

VBA function
  #10   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,441
Default RangeExclude function

Jim Rech has posted this previously:

Function AntiRange(BigRg As Range, ExcludeRg As Range) As Range
Dim NewRg As Range, CurrCell As Range
For Each CurrCell In BigRg.Cells
If Intersect(CurrCell, ExcludeRg) Is Nothing Then
If NewRg Is Nothing Then
Set NewRg = CurrCell
Else
Set NewRg = Union(NewRg, CurrCell)
End If
End If
Next
Set AntiRange = NewRg
End Function

HTH,
Bernie
MS Excel MVP

"R Avery" wrote in message
...
Has anyone written a good, fast function that takes two range arguments,
and returns a range variable equal to the first range excluding the
intersection of the first and second ranges. The function I have
written is very basic and slow.

I would be very interested if there is a faster version of this
function. Thanks in advance.








Public Function RangeExclusion(FromRange As Excel.Range, ExcludeRange As
Excel.Range) As Excel.Range
Dim rngCell As Excel.Range, rngAnswer As Excel.Range

If ExcludeRange Is Nothing Then
Set RangeExclusion = FromRange
Exit Function
ElseIf FromRange Is Nothing Then
Set RangeExclusion = Nothing
Exit Function
End If

For Each rngCell In FromRange
If Application.Intersect(rngCell, ExcludeRange) Is Nothing Then
If rngAnswer Is Nothing Then
Set rngAnswer = rngCell
Else
Set rngAnswer = Union(rngAnswer, rngCell)
End If
End If
Next

Set RangeExclusion = rngAnswer

' Clean up.
Set rngCell = Nothing
Set rngAnswer = Nothing
End Function





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
Excel Data Validation/Lookup function does function correcty Kirkey Excel Worksheet Functions 2 May 25th 09 09:22 PM
copy of excel file not showing formulal/function in the function b oaallam Excel Discussion (Misc queries) 4 September 6th 07 01:20 PM
LINKEDRANGE function - a complement to the PULL function (for getting values from a closed workbook) [email protected] Excel Worksheet Functions 0 September 5th 06 03:44 PM
Adding a custom function to the default excel function list DonutDel Excel Programming 3 November 21st 03 03:41 PM
User-Defined Function pre-empting Built-in Function? How to undo???? MarWun Excel Programming 1 August 6th 03 09:31 PM


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