Восстановление и сортировка данных из разреженного рабочего листа в Excel VBA - PullRequest
1 голос
/ 21 марта 2011

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

Я мог бы сделать это, используя Loops и массив, но будучи предупрежденным о Loops в VBA, мне интересно, есть ли более элегантный метод, возможно, использующий встроенную функцию Excel.

Скорость важна.

UID| UK | FR | DE | FI | LUX | .....
 1 |  0 |  0 |0.03| 0.1|   0 | .....
 2 |  0 |  0 |  0 |  0 | 0.5 | .....
 3 |0.01|  0 |  0 |  0 | 0.09| .....
 4 |  0 |  0 |  0 | 0.2|   0 | .....
 5 |0.31|0.07|  0 |  0 |   0 | .....
 .    .    .    .    .     .
 .    .    .    .    .     .
 .    .    .    .    .     .
 .    .    .    .    .     .

Так что в этом примере таблицы я хотел бы вернуть географическое распределение каждого уникального идентификатора и отсортировать его, исключив любой регион с нулевым весом.

Таблица содержит несколько тысяч UID и несколько тысяч регионов.

1 Ответ

2 голосов
/ 22 марта 2011

Мне все еще не совсем ясно, чего вы пытаетесь достичь, но я скажу так много: нет встроенной функции Excel, чтобы сделать это - или, по крайней мере, не так хорошо, как если бы вы сами ее кодировали .

Попробуйте это:

Dim rngData As Range
Dim varDummy As Variant
Dim iUID As Long, iRegion As Long

Set rngData = Range("A2:Z50") ' or wherever your data is

varDummy = rngData ' Reads in whole range at once into array. (Must be Variant.)
                   ' Much quicker than accessing one cell at a time.

' Go nuts with loops here.
For iUID = LBound(varDummy,1) To UBound(varDummy,1)
    For iRegion = LBound(varDummy,2) To UBound(varDummy,2)

        If varDummy(iUID,iRegion) = 0 Then
            ' Nothing here, ignore this cell.
            ' Do nothing.
        Else
            ' Do your thang
            ' ... code for whatever it is you want to do goes here.
        End If

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