|
VBA4. Сортировка чисел в столбце по возрастанию или убываниюDate: 2015-10-07; view: 514. Рекомендации. Для определения m и n в функциях Mrow и Ncol применить циклы типа Do-Loop: Function Mrow() As Integer Dim i As Integer i = 1 Do Until IsEmpty (Cells(i, 1)) i = i + 1 Loop Mrow = i - 1 End Function Процедура TabA должна иметь следующий заголовок: Sub TabA(m As Integer, n As Integer, A( ) as Single) Для копирования таблицы в массив A использовать двойной цикл типа For-Next: For i=1 To m For j=1 To n A(i,j)=Cells(i,j).Value Next j Next i Для вычисления сумм столбцов в событийной процедуре также использовать двойной цикл, полагая, что исходные данные находятся в массиве A. Здесь внешний цикл - по j. Он включает в себя начальное присваивание S=0, цикл по i, в котором наращивается значение S, и, наконец, присваивание j-го результата: Cells(i,j).Value = S
1. На листе Excel для создания интерфейса пользователя разместите элементы управления: надпись Номер столбца; поле TextBox1 и счетчик SpinButton1 для указания номера столбца; переключатели Option1, Option2 с надписями По возрастанию, По убыванию и кнопку с надписью Сортировать - см. рисунок.
2. Для поля TextBox1 и для счетчика SpinButton1 установите свойство Value=1. Кроме того, для счетчика установите значения свойств Min=1 и Max=20. Для счетчика создайте событийную процедуру SpinButton1_Change() – при изменении пользователем значения счетчика она должна изменять значение TextBox1.Value, делая его равным значению счетчика. Точно так же для поля TextBox1 создайте событийную процедуру TextBox1_Change() – она должна изменять значение (свойство Value) счетчика, как только пользователь изменит значение, хранимое в текстовом поле. 3. Создайте событийную процедуру, соответствующую командной кнопке. Эта процедура должна определить номер j столбца, подлежащего сортировке, количество чисел m в этом столбце и выполнить сортировку методом пузырька. В процедуре зарезервируйте целые переменные i, j, m, переменную F типа Variant и переменные Flag и R типа Boolean. Процедура сортировки методом пузырька может включать следующие блоки: 1) Flag=False (признак того, что еще не было перестановок чисел в столбце j); i=2; 2) R = Cells(i-1,j).Value - Cells(i,j).Value (R = True, если значение в ячейке i-1 больше, чем в i; 3) если надо сортировать по возрастанию, то R = Cells(i,j).Value - Cells(i-1,j).Value; 4) если R=True, то исполняется блок 5; 5) F = Cells(i-1,j).Value; Cells(i-1,j).Value = Cells(i,j).Value; Cells(i,j).Value = F ; Flag=True; (перестановка чисел, регистрация этого факта путем присваивания Flag=True) 6) i=i+1; если i <= m , то передача управления блоку 2 - для сравнения следующей пары чисел; 7) Если Flag =True, то передача управления блоку 1, иначе конец, т.к. перестановок не было.
|