![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 19.02.2013
Сообщений: 16
|
![]()
Помогите пожалуйста написать программу..... В первых 10 столбцах рабочего листа находятся сведения о сотрудниках фирмы. Причем среди этих сведений имеются сведения о доходах сотрудника. Необходимо написать программу, делающую выборку сотрудников, доход которых заключен между двумя числами, введенными с клавиатуры. Имена полей и их содержимое придумать самостоятельно. Полученную выборку вывести на второй рабочий лист.
Должно получиться по этому примеру...Здесь мы сортировали данные по возрастанию... Type Spisok LastName As String FirstName As String PapaName As String Age As Byte End Type Sub Laba6() Dim sp() As Spisok, i As Integer, g As Integer, n As Integer Sheets("Лист2").Select Range("A112").Clear Sheets("Лист1").Select While Cells(n + 1, 1) <> "" n = n + 1 Wend n = n - 1 ReDim sp(n) For i = 1 To n sp(i).LastName = Cells(i + 1, 1) sp(i).FirstName = Cells(i + 1, 2) sp(i).PapaName = Cells(i + 1, 3) sp(i).Age = Cells(i + 1, 4) Next i sp = sortByLastName(sp, n, True) sp = sortByAge(sp, n, True) j = 2 For i = 1 To n Sheets("Лист2").Select Cells(j, 1) = sp(i).LastName Cells(j, 2) = sp(i).FirstName Cells(j, 3) = sp(i).PapaName Cells(j, 4) = sp(i).Age j = j + 1 Next i End Sub Private Function sortByLastName(massive() As Spisok, massiveSize As Integer, key As Boolean) As Spisok() ' key = true - по возрастанию ' key = false - по убыванию Dim sI As Integer, sJ As Integer, buf As Spisok For sI = 1 To massiveSize - 1 For sJ = 1 To massiveSize - sI If (key) Then If (massive(sJ).LastName > massive(sJ + 1).LastName) Then buf = massive(sJ) massive(sJ) = massive(sJ + 1) massive(sJ + 1) = buf End If Else If (massive(sJ).LastName < massive(sJ + 1).LastName) Then buf = massive(sJ) massive(sJ) = massive(sJ + 1) massive(sJ + 1) = buf End If End If Next sJ Next sI sortByLastName = massive End Function Private Function sortByAge(massive() As Spisok, massiveSize As Integer, key As Boolean) As Spisok() ' key = true - по возрастанию ' key = false - по убыванию Dim sI As Integer, sJ As Integer, buf As Spisok For sI = 1 To massiveSize - 1 For sJ = 1 To massiveSize - sI If (key) Then If (massive(sJ).Age > massive(sJ + 1).Age) Then buf = massive(sJ) massive(sJ) = massive(sJ + 1) massive(sJ + 1) = buf End If Else If (massive(sJ).Age < massive(sJ + 1).Age) Then buf = massive(sJ) massive(sJ) = massive(sJ + 1) massive(sJ + 1) = buf End If End If Next sJ Next sI sortByAge = massive End Function ПОЖАЛУЙСТА ПОМОГИТЕ!!!!! |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 11.05.2010
Сообщений: 5,170
|
![]()
Думаю можно сделать намного проще - ставите фильтр, копируете видимые строки на другой лист. Хотя вот куда/как отобрать - это не сказано. Это в примере кода так
![]()
webmoney: E265281470651 Z422237915069 R418926282008
|
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 19.02.2013
Сообщений: 16
|
![]()
[QUOTE=kiska190593;1227386]Помогите пожалуйста написать программу..... В первых 10 столбцах рабочего листа находятся сведения о сотрудниках фирмы. Причем среди этих сведений имеются сведения о доходах сотрудника. Необходимо написать программу, делающую выборку сотрудников, доход которых заключен между двумя числами, введенными с клавиатуры. Имена полей и их содержимое придумать самостоятельно. Полученную выборку вывести на второй рабочий лист.
Попробовала сделать,но не получается... Type Spisok 'название типа данных, который создает пользователь 'определяем компоненты нового типа данных LastName As String FirsName As String PapaName As String Dohod As Byte End Type Sub Lab_6() Dim Sp() As Spisok, i As Integer, j As Integer, n As Integer, k As Integer, m As Integer Sheets("Лист2").Select Range("A112").Clear Sheets("Лист1").Select k = InputBox("Введите min") m = InputBox("Введите max") For i = 1 To n Sp.LastName = Cells(i + 1, 1) Sp.FirsName = Cells(i + 1, 2) Sp.PapaName = Cells(i + 1, 3) Sp.Dohod = Cells(i + 1, 4) Next i If Cells(i + 1, 4) < k And Cells(i + 1, 4) > m Then Sheets("Лист2").Select For i = 1 To n Cells(j, 1) = Sp.LastName Cells(j, 2) = Sp.FirsName Cells(j, 3) = Sp.PapaName Cells(j, 4) = Sp.Dohod j = j + 1 Next Else: Cells(i + 1, 4) = i + 1 End If End Sub |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задача на множества.Написать программу не позволяющую вводить буквы русского алфавита.(написать подпрограммой используя процедуры | ANTON1994 | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 09.02.2013 13:53 |
Написать программу для перевода из 16-ричной системы счисления в 10-тичную, использовать процедурую(написать Delphi) | BLADIMIR | Помощь студентам | 3 | 07.09.2011 16:35 |
Тестирование сотрудников | nikozavr | C# (си шарп) | 47 | 01.06.2011 10:44 |
База сотрудников | Syltan | Общие вопросы по Java, Java SE, Kotlin | 3 | 20.05.2010 18:47 |
Тестирование сотрудников | ProKsimus | Microsoft Office Access | 3 | 08.01.2009 18:01 |