Страница: 1 |
Страница: 1 |
Вопрос: VBA & Excel
Добавлено: 17.05.08 19:24
Автор вопроса:
Катя
Привет всем! Помогите, пожалуйста, с программой:
На первом листе дан список специальностей, надо написать на втором листе те же специальности, но без повтора
Первый лист:
Городской кадастр
Менеджмент
Городской кадастр
Бухгалтер
Бухгалтер
управление
Городской кадастр
Второй лист:
Городской кадастр
Менеджмент
Бухгалтер
управление
Заранее спасибо!
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа: Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #1
Добавлено: 17.05.08 21:23
Попробую предвосхитить ответ большинства обитателей форума: "А сумма вознаграждения?", а также, непосредственно, Ваше возмущение: "Какие же вы программисты, если не можете подсказать девушке, как это сделать....", а затем опять их реплику: "Вы не задаете вопрос, а просите сделать за вас работу! задайте конкретный вопрос и получите конкретный ответ".
Номер ответа: 2
Автор ответа: Катя
Вопросов: 1
Ответов: 2
Профиль | | #2
Добавлено: 17.05.08 23:02
Перефразирую свой вопрос: как сделать, так что бы на втором листе не было повторов?
Номер ответа: 3
Автор ответа: Arseny
ICQ: 298826769
Вопросов: 53
Ответов: 1732
Профиль | | #3
Добавлено: 17.05.08 23:13
цикл для чтения специальностей с первого листа, в нем второй цикл, для чтения специальностей со второго листа, если специальности нет, добавляем ее.
Номер ответа: 4
Автор ответа: Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #4
Добавлено: 18.05.08 10:52
Это можно сделать за O(NlnN), отсортировать все специальности и пройтись один раз.
Номер ответа: 5
Автор ответа: Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #5
Добавлено: 19.05.08 08:39
Можно еще так.
'создаем список уникальных значений. Правда это можно сделать только на том же листе, где исходные данные
Range("A10:A20".AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("A10:A20", _
CopyToRange:=Range("C1", Unique:=True
'Выбираем полученные данные
Range("C1".Select
Range(Selection, Selection.End(xlDown)).Select
'копируем их на другой лист
Selection.Copy
Sheets("Sheet2".Select
Range("B1".Select
ActiveSheet.Paste
Range("B7".Select
End Sub
Номер ответа: 6
Автор ответа: Катя
Вопросов: 1
Ответов: 2
Профиль | | #6
Добавлено: 19.05.08 15:14
Cпасибо вам большое!!!!!!
Номер ответа: 7
Автор ответа: Pavel
Вопросов: 0
Ответов: 36
Профиль | | #7
Добавлено: 20.05.08 00:09
Я думаю макрос уважаемой Jasmin можно сократить, убрав лишние Select
With Sheets("Лист1"
Range("A1:A" & .Cells(Rows.Count, 1).End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Sheets("Лист2".Range("A1"
, Unique:=True
End With
End Sub
Номер ответа: 8
Автор ответа: HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #8
Добавлено: 20.05.08 03:32
от блин ботаники, 2+2 решая будут драйвер писать, хукать кого-то, вспомнят все алгоритмы сортировки вроде пузырьков, вставок ещё всяких.. вспомнят шо для вычисления и польская нотация зачем-то нужна была.. а всего-то 2+2+AdvancedFilter+xlFilterCopy
Номер ответа: 9
Автор ответа: Jasmin
Вопросов: 23
Ответов: 417
Профиль | | #9
Добавлено: 20.05.08 09:51
To Pavel: Select был только для того, чтобы Катя поняла, что, куда, откуда копируется. А так он конечно не нужен.
To All: Старательно использую средства Excel, где возможно. Зачем изобретать велосипед, пусть считает он. ))
Номер ответа: 10
Автор ответа: Sharp
Лидер форума
ICQ: 216865379
Вопросов: 106
Ответов: 9979
Web-сайт:
Профиль | | #10
Добавлено: 20.05.08 11:02
Во-первых, вспоминать алгоритм сортировки не просто не нужно, а НЕЛЬЗЯ. Во-вторых, если вместо простого и короткого решения с использованием драйвера городят кучу всякой мути, это не труъ.