Макрос для сортировки Excel только по выделенному тексту - PullRequest
0 голосов
/ 30 мая 2018

Так что это буквально первый раз, когда я пытался создать макрос в Excel, поэтому интересно, может ли кто-нибудь мне помочь.У меня есть электронная таблица, которая состоит из нескольких страниц, с несколькими различными, но похожими наборами данных.Различные наборы данных предназначены для разных клиентов, и мне нужно держать их отдельно, но я хотел бы создать макрос для организации различных наборов данных по столбцу B, а затем по столбцу D. Я начал с этого макроса:

Sub Sort_Twice()
'
' Sort_Twice Macro
'

'
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B12") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("D2:D12") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:G12")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Так что все будет отсортировано между A1 и G12, потому что это то, что я выделил, когда начал записывать.Любое предложение о том, как мне разрешить выделять новый блок и запускать макрос только на этих полях?Единственное, что я могу найти, это сказать, чтобы поменять ячейки, перечисленные здесь в рейнджерах, но это кажется очень противоречащим тому, что я пытаюсь сделать.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

Вы можете отсортировать весь столбец.Я не знаю, нужно ли вам очистить поля сортировки, я просто оставил это там.

Sub CDER()
    Dim sh As Worksheet
    Set sh = Sheets("Sheet1")

    With sh
        .Sort.SortFields.Clear
        .Range("B:B").Sort key1:=.Range("B:B"), order1:=xlAscending, Header:=xlYes
        .Range("G:G").Sort key1:=.Range("G:G"), order1:=xlAscending, Header:=xlYes
    End With


End Sub
0 голосов
/ 30 мая 2018

Если вы можете назвать диапазоны каждого набора данных, вы можете сделать что-то вроде этого:

Sub SortRanges()
    Dim TargetSheet As Worksheet
    Dim RangeName As Variant
    Dim CurrentRange As Range
    Set TargetSheet = ThisWorkbook.Worksheets(1)
    For Each RangeName In Array("Range1", "Range2", "Range3")
        Set CurrentRange = TargetSheet.Range(RangeName)
        CurrentRange.Sort key1:=CurrentRange.Columns(2), key2:=CurrentRange.Columns(4)
    Next
End Sub

Он возьмет список имен диапазонов и отсортирует их по одному в столбцах 2 и 4. ЕслиВы не можете назвать диапазоны, вместо этого создайте массив диапазонов в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...