Сортировать диапазон ячеек - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь отсортировать заранее определенный диапазон ячеек из пользовательской формы (скажем, A1: A5), используя размер массива в качестве целого числа и сам массив. Я проверил более 20 ссылок, не найдя решения.

Приведенный ниже код успешно получает значения массива (для моего тестирования есть пять двойных), вставляет их в лист sheetOperations (я всегда использую таблицы с таргетингом на код, чтобы минимизировать проблемы). Таким образом, таргетинг на листы работает, а циклическая обработка массива и получение значений работают.

Сортировка диапазона (A1: A5) не удалась. Я пробовал множество кода. Я пытаюсь получить от A1 до A5 (на указанном рабочем листе c), чтобы перечислить предыдущие значения в диапазоне в порядке убывания - когда я запускаю этот код (я пытался по возрастанию, по убыванию), он выдавал мне различные ошибки, такие как 1004 и др. c.

Если A1: A5 равен {1,3,2, 4, 6}, я хочу получить A1: A5 {6,4,2,3,1}.

Sub timeStampStorePart2(ByRef doubleArray() As Double, ByVal size As Integer)


Dim ws As Worksheet
Dim wsFound2 As Worksheet

For Each ws In ThisWorkbook.Worksheets
    If StrComp(ws.CodeName, "sheetOperations", vbTextCompare) = 0 Then
        Set wsFound2 = ws
        'MsgBox ("Found")
    End If
Next ws

Dim loopInt As Integer

Dim arrayInt As Integer
Dim rangeAddress As String

arrayInt = 0
loopInt = 1

For loopInt = 1 To size
        rangeAddress = "A" & loopInt
        wsFound2.Range(rangeAddress).Value = doubleArray(arrayInt)
        arrayInt = arrayInt + 1
Next loopInt


'rangeAddress = "A1:" & rangeAddress
'MsgBox (rangeAddress)
'Dim dataRange As Range
'Set dataRange = wsFound2.Range(rangeAddress)
wsFound2.Range("A1:A5").Sort key1:=Range("A2"), order1:=xlAscending, Header:=xlNo


End Sub

1 Ответ

0 голосов
/ 04 февраля 2020

В ответ на ваш вопрос вот довольно простой код, который сортирует диапазон, который вы описываете, используя массив ...

слегка обновлен, чтобы соответствовать целочисленному требованию.

Sub sortStuff()
Const addr As String = "A1:A6"
Dim WS As Worksheet: Set WS = ActiveSheet 'or whatever the sheet ID name is
Dim sRNG As Range: Set sRNG = WS.Range(addr)


'changed this from first answer to integer requirement and optimize code
ReDim aRay(1 To sRNG.Rows.Count, 1 To sRNG.Columns.Count) As Integer


Dim x As Long, y As Long
For x = LBound(aRay, 1) To UBound(aRay, 1)
    For y = LBound(aRay, 2) To UBound(aRay, 2)

    aRay(x, y) = Application.WorksheetFunction.Large(sRNG.Columns(y), x)
    Next y
Next x

'Puts into excel
sRNG = aRay


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