составить выборку из повторяющихся значений и создать отчет

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

SunKiSSka
Сообщения: 68
Зарегистрирован: 11 июл 2007, 12:58
Откуда: Санкт-Петербург

Please help!

Очень нужна ваша помощь.
Ситуация следующая: есть лист, на котором есть список названий, причем одно название может повторяться несколько раз. Далее еще два столбца. Затем столбец Language и два столбца ID и HO, в ячейках которых напротив соответствующего названия и обознацения языка стоит число.

Необходимо сделать отчет (вида см. файл. Sheet2), в котором в строке с конкретным названием (названия не должны поторяться) в колонке языка ставилась бы дата (из Sheet1) в первую очередь из столбца HO (если есть)а если нет то из столбца ID. Если дата берется из Sheet1 столбец ID, то эта ячейка окрашивается в красный цвет, а если из столбца HO - то в зеленый.
Вложения
Test.zip
(10.2 КБ) 44 скачивания
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

А таблицу Вашу посмотреть не могу :confused:
У меня Office 2003 и на 2007 переходить пока не собираюсь :rolleyes:
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
SunKiSSka
Сообщения: 68
Зарегистрирован: 11 июл 2007, 12:58
Откуда: Санкт-Петербург

VictorM писал(а):А таблицу Вашу посмотреть не могу :confused:
У меня Office 2003 и на 2007 переходить пока не собираюсь :rolleyes:
вот таблица в формате '03. ))
Вложения
test.zip
(4.4 КБ) 40 скачиваний
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

SunKiSSka, смотрю Вашу таблицу.
Вообще говоря, всегда когда вопрос касается работы со списками, выборкой и т.д. я для начала даю вот эту ссылочку. Рекомендую посмотреть.
http://www.planetaexcel.ru/tip.php?aid= ... f13e745e57
А потом уже можно будет и дальше думать.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
SunKiSSka
Сообщения: 68
Зарегистрирован: 11 июл 2007, 12:58
Откуда: Санкт-Петербург

VictorM писал(а):Рекомендую посмотреть.
http://www.planetaexcel.ru/tip.php?aid= ... f13e745e57
А потом уже можно будет и дальше думать.
вообще говоря я это видела и не один раз, но дело в том что у меня задача не в том чтобы выбрать уникальные записи из списка. нужно в соответствии с названием (столбец А) и значением в столбце "Priority" на новый лист вставить уникальный список, дату либо из столбца G (в первую очередь) либо из столбца F. сформировать список уникальных значений не проблема, мне не совсем понятно как на Sheet2 на пересечении одной из сток "Name" и языка поставить необходимое значение даты (из Sheet1).

может необходимо сделать какие-нибудь идентификаторы, либо через объединение нескольких значений и, соответственно, созданием вспомагательной таблицы?
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Приблизительно понятно :)
Я вот попробовал получить дату так

Код: Выделить всё

Дата = Range("A2").Offset(0, 5).Value
If Дата = "" Then Дата = Range("A2").Offset(0, 6).Value
ну а потом уже всталять куда надо и раскрашивать.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
SunKiSSka
Сообщения: 68
Зарегистрирован: 11 июл 2007, 12:58
Откуда: Санкт-Петербург

VictorM писал(а):Я вот попробовал получить дату так

Код: Выделить всё

Дата = Range("A2").Offset(0, 5).Value
If Дата = "" Then Дата = Range("A2").Offset(0, 6).Value
ну а потом уже всталять куда надо и раскрашивать.
а не могли бы вы поподробнее: это куда и к чему, к какому листу, значению или диапазону?
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Исходя из задачи: просматриваем дипазон с фамилиями, Лист1 столбец Name.
и смотрим дату в столбце F, если дата есть - принимаем ее как переменную и исползуем в дальнейшем построении итоговой таблицы. Если нет - принимаем дату из столбца G.
Тут еще можно по ходу смотреть язык (ст. E) и сразу заносить дату именно в столбец с языком на Листе 2.
Все это оформить циклом. Ну и, конечно, раскрашивать из условия - откуда взята дата.
Может это не супер, но должно работать. :rolleyes:
****
p.s. код для одной строки

Код: Выделить всё

Sub Test() 'получить информацию первой строки списка Листа 1
Range("A2").Activate
Name = ActiveCell.Value
язык = ActiveCell.Offset(0, 4).Value
Дата = ActiveCell.Offset(0, 5).Value
цвет = Range("F1").Interior.ColorIndex
If Дата = "" Then
Дата = ActiveCell.Offset(0, 6).Value
цвет = Range("G1").Interior.ColorIndex
End If
End Sub
теперь передаем в список Листа2 и дальше в цикле.
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
SunKiSSka
Сообщения: 68
Зарегистрирован: 11 июл 2007, 12:58
Откуда: Санкт-Петербург

VictorM писал(а):Исходя из задачи: просматриваем дипазон с фамилиями, Лист1 столбец Name.
и смотрим дату в столбце F, если дата есть - принимаем ее как переменную и исползуем в дальнейшем построении итоговой таблицы. Если нет - принимаем дату из столбца G.
Тут еще можно по ходу смотреть язык (ст. E) и сразу заносить дату именно в столбец с языком на Листе 2.
Все это оформить циклом. Ну и, конечно, раскрашивать из условия - откуда взята дата.
Может это не супер, но должно работать. :rolleyes:
сам алгоритм мне понятен, но только не знаю с чего начать да и с циклами все время бьюсь - не совсем понимаю принцип их написания.

Вы не могли бы примерную структуру цикла набросать. Примерно следующие наверно должно быть:

Код: Выделить всё

For n=2 to 3000
....
If...Then
Else
End if
Next
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Я думаю лучше применить Do Loop чтобы не считать строки, а пройти диапазон до последней пустой строки.

Код: Выделить всё

Sub TestDoLoop()
Range("A2").Activate
имя = ActiveCell.Value
Do Until имя = ""
iCount = iCount + 1
ActiveCell.Offset(1, 0).Activate
имя = ActiveCell.Value
Loop
MsgBox "Число повторений : " & iCount
End Sub
****
Здесь отличная справка по циклам и не только http://www.msoffice.nm.ru/vba/
"Дайте людям рыбы, и вы накормите их на весь день;
научите их ловить рыбу - и вы накормите их на всю жизнь".
Ответить