ответ по цитате, не вникая в задачу (сколько можно):
Процедура и функция
Код
Option Explicit
'====================================================================================================
Sub t()
Dim rng As Range
Set rng = Selection
If Not GetFullCells(rng, True, True) Then Exit Sub
MsgBox rng.Address(False, False, xlA1, True)
End Sub
'====================================================================================================
Function GetFullCells(rng As Range, Optional MsgTrue As Boolean, Optional MsgFalse As Boolean) As Boolean
Dim rngUR As Range, rngV As Range, rngF As Range
Set rngUR = Intersect(rng, rng.Worksheet.UsedRange)
If rngUR Is Nothing Then GoTo no
If rngUR.Count = 1 Then
If Len(rngUR.Value) Then Set rng = rngUR: GoTo yes
Else
On Error Resume Next
Set rngV = rngUR.SpecialCells(xlCellTypeConstants, 23)
Set rngF = rngUR.SpecialCells(xlCellTypeFormulas, 23)
On Error GoTo 0
If rngV Is Nothing Then
If Not rngF Is Nothing Then Set rng = rngF: GoTo yes
Else
If rngF Is Nothing Then Set rng = rngV: GoTo yes
Set rng = Union(rngV, rngF): GoTo yes
End If
End If
no: If MsgFalse Then MsgBox "Range" & vbLf & rng.Address(0, 0, xlA1, True) & vbLf & "DOES NOT CONTAIN FULL cells!", vbInformation, "GetFullCells"
Exit Function
yes: GetFullCells = True
If MsgTrue Then MsgBox "Range with ONLY FULL cells" & vbLf & rng.Address(0, 0, xlA1, True) & vbLf & "was CREATED!", vbInformation, "GetFullCells"
End Function
'====================================================================================================
Принцип: функция преобразует переданный диапазон, оставляя только ячейки со значениями или формулами. Используются методы, аналогичные ручному F5 —> Выделить —> Константы/Формулы
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄