'Returns a 2D array of cells, with optional row and column offsets.
:param range_string: `named range` name
:type range_string: string
:rtype: tuples of tuples of :class:`openpyxl.cell.Cell`'

def get_named_range(self, range_string):

    named_range = self._parent.get_named_range(range_string)
    if (named_range is None):
        msg = ('%s    is    not    a    valid    range    name' % range_string)
        raise NamedRangeException(msg)
    if (not isinstance(named_range, NamedRange)):
        msg = ('%s    refers    to    a    value,    not    a    range' % range_string)
        raise NamedRangeException(msg)
    result = []
    for destination in named_range.destinations:
        (worksheet, cells_range) = destination
        if (worksheet is not self):
            msg = ('Range    %s    is    not    defined    on    worksheet    %s' % (cells_range, self.title))
            raise NamedRangeException(msg)
        for row in self.iter_rows(cells_range):
            result.extend(row)
    return tuple(result)
