Полагаю, у меня могут быть ответы на ваши вопросы, по крайней мере, на второй, я уверен ...
Почему там стоят пустые строки?
Я могу только догадываться, так как у меня нет вашего исходного файла для проверки каких-либо нарушений или всего вашего макроса.Если бы мне пришлось угадывать, я бы сказал, что это или какая-то функция в вашем макросе, которая вызывает это, или это также может быть проблемой того, как вы определяете диапазоны сортировки.Вы указываете только столбцы, а не фактические начальные ячейки, а также не конечные ячейки.Для сортировки данных я использую динамическое определение точного диапазона.
Как их удалить или вообще не отображать?
Пожалуйста, попробуйтекод, который я настроил на основе ваших данных и код, который вы предоставили:
If Not Intersect(Target, Range("A:C")) Is Nothing Then
MsgBox ("sorting")
With ActiveWorkbook.ActiveSheet
lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row '<-- get last row of data in column "A"
.Sort.SortFields.Clear
.Sort.SortFields.Add(Range("C1:C" & lastRow), _
xlSortOnCellColor, xlDescending, , xlSortNormal).SortOnValue.Color = RGB(146, 208, 80)
.Sort.SortFields.Add Key:=.Range("B1:B" & lastRow), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.Sort.SortFields.Add Key:=.Range("C1:C" & lastRow), _
SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.Sort.SortFields.Add(Range("C1:C" & lastRow), _
SortOn:=xlSortOnCellColor, Order:=xlDescending, DataOption:=xlSortNormal).SortOnValue.Color = RGB(255, 255, 255)
With .Sort
.SetRange Range("A1:C" & lastRow)
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End If
Основная настройка - это объявление lastRow, которое настраивает нижнюю часть диапазона данных (в вашей ситуации это не имеет значения, но иногда вы можетевстречаются данные, где вы хотите отсортировать до определенной строки, и это будет очень полезно. Также lastRow, как определено здесь, очень полезно для многих других макросов и помогает динамически устанавливать диапазоны).
И у меня также естьдобавил начальные данные, как вы можете видеть в Range("C1:C" & lastRow)
Я проверил это на предоставленных вами образцах данных, и они работали, как ожидалось.Я надеюсь, что это сработает для вас именно так, как вы хотели.