Question: I have the following scenario, I don't seem to solve this.

```
String = "a var a12nd with code is on467th";

```

in the above string i am required to match words with numbers in it and matches the numbers in another group, can you please help?

**expected output:**

```
match1:  a12nd 
group1: 12

mach2: on467th
group1:467

```

Answer: 
The `@` notation only makes sense when entered in a cell that is inside the `ListObject` in question.

From code, you already have rows and columns you want, so the cells you want is an intersection of the two:

```
Dim tbl As ListObject
Dim ColumnsOfInterest As Range
Dim r As Long

Set tbl = ActiveSheet.ListObjects("MasterBudget")
Set ColumnsOfInterest = tbl.DataBodyRange.Worksheet.Range(tbl.ListColumns("Item description").Range, tbl.ListColumns("Unit 3").Range)

For r = 1 To tbl.ListRows.Count
    If tbl.ListRows(r).Range.RowHeight <> 0 Then 'not hidden/filtered
        Dim RangeToCopy As Range
        Set RangeToCopy = Application.Intersect(tbl.ListRows(r).Range, ColumnsOfInterest)

        RangeToCopy.Copy ...
    End If
Next r

```

Note that you [don't have to `select` anything](https://stackoverflow.com/q/10714251/11683).
This is probably not the most elegant but dealing with structured ListObject table references rarely are.

```
Dim tbl As Object, r As Long

Set tbl = ActiveSheet.ListObjects("MasterBudget")

For r = 1 To tbl.ListRows.Count
    If tbl.ListRows(r).Range.RowHeight <> 0 Then 'not hidden/filtered
        tbl.ListColumns("Item description").DataBodyRange(r).Select
        ActiveSheet.Range(tbl.ListColumns("Item description").DataBodyRange(r), _
                          tbl.ListColumns("Unit 3").DataBodyRange(r)).Select
    End If
Next r

```

You could also use `tbl.parent` in place of `ActiveSheet`.