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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2010, 18:23   #1
maugli1212
 
Регистрация: 16.10.2010
Сообщений: 4
По умолчанию Автоматическая групировка данных в Excel

Хотелось бы создать для себя что-то вроде органайзера в Excel. Возникла следующая задача:
В каждой строке указано имя клиента, в тойже строке, но в другой ячейке я указываю дату, когда с этим клиентом надо связаться. Как сделать так, чтобы при наступлении этой даты вся строка автоматически становилась на первое место в списке клиентов?
maugli1212 вне форума Ответить с цитированием
Старый 16.10.2010, 18:35   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Примерно так:
Код:
If Cells(1,1).Value=Date Then
    Rows("10:10").Select
    Selection.Cut
    Rows("1:1").Select
    Selection.Insert Shift:=xlDown
End if
Дальше надо смотреть
motorway вне форума Ответить с цитированием
Старый 16.10.2010, 18:59   #3
maugli1212
 
Регистрация: 16.10.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
Примерно так:
Код:
If Cells(1,1).Value=Date Then
    Rows("10:10").Select
    Selection.Cut
    Rows("1:1").Select
    Selection.Insert Shift:=xlDown
End if
Дальше надо смотреть
Можно ли показать на примере:
Вложения
Тип файла: zip Sample.zip (3.9 Кб, 15 просмотров)

Последний раз редактировалось maugli1212; 16.10.2010 в 19:07.
maugli1212 вне форума Ответить с цитированием
Старый 16.10.2010, 19:25   #4
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Sub test()
For i = 4 To 1000
If Cells(i, 2) = Cells(3, 5) Then
Rows(i).Cut
Rows(4).Insert Shift:=xlDown
exit for
End If
Next i

End Sub

можно так
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 16.10.2010, 19:28   #5
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

но это при условии что это одна запись
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 17.10.2010, 02:52   #6
maugli1212
 
Регистрация: 16.10.2010
Сообщений: 4
По умолчанию

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
Sub test()
For i = 4 To 1000
If Cells(i, 2) = Cells(3, 5) Then
Rows(i).Cut
Rows(4).Insert Shift:=xlDown
exit for
End If
Next i

End Sub

можно так
А если выпадают одинаковые даты в разных строках?
maugli1212 вне форума Ответить с цитированием
Старый 18.10.2010, 07:33   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Если строк очень много, то перебирать и сравнивать все значения в столбце будет очень долго. В отличии от VB, в VBA Excel есть много специальных методов для работы с ячейками, диапазонами, листами и т.д.
Данную задачу можно решить вообще не используя циклов. Предлагаю один из возможных вариантов:
Код:
Sub Main()
    Dim x As Range, i As Long
    i = Cells(Rows.Count, 2).End(xlUp).Row: Application.ScreenUpdating = False
    Set x = [B:B].Find(Date): If x Is Nothing Then Exit Sub
    [B:B].ColumnDifferences(x).EntireRow.Hidden = True
    Set x = Intersect(Rows("1:" & i), [B:B].SpecialCells(xlCellTypeVisible))
    Rows.Hidden = False: Rows("4:" & 4 + x.Rows.Count).Insert
    x.EntireRow.Copy Rows(4): x.EntireRow.Delete
End Sub
Вместо "Date" можно использовать значение ячейки, содержащей требуемую дату. В Вашем примере - ячейка "E3".
Пример во вложении.
Вложения
Тип файла: rar Sample_2.rar (10.0 Кб, 13 просмотров)
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 18.10.2010 в 07:35.
SAS888 вне форума Ответить с цитированием
Старый 18.10.2010, 11:27   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

уважаемый Маугли,
предлагаю Вам обойтись без VB и VBA (надеюсь Сережа меня простит). воспользуйтесь стандартными средствами Excel все, что необходимо сделать - добавить одну колонку с формулой.
пример во вложении.
Ваши действия теперь таковы:
1.пишете клиента, дату встречи, в третьей колонке автоматически заполняется формула
2.жмете по фильтру, жмете Ок (строка спряталась или осталась видимой)
3.ставите курсор куда-нибудь во вторую колонку, жмете по кнопке сортировать от Я до А.
Вложения
Тип файла: rar книга422.rar (4.8 Кб, 19 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.10.2010, 11:44   #9
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
предлагаю Вам обойтись без VB и VBA (надеюсь Сережа меня простит)
Игорь, какие извинения??? По-моему, чем больше вариантов решения, тем автору вопроса проще выбрать более для него приемлемый.
Еще хочу добавить, что предложенный выше макрос можно "повесить" на событие изменения значений ячеек в столбце, содержащем дату (и на открытие файла), и тогда все будет передвигаться автоматически.

P.S А что нужно делать, если, например, пользователь не открывал файл день или два? Дату встречи мы можем пропустить.
Может проще делать сортировку по дате, где сначала будут строки с сегодняшней датой, затем завтрашней и так по порядку, а строки с уже прошедшей датой опускать в самый низ. Если нужно, можно и раскрасить ячейки в зависимости от оставшихся дней др встречи.
Чем шире угол зрения, тем он тупее.

Последний раз редактировалось SAS888; 18.10.2010 в 12:03.
SAS888 вне форума Ответить с цитированием
Старый 18.10.2010, 12:19   #10
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

С VB и VBA я пытался юморить. частенько это у меня получается неуклюже...
Цитата:
А что нужно делать, если, например, пользователь не открывал файл день или два?
- выгонять с работы!!!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Групировка по полю в MS ACCESS Jeid SQL, базы данных 3 12.09.2010 14:38
Автоматическая замена данных в таблице. <Dmitry!> Microsoft Office Excel 4 18.05.2010 12:43
Групировка значений и их сумма, но с условием psbad Microsoft Office Excel 23 19.11.2009 11:00
Групировка Gawwws Microsoft Office Excel 3 30.10.2008 14:15
Автоматическая сортировка большого обьема данных в формате xml artfunk Microsoft Office Excel 3 04.09.2008 15:35