Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
Хочу сделать форму с использованием VBasic в документе Excel, для сортировки по записям в таблице (Excel), подскажите, пожалуйста, как это сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 05:05 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
Если это для работы (а не для учёбы, напр.), то чем не устраивает сортировка стандартная форма сортировки по 1...3 полям (Данные-->Сортировка)? После этого можно обсуждать варианты... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2003, 11:02 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
К сожалению, если бы все было так просто. Но все-таки, как сформировать массив для осуществления сортировки по записям в таблице? Например: Выделяются нужные записи в таблице excel, с которыми нужно осуществить сортировку, далее нажимаю на кнопку (находящуюся рядом с таблицей), появляется окно, где находятся несколько переключателей (сортировка по возрастанию, по убыванию и др.), ставлю галочку на нужном переключателе и нажимаю «ОК». В таблице при этом происходят изменения в соответствии с заданной операцией. И нужно ли использовать макросы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 07:43 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
Я не понял, проблема в чём - можно или нет использовать макросы!? Мона использовать, если это проще... Объясни поточнее, в чем непонятки... Stepler (щёлк-щёлк!!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 13:02 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
нужно ли использовать макросы? Если правило отбора реализуется стандартным автофильтром, то не нужно. После фильтрации на экране видны записи, которые можно сортировать стандартными "кнопками" (диалоговыми окнами) Excel. Однако отфильтрованные записи НЕ образуют непрерывный диапазон (это легко видеть после нажатия кнопки "Копировать": "бегущие муравьи" сегментированы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.11.2003, 13:04 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
Я нашла код сортировки массива, но как связать его с таблицей Excel, так, чтобы в таблице происходила сортировка по заданным параметрам, при выделении в таблице того или иного столбца или строки? Option Explicit Private Sub CancelButton_Click() Unload Me End Sub Private Sub Label2_Click() End Sub Private Sub OKButton_Click() Dim Array1(), Array2(), Array3(), Array4() Dim i As Long Dim Elements As Long, RElement As Long, Temp As Long Dim Time1 As Date, Time2 As Date Dim Time3 As Date, Time4 As Date Dim Time5 As Date, Time6 As Date Dim Time7 As Date, Time8 As Date Dim Msg As String lblTime1.Caption = "" lblTime2.Caption = "" lblTime3.Caption = "" LblTime4.Caption = "" ' Сообщения в окне If IsNumeric(tbElements.Value) Then If tbElements.Value > 65536 And Me.CheckBox1 Then MsgBox "Сортировка на рабочем листе выполняется только для 65,536 элементов." Exit Sub End If Else MsgBox "Неправильное значение (Количество элементов)", vbInformation tbElements.SetFocus Exit Sub End If Elements = Val(tbElements.Value) If Elements < 1 Then MsgBox "Неправильное значение (Количество элементов)", vbInformation tbElements.SetFocus Exit Sub End If ' Создание четырех одинаковых массивов lblCurrentSort = "Создание массива..." Me.Repaint Randomize ReDim Array1(1 To Elements, 0) ReDim Array2(1 To Elements) ReDim Array3(1 To Elements) ReDim Array4(1 To Elements) For i = 1 To Elements Array1(i, 0) = Rnd * 1000 ' Else ' Array1(i, 0) = i ' End If Array2(i) = Array1(i, 0) Array3(i) = Array1(i, 0) Array4(i) = Array1(i, 0) Next i ' частично сортированный массив? If obSorted Then RElement = Int((Elements) * Rnd + 1) Temp = Array1(RElement, 0) Array1(RElement, 0) = Array1(1, 0) Array1(1, 0) = Temp Array2(RElement) = Array2(1) Array2(1) = Temp Array3(RElement) = Array3(1) Array3(1) = Temp Array4(RElement) = Array4(1) Array4(1) = Temp End If ' Сортировка на рабочем листе If CheckBox1 Then lblCurrentSort = "Сортировка на рабочем листе..." Me.Repaint Time1 = Timer Call WorksheetSort(Array1) Time2 = Timer lblTime1.Caption = Format(Time2 - Time1, "00.00") & " sec." Me.Repaint End If ' Пузырьковый метод If CheckBox2 Then lblCurrentSort = "Пузырьковый метод..." Me.Repaint Time1 = Timer Call BubbleSort(Array2) Time2 = Timer lblTime2.Caption = Format(Time2 - Time1, "00.00") & " sec." Me.Repaint End If ' Быстрая сортировка If CheckBox3 Then lblCurrentSort = "Быстрая сортировка..." Me.Repaint Time1 = Timer Call Quicksort(Array3, LBound(Array2), UBound(Array2)) Time2 = Timer lblTime3.Caption = Format(Time2 - Time1, "00.00") & " sec." Me.Repaint End If ' Метод пересчета If CheckBox4 Then lblCurrentSort = "Метод пересчета..." Me.Repaint Time1 = Timer Call Countingsort(Array4) Time2 = Timer LblTime4.Caption = Format(Time2 - Time1, "00.00") & " sec." Me.Repaint End If lblCurrentSort = "Готово." End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 05:05 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
Я нашла код сортировки массива Этот код демонстрирует алгоритмы сортировки и приведен в учебных целях. как связать его с таблицей Excel, так, чтобы в таблице происходила сортировка по заданным параметрам, при выделении в таблице того или иного столбца или строки? Типичная ошибка: при выделении в таблице того или иного столбца или строки Выделяют обычно записи или поля. 1. Таблицы, как правило, имеют "шапку" (аналог имён полей в БД). 2. Таблицы НЕ содержат пустых строк или столбцов. 3. Таблицы имеют размеры, определяемые программно. 4. Существует встроенный метод сортировки, работающий быстрее любого приведенного (за счёт того, что он уже скомпилирован и оптимизирован). Он-то и использует наименования полей (как правило) для сортировки. 5. Существует метод Autofilter, позволяющий как программно, так и интерактивно фильтровать записи (обычно представляет интерес выборка , а не вся таблица) Вот код, сортирующий реестр налоговых накладных: а) по дате: key1:=r.Cells(1, 4) б) по наименованию организации: key2:=r.Cells(1, 3) в) по номеру накладной: key3:=r.Cells(1, 2) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2003, 11:22 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
Спасибо за разьяснение, я оказывается совсем темная. А что означает - shR ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 06:00 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
ShR - это тот лист, на котором находятся данные (реестр в данном случае). Чтобы произвести сортировку, нужно сначала сказать Excel'ю, на каком листе находятся данные, которые нужно отсортировать: Set shR = ThisWorkbook.Worksheets("Реестр") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 06:27 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
Могу предложить такой подход - выделяешь данные, которые нужно отсортировать. При нажатии на CommandButton - заносишь их в массив, а потом, в зависимости от того, какой метод сортировки ты выберешь (по возрастанию или убыванию) - применять его к этому массиву. Могу предложить неплохой и быстрый метод сортировки по возрастанию (сортирует как числа по возрастанию, так и строковые значения по алфавиту), если немного переделать - получишь и по убыванию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 06:32 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
Большое спасибо за отзывчивость и внимание, мне, конечно, не достает знаний, но по возможности стараюсь ликвидировать свои пробелы. я попробовала так: Sub Ascendingsort(list()) Range("G14:G21").Select Selection.Sort Key1:=Range("G15"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom End Sub но сортируются данные, естественно только в заданных заранее ячейках… Nadejda меня заинтересовало предложение по поводу кода, похоже, что у меня самой пока не получится добиться нужного результата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 18:31 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
Вышел небольшой перехлёст: раньше ты выделяла строки и/или столбцы ЦЕЛИКОМ, в приведенном коде - только диапазон-столбец: Код: plaintext В моём примере выделяется диапазон из 25 столбцов и вычисляемого количества строк: Код: plaintext 1. 2. Таблица размером N*25 сортируется по трём полям. Если надо сортировать по бОльшему к-ву полей, сортировку применяешь последовательно. Относительно скорости сортировки. Встроенные функции работают быстрее VBA-шных: они УЖЕ откомпилированы в машинный код. VBA-шный код исполняется интерпретатором. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2003, 19:32 |
|
||
|
Excel &VBA
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2003, 08:51 |
|
||
|
|

start [/forum/topic.php?fid=60&msg=32352396&tid=2170357]: |
0ms |
get settings: |
8ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 394ms |

| 0 / 0 |
