ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Name ranges based on criteria (https://www.excelbanter.com/excel-programming/372650-name-ranges-based-criteria.html)

Martin[_21_]

Name ranges based on criteria
 
Hi everybody,

I have a large spreadsheet where I want to name ranges in a macro based on
the first two digits in the cells of one column. In the example below I need
to end up with one named range for the 4 codes starting with 11, one range
for the 3 codes starting with 12 and one range for the 2 codes starting with
13.

110003
110024
110035
110594
120012
120014
120045
130455
131004

Any help much appreciated.
--
Regards,

Martin

Bill Pfister

Name ranges based on criteria
 
Martin, the issue is that you can't have a range named as a number, because
it corresponds to a viable worksheet address (in this case, a row).
Similarly, you can't name a range as a letter combination less than "IV" and
you can't use a cell address (i.e. "A5"). Try naming a range "11" and you
will receive an error. If you want to still accomplish the task, but don't
mind using a slightly different name, this code will do it for you. It looks
through the "TestArea" range and performs the desired action.

Regards,
Bill



Public Sub RenameRanges()
Dim wkb As Workbook
Dim wks As Worksheet
Dim rngMain As Range
Dim rngTemp As Range
Dim strFirst2 As String
Dim strAddress As String
Dim strNamePrefix As String
Dim i As Long


strNamePrefix = "test_"

Set wkb = ThisWorkbook

Set rngMain = wkb.Names("TestArea").RefersToRange
Set wks = rngMain.Parent

For i = 1 To rngMain.Rows.Count
If (Len(rngMain.Cells(i, 1).Value) 0) Then
strAddress = rngMain.Cells(i, 1).Address
strFirst2 = strNamePrefix & Left(rngMain.Cells(i, 1).Value, 2)

If (RangeNameExists(wkb, strFirst2)) Then
Set rngTemp = wkb.Names(strFirst2).RefersToRange
Set rngTemp = Union(rngTemp, wks.Range(strAddress))
wkb.Names(strFirst2).Delete
Call wkb.Names.Add(strFirst2, rngTemp)
Else
Set rngTemp = wks.Range(strAddress)
Call wkb.Names.Add(strFirst2, rngTemp)
End If
End If
Next i
End Sub



Public Function RangeNameExists(wkb As Workbook, strName As String) As Boolean
On Error GoTo ErrHandler

Dim rng As Range
Set rng = wkb.Names(strName).RefersToRange

RangeNameExists = True

Exit Function
ErrHandler:
RangeNameExists = False
End Function



"Martin" wrote:

Hi everybody,

I have a large spreadsheet where I want to name ranges in a macro based on
the first two digits in the cells of one column. In the example below I need
to end up with one named range for the 4 codes starting with 11, one range
for the 3 codes starting with 12 and one range for the 2 codes starting with
13.

110003
110024
110035
110594
120012
120014
120045
130455
131004

Any help much appreciated.
--
Regards,

Martin



All times are GMT +1. The time now is 01:51 AM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com