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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2013, 09:33   #1
kiska190593
Пользователь
 
Регистрация: 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
ПОЖАЛУЙСТА ПОМОГИТЕ!!!!!
kiska190593 вне форума Ответить с цитированием
Старый 13.05.2013, 10:12   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Думаю можно сделать намного проще - ставите фильтр, копируете видимые строки на другой лист. Хотя вот куда/как отобрать - это не сказано. Это в примере кода так
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 17.05.2013, 08:44   #3
kiska190593
Пользователь
 
Регистрация: 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
kiska190593 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на множества.Написать программу не позволяющую вводить буквы русского алфавита.(написать подпрограммой используя процедуры 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