Найти столбец в VBA и отсортировать - PullRequest
0 голосов
/ 30 августа 2018

Привет! Я пытаюсь создать макрос, чтобы упростить сортировку данных, экспортируемых из робота.

Беда в том, что колонны могут меняться местами из-за того, как робот выполняет тестирование

Многие из столбцов бесполезны, и поэтому я создал макрос, чтобы скрыть неиспользуемые столбцы, и теперь я хотел бы добавить макрос, который сортирует эти оставшиеся 4 столбца в порядке возрастания, но я просто не могу его взломать

Пока у меня есть

Dim c As Range

For Each c In Range("A1:BR1").Cells
    If c.Value = "Plate Name (barcode)" Or c.Value = "Measurement Date" Or c.Value = "Measurement profile" Or c.Value = "pH" Or c.Value = "Count" Or c.Value <= 30 Then
    c.EntireColumn.Hidden = False
    Else: c.EntireColumn.Hidden = True
    End If
    Next c
End Sub

Который скрывает каждый столбец, кроме именованных, но я не могу заставить его отсортировать данные после этого

Я пытался найти столбец / выбрать столбец и отсортировать, но по какой-то причине макрос, кажется, работает и не выполняет сортировку

Также пытался записать макрос, но при перемещении столбцов код продолжает определять столбцы для сортировки, например, например. "D: D" или "AB: AB", однако это не всегда может быть в этих столбцах, поэтому мне нужно ПОИСК ЗАГОЛОВОК, а затем сортировать

Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 30 августа 2018

Посмотрите, работает ли что-то подобное для вас ...

Код предполагает, что между наборами данных нет пустых столбцов.

Sub SortColumns()
Dim i As Long, j As Long, lc As Long
Dim vKeys()
lc = ActiveSheet.UsedRange.Columns.Count
For i = lc To 1 Step -1
    If Columns(i).Hidden = False Then
        j = j + 1
        ReDim Preserve vKeys(1 To j)
        vKeys(j) = Cells(2, i).Address
    End If
Next i
'vKeys(4) --> First visible column from left
'vKeys(3) --> Second visible column from left
'vKeys(2) --> Third visible column from left
'vKeys(1) --> Fourth visible column from left
Range("A1").CurrentRegion.Sort key1:=Range(vKeys(4)), order1:=xlAscending, key2:=Range(vKeys(3)), order2:=xlAscending, key3:=Range(vKeys(2)), order3:=xlAscending, Header:=xlYes
Range("A1").CurrentRegion.Sort key1:=Range(vKeys(1)), order1:=xlAscending, Header:=xlYes
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...