Я не могу написать это для вас. Но рассмотрите эту технику, поскольку вы, кажется, делаете это вручную. Application.Inputbox - это встроенная пользовательская форма, которая приостанавливает выполнение кода до тех пор, пока вы не просмотрите диапазон / создадите свой собственный выбор.
Dim xrng As Range
Dim rngholder As Range
Dim xArray(0 To 20) As Variant
Dim x As Integer
Set xrng = Application.Selection
Set xrng = Application.InputBox("Title", "Make a selection", xrng.Address, Type:=8)
x = 0
'If xrng = "" Then Exit Sub
For Each rngholder In ActiveSheet.Range(xrng.Address)
If rngholder.Value > "" Then
xArray(x) = VBA.Trim(rngholder.Value)
Else
End If
x = x + 1
Next rngholder
В этом случае поле ввода загружается с активной ячейкой или независимо от того, какой выбор был при вызове макроса и диапазон заполняется в массив. Где вы можете настроить , это в строке set 'xrng =' line. Я бы поставил 'set xrng = logi c, чтобы получить тот выбор, который вы описали, чтобы все было слева и вверх, и удалил его.
edit:
Set xrng = Range(ActiveCell, Range(ActiveCell.End(xlToLeft), ActiveCell.End(xlUp))).Select
Вы можете понять это, немного углубившись в изучение диапазонов. Если вы выбрали этот ответ, у вас будет интерфейс для обработки исключений вручную, и, как мне кажется, вы делаете это несколько на глаз, это компромисс, который вы могли бы получить при реальном использовании.