powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
17 сообщений из 17, страница 1 из 1
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522700
MrSavDre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Создать таблицу, которая содержит сведения о сотрудниках фирмы.
Структура таблицы:
- фамилия сотрудника;
- должность;
- дата рождения;
- дата поступления на работу;
- номер отдела;
- оклад.
2. Предусмотреть возможность добавления в таблицу произвольного количества строк.
3. Определить:
• возраст сотрудников (количество полных лет) при поступлении на работу и на текущее время;
• количество сотрудников заданного отдела младших Х лет (значение Х задано);
• минимальный размер оклада.
4. Создать на 2 листе книги таблицу, которая содержит сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы.
5. Сортировать данные в таблице по заданному столбцу.
6. Увеличить на Y% оклады сотрудникам, которые проработали не меньше Z лет (значение Х и Z заданы).
7. Удалить информацию о сотрудниках старше заданного возраста.

Самое последнее затруднение, в 4-м пункте, знать не знаю как выбрать несколько максимальных значений из диапазона и тем более как их ограничить 5-ю записями.

Заготовка:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Sheets(1).Activate
Sheets(2).Cells(1, 1) = "Cведения о 5-ти самых высокооплачиваемых сотрудниках фирмы"
Sheets(2).Cells(2, 1) = "Фамилия сотрудника"
Sheets(2).Cells(2, 2) = "Должность"
Sheets(2).Cells(2, 3) = "Дата рождения"
Sheets(2).Cells(2, 4) = "Дата поступления на работу"
Sheets(2).Cells(2, 5) = "Номер отдела"
Sheets(2).Cells(2, 6) = "Оклад"
i = 2: k = 3
a = Application.Max(ActiveSheet.Range("F2:F100"))
Do Until Cells(i, 6).Text = ""
If Cells(i, 6) = a Then
Sheets(2).Cells(k, 1) = Cells(i, 1)
Sheets(2).Cells(k, 2) = Cells(i, 2)
Sheets(2).Cells(k, 3) = DateValue(Cells(i, 3))
Sheets(2).Cells(k, 4) = DateValue(Cells(i, 4))
Sheets(2).Cells(k, 5) = Cells(i, 5)
Sheets(2).Cells(k, 6) = Cells(i, 6)
k = k + 1
End If
i = i + 1
Loop
Sheets(2).Activate
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522709
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Dim cn As Object, rs As Object
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ThisWorkbook.FullName + ";Extended Properties='Excel 8.0'"
rs.Open "select top 5 [Фамилия сотрудника] from [Лист1$] order by Оклад DESC ", cn, 3
Worksheets("Лист2").Cells(1, 1).CopyFromRecordset rs
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522721
MrSavDre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это единственный возможный вариант решения?
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522726
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, но это самый простой и логичный.
Фактически, состоит из двух команд, тут одна команда выбирает нужную информацию, другая ее вставляет в нужное место, все остальное - обрамление.

1) Можно отсортировать данные на листе и отобрать пять верхних (нижних) строк, потом все вернуть (при необходимости)
2) Наверняка можно воспользоваться формулой массива, но я не спец по ним
3) Можно воспользоваться циклическими обработками строк (или массива), но это самый длинный и муторный способ.
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522728
MrSavDre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просто никто не поверит что я такое написал сам, да и тут только фамилии, а нужны все данные
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522729
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrSavDreда и тут только фамилии, а нужны все данныеэто не проблема, в select через запятую можно указать все нужные поля


MrSavDreПросто никто не поверит что я такое написал самЧтобы поверили - пиши сам. Я же не знаю, какие у тебя ограничения.
Совет - не пытайся сначала написать программу, сначала продумай алгоритм, а потом, когда он заработает "на бумаге" - будешь писать реализацию
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522731
MrSavDre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Последняя просьба, можете объяснить как работает этот код?
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522736
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Боюсь так, чтобы тебе поверили - нет.
Это достаточно большой пласт - язык SQL - работа с базами данных (простой вариант которой ты сотворил)

Раз это учебное задание, думаю, от тебя хотят вариант №3

Предлагаю НЕоптимальный вариант алгоритма:
Начальный максимальный оклад примем за миллиард - N=1000000000

Начало цикла
Сканируешь все оклады - ищешь самый большой, но меньше N.
N=найденный оклад
Сканируешь всех пользователей - отбираешь всех с окладом N
Если общее количество набралось 5 - принудительно выходишь из цикла.
Конец цикла

Можешь придумать свой
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522742
MrSavDre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Диапазону ячеек можно присвоить формат даты через vba?
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522746
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, конечно
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522747
MrSavDre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно пример?
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522749
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Pro1) Можно отсортировать данные на листе и отобрать пять верхних (нижних) строк, потом все вернуть (при необходимости)

Вот пример:
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522752
MrSavDre
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот код тоже не объяснить, что ж, по крайней мере он корректно вставляет даты.
Спасибо господа, вам обоим
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522753
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему не объяснить-то?

Во-первых, код практически делает то же самое, что записал бы тебе макрорекордер (сделать копию листа - отсортировать данные - выбрать заголовок и пять первых строчек - скопировать их на второй лист - удалить копию). Просто убраны "излишние" телодвижения.
Во-вторых, я специально использовал такие методы и свойства, чтобы код процедуры был именно "читаемым". Попробуй просто внимательно прочесть (сверху-вниз слева-направо) каждую из строк кода... только не говори мне, что ты изучаешь не английский язык
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522755
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MrSavDreЭтот код тоже не объяснитьAndreTMПочему не объяснить-то?Привет, Андрей, все жду, когда же ты появишься в топике ))

Потому что по идее учебный код должен состоять только из того, что проходили. При этом часто задачи формулируются исходя из того, что студент не знает и не может знать о существовании других инструментов для решения задачи, а мы в свою очередь не знаем, какими рамками мы ограничены, так как студент нам этих рамок не предоставляет.

Посему, я и предлагаю ТС думать самому, благо студент попался не халявщик, и что-то упроно делает, реализовывая имеющиеся знания. )
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522756
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, так и я о том же. Только несколько с другой стороны: экономистов часто "учат" (в плане VBA) не алгоритмам, а "макрорекордированию"
А то, что код "немного причёсан" - так это завсегда можно исправить, ведь ломать - не делать...
...
Рейтинг: 0 / 0
Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
    #38522758
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, кстати, те же самые действия, записанные рекордером. Найдёте много отличий?
Код
Код: vbnet
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.
Sub Макрос1()
'
' Макрос1 Макрос
'

'
    Sheets("Лист1").Select
    Sheets("Лист1").Copy Before:=Sheets(1)
    ActiveWorkbook.Worksheets("Лист1 (2)").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист1 (2)").Sort.SortFields.Add Key:=Range( _
        "F2:F11"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
        xlSortNormal
    ActiveWorkbook.Worksheets("Лист1 (2)").Sort.SortFields.Add Key:=Range( _
        "A2:A11"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Лист1 (2)").Sort
        .SetRange Range("A1:F11")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Rows("1:6").Select
    Selection.Copy
    Sheets("Лист2").Select
    Range("A2").Select
    ActiveSheet.Paste
    Range("A2").Select
    Sheets("Лист1 (2)").Select
    Application.CutCopyMode = False
    ActiveWindow.SelectedSheets.Delete
    Sheets("Лист2").Select
End Sub

...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сведения о 5-ти самих высокооплачиваемых сотрудниках фирмы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]