Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2008, 04:50   #1
kola672
Пользователь
 
Регистрация: 24.12.2008
Сообщений: 50
По умолчанию Требуется помощь в сортировки данных.

Большая просьба помочь.
Есть база данных спортивных результатов, которая набирается в ручную.
Требуется, чтобы результаты из этой базы данных, сортировались по таким данным как: По времени, чемпионатам, по коэффициентам и т.д.
В отдельные листы или книги Excel. В ручную сортировать такое количество данных отнимает слишком большое количество времени.
kola672 вне форума Ответить с цитированием
Старый 24.12.2008, 05:21   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
В ручную сортировать такое количество данных отнимает слишком большое количество времени
Вы что, вручную меняете местами ячейки?
Даже в сложных случаях с огромным объёмом данных сортировка обычно занимает несколько секунд...

В чем сложности?

1. Выделяете ячейку заголовка столбца, и нажимаете кнопку Сортировка
2. Удерживая клавишу Ctrl, перетаскиваете ярлычок листа в сторону - это создаст копию листа.
3. Повторяем пункты 1 и 2 нужное количество раз.

В итоге всё будет готово за считанные секунды.

Ну а если есть какие-то сложности с сортировкой (в связи с особенностями хранения данных в Вашей книге), - так Вы хоть файл к сообщению прикрепите...
EducatedFool вне форума Ответить с цитированием
Старый 25.12.2008, 02:09   #3
kola672
Пользователь
 
Регистрация: 24.12.2008
Сообщений: 50
По умолчанию

Из Листа "Набранное в ручную", в Лист1 заносятся данные с коэффициентами с2 до 2,1.

Из Листа "Набранные в ручную", в Лист2 заносятся данные по времени, то есть начиная с 00.00 до 23.59. Время выстраивается в правельном порядке, а не хаотично.

Из Листа "Набранные в ручную", в Лист3 заносятся данные одного чемпионата.

Во всех листах спортивные команды должны выстраиваться по времени за сутки, кроме конечно Листа "Набранные в ручную"

Последний раз редактировалось kola672; 23.04.2009 в 19:34.
kola672 вне форума Ответить с цитированием
Старый 27.12.2008, 02:25   #4
kola672
Пользователь
 
Регистрация: 24.12.2008
Сообщений: 50
По умолчанию

Сортировать спортивные результаты в Листе "Набранные в ручную" можно, так и делаю, но сложность заключается в том, что данные должны разместиться в 100 листах и больше. Это слишком сложно, так, что буду очень благодарен тому, кто поможет разрешить эту задачу. Без автоматической сортировки не обойтись.
kola672 вне форума Ответить с цитированием
Старый 27.12.2008, 17:34   #5
Grusha
 
Регистрация: 27.12.2008
Сообщений: 7
По умолчанию

Могу задать вопрос по сортировке данных здесь? Или необходимо создавать новую тему?

Вопрос по VBA, Excel

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

Не могу найти как это сделать.
Помогите, пожалуйста!
Grusha вне форума Ответить с цитированием
Старый 27.12.2008, 18:12   #6
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

Grusha, лучше создавать отдельную тему. Так будет легче её потом найти, когда другой юзер придёт и задаст точно такой же вопрос. Мы найдём твою отдельную тему и дадим ему ссылку на твою тему, чтобы не отвечать на один и тот же вопрос 100 раз. На форумах есть такое правило: Один вопрос - одна тема!

Отсюда вывод второй вопрос - уже будет другая тема

См. файл
Вложения
Тип файла: rar ComboBoxSort.rar (10.9 Кб, 66 просмотров)
Pavel55 вне форума Ответить с цитированием
Старый 27.12.2008, 18:43   #7
Grusha
 
Регистрация: 27.12.2008
Сообщений: 7
По умолчанию

Спасибо

вопрос по коду

Dim First&, Last&, i&, j&, Temp$

Вы объявляете переменные таким образом. Что это за тип и имеет ли это отношение к сортировке?
Grusha вне форума Ответить с цитированием
Старый 27.12.2008, 19:12   #8
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от Grusha Посмотреть сообщение
Вы объявляете переменные таким образом. Что это за тип и имеет ли это отношение к сортировке?
Таблица 3.2. Символы определения типа
Код:
!                Single
@              Currency
#               Double
$               Siring
%              Integer
&               Long

Последний раз редактировалось valerij; 27.12.2008 в 19:53.
valerij вне форума Ответить с цитированием
Старый 27.12.2008, 19:16   #9
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию 2 Pavel55

Цитата:
Сообщение от Pavel55 Посмотреть сообщение
См. файл
Не проще ли так:

Код:
Dim ra As Range, newRa As Range

Private Sub UserForm_Initialize()
    Set ra = Worksheets("Лист1").Range("a1:a30"): Set newRa = Worksheets.Add.Cells(1)
    ra.Copy newRa: Set newRa = newRa.Parent.UsedRange

    newRa.Sort newRa.Cells(1), xlAscending, , , , , , xlGuess
    newRa.AdvancedFilter xlFilterInPlace, , , True

    Me.ComboBox1.RowSource = newRa.Offset(1).Resize(newRa.Cells.Count - 1, 1).Address
End Sub

Private Sub UserForm_Terminate()
    Application.DisplayAlerts = False: newRa.Parent.Delete: Application.DisplayAlerts = True
End Sub

Private Sub CommandButton1_Click()
    Unload Me
End Sub
Или так:
Код:
Private Sub UserForm_Initialize()
    Me.ComboBox1.RowSource = "Лист1!A2:A30"
    List = UserForm1.ComboBox1.List
    BubbleSort List
    Me.ComboBox1.RowSource = "": Me.ComboBox1.List = List
End Sub

Private Sub BubbleSort(List)    ' Сортировка массива List в возрастающем порядке
    First = LBound(List): Last = UBound(List)
    For i = First To Last - 1
        For j = i + 1 To Last
            If CSng(List(i, 0)) > CSng(List(j, 0)) Then
                Temp = List(j, 0): List(j, 0) = List(i, 0): List(i, 0) = Temp
            End If
        Next j
    Next i
End Sub

PS: Я до сих пор с трудом плохо ориентируюсь в алгоритам сортировки, так что у меня в коде порой присутствуют процедуры сортировки массивов в динамически создаваемом FlexGrid-e
Код:
Dim FG As New MSFlexGrid ' сортировка массива в FlexGrid-е
    FG.Rows = DectDB.count + 1:    FG.Cols = 3
    For i = 1 To FG.Rows - 1
        For j = 1 To FG.Cols
            FG.TextMatrix(i, 0) = DectDB.item(i).Client
            FG.TextMatrix(i, 1) = DectDB.item(i).Address
            FG.TextMatrix(i, 2) = DectDB.item(i).Equipment
        Next
    Next
    FG.col = 0: FG.Row = 0: FG.Sort = flexSortStringNoCaseAscending

Последний раз редактировалось EducatedFool; 27.12.2008 в 19:45.
EducatedFool вне форума Ответить с цитированием
Старый 27.12.2008, 23:45   #10
Pavel55
Форумчанин
 
Регистрация: 21.08.2007
Сообщений: 292
По умолчанию

EducatedFool, у вас в первом и втором примере есть повторяющиеся значения: 35, 44, 57
Pavel55 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Требуется помощь etrom Помощь студентам 4 19.10.2008 16:36
Требуется помощь) immortalis Помощь студентам 3 12.10.2008 21:48
Требуется помощь! Artazzz БД в Delphi 4 17.06.2008 01:52
Требуется помощь! Svetax2 Помощь студентам 0 06.06.2008 19:30