Как мне сослаться на одну ячейку в массиве диапазонов в VBA для сортировки по ней? - PullRequest
0 голосов
/ 01 октября 2019

Итак, у меня есть несколько разных компонентов, некоторые из которых имеют разные подкомпоненты, перечисленные под ними на одном листе в другом столбце, например так:

1    C
2    B
           bi            10%
           bii           30%
           biii          60%
3    A
4    D
           di            20%
           dii           80%
etc.

Я хочу отсортировать их по A, B, C, D в алфавитном порядке, без этого также возиться с добавленной информацией. Прямо сейчас у меня есть код, который подсчитывает каждый элемент, масштабирует массив соответствующим образом, затем зацикливает в каждом диапазоне, выбирая все связанные строки для каждого элемента и зацикливая диапазон. Однако, когда я пытаюсь отсортировать, я не могу получитьэто на работу. Есть идеи, как мне это сделать? Спасибо.


Dim everything() As Range
Dim check As Range
Dim count As Range

Dim lr As Long
Dim x As Long
Dim y As Long
Dim z As Long
Dim q As Long

Dim Temptxt1 As String
Dim Temptxt2 As String

y = 0
z = 0
q = 0
With ThisWorkbook.Sheets("Names and Vendors")
lr = .Cells(.Rows.count, "B").End(xlUp).Row

    'Counts number of elements to size the "everything" array
    For z = 2 To lr
    Set count = .Range("B" & z)
        If IsEmpty(count) = False Then
            q = q + 1
            End If
    Next z
    ReDim everything(z) As Range 'Resizes array

    'Loops all RM info into array by each distinct range
    For x = 2 To lr
        Set check = .Range("B" & x).EntireRow
        If IsEmpty(.Range("B" & 1 + x)) = True Then
            Do While IsEmpty(.Range("B" & 1 + x)) = True And x < lr
                    Set check = Union(check, .Range("B" & 1 + x).EntireRow)
                    x = x + 1
                Loop
        End If
        Set everything(y) = check
        y = y + 1
        Next x

    'This is where the code breaks. It gives me a type mismatch.
    For x = LBound(everything) To UBound(everything)
    For y = x To UBound(everything)
      If UCase(everything(y)) < UCase(everything(x)) Then
        Temptxt1 = everything(x).Range(1, 2)
        Temptxt2 = everything(y).Range(1, 2)
        everything(x) = Temptxt2
        everything(y) = Temptxt1
      End If
     Next y
  Next x
End With
End Sub

1 Ответ

0 голосов
/ 15 октября 2019

Было немного дерзко, как я это сделал:

Dim sorting As Range
Dim everything() As Range

'Values looped into everything() in different code not pasted here
'y is likewise calculated elsewhere

Set sorting = everything(y)

sorting.Offset(0, 1).Select
ActiveCell.Select

'The two values I need to sort by are below
Temp1 = "" & ActiveCell.Value
ven1 = "" & ActiveCell.Offset(0, 1).Value
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...