Здравствуйте, на одном дружественном форуме я задала данный вопрос, но тишина неделю :(, может быть я неверно выразилась. в общем хотела бы услышать ваше мнение по оптимизации задачи. Задача следующая: Имеется файл со списком фамилий построчно. Напротив каждой ФАМИЛИИ в столбцах указаны значения: B-M по должности O-Z по зарплате. Необходима формула(может быть макрос), который бы анализировал по отдельности данные столбцы (имеется в виду должность и з/пл) на предмет их изменения, и в новом столбце (столбец N и AA - покрашены зеленым)указывал дату этого изменения. Заранее большое спасибо. PS (файл планируется для постоянного использования именно в таком ракурсе) прилагаю файл. задачу я решила (через ЕСЛИ, столбцы AB-AL и само решение - AM), и как мне кажется очень допотопно :(, и неэффективно с учетом того, что кол-во столбцов, которые нужно будет сравнваить - будет расти и следовательно увеличивается шанс ошибиться. как вы думаете, есть способ улучшить решение данной задачи?
Здравствуйте, на одном дружественном форуме я задала данный вопрос, но тишина неделю :(, может быть я неверно выразилась. в общем хотела бы услышать ваше мнение по оптимизации задачи. Задача следующая: Имеется файл со списком фамилий построчно. Напротив каждой ФАМИЛИИ в столбцах указаны значения: B-M по должности O-Z по зарплате. Необходима формула(может быть макрос), который бы анализировал по отдельности данные столбцы (имеется в виду должность и з/пл) на предмет их изменения, и в новом столбце (столбец N и AA - покрашены зеленым)указывал дату этого изменения. Заранее большое спасибо. PS (файл планируется для постоянного использования именно в таком ракурсе) прилагаю файл. задачу я решила (через ЕСЛИ, столбцы AB-AL и само решение - AM), и как мне кажется очень допотопно :(, и неэффективно с учетом того, что кол-во столбцов, которые нужно будет сравнваить - будет расти и следовательно увеличивается шанс ошибиться. как вы думаете, есть способ улучшить решение данной задачи?Zolotaya
SkyPro, я извиняюсь, а где я нарушила правила? файл приложен. описание вроде дала, к сож, не очень понимаю, как тема с описанием истории (history log) может мне помочь здесь.
SkyPro, я извиняюсь, а где я нарушила правила? файл приложен. описание вроде дала, к сож, не очень понимаю, как тема с описанием истории (history log) может мне помочь здесь.Zolotaya
Про правила я написал до изменения вашего поста. Тема с логгированием может помочь в этом вопросе:
Цитата
Необходима формула(может быть макрос), который бы анализировал по отдельности данные столбцы (имеется в виду должность и з/пл) на предмет их изменения, и в новом столбце (столбец N и AA - покрашены зеленым)указывал дату этого изменения.
Или я не правильно понял суть вопроса, и вам необходимо именно СРАВНЕНИЕ, а не отслеживание изменений?
ЗЫ: видимо действительно не правильно понял. Так что прошу прощения.
Про правила я написал до изменения вашего поста. Тема с логгированием может помочь в этом вопросе:
Цитата
Необходима формула(может быть макрос), который бы анализировал по отдельности данные столбцы (имеется в виду должность и з/пл) на предмет их изменения, и в новом столбце (столбец N и AA - покрашены зеленым)указывал дату этого изменения.
Или я не правильно понял суть вопроса, и вам необходимо именно СРАВНЕНИЕ, а не отслеживание изменений?
ЗЫ: видимо действительно не правильно понял. Так что прошу прощения.SkyPro
skypro1111@gmail.com
Сообщение отредактировал SkyPro - Понедельник, 07.10.2013, 14:16
изучила макрос по изменениям но только никак не могу понять как он мне может помочь. по файлу : 1. внутри по старым так сказать столбцам должности - изменений не будет, тк это история. Новые столбцы будут добавляться и ВПРом подтягиваться значения на эту дату. они могут совпадать со старыми значениями (то есть должность не менялась у человека за месяц) и не совпадать (то есть например было изменение должности). макрос выдает инфо типа "добавление новой строки и изменение ячейки". но я их вношу автоматически ВПР, то есть все ячейки меняю, и потом уже должна проводить анализ с ячейкой предыдущего столбца на предмет сопоставимости. (не знаю, доступно ли объяснила).
ЗЫ да, да, именно последовательное СРАВНЕНИЕ значений
изучила макрос по изменениям но только никак не могу понять как он мне может помочь. по файлу : 1. внутри по старым так сказать столбцам должности - изменений не будет, тк это история. Новые столбцы будут добавляться и ВПРом подтягиваться значения на эту дату. они могут совпадать со старыми значениями (то есть должность не менялась у человека за месяц) и не совпадать (то есть например было изменение должности). макрос выдает инфо типа "добавление новой строки и изменение ячейки". но я их вношу автоматически ВПР, то есть все ячейки меняю, и потом уже должна проводить анализ с ячейкой предыдущего столбца на предмет сопоставимости. (не знаю, доступно ли объяснила).
ЗЫ да, да, именно последовательное СРАВНЕНИЕ значенийZolotaya
учусь excel и vba
Сообщение отредактировал Zolotaya - Понедельник, 07.10.2013, 14:34
При помощи UDF можно так: =compare(диапазон (только одна строка), номер строки с датами)
Разделитель запятая + пробел.
Под ваши задачи подходит.
[vba]
Код
Function compare(rRange As Range, dt&) As String Application.Volatile Dim rCell As Range, txt$ On Error Resume Next txt = "" For Each rCell In rRange If rCell.Value <> rCell.Offset(0, 1).Value Then If rCell.Value <> "" Or rCell.Offset(0, 1).Value <> "" Then txt = txt & ", " & Cells(dt, rCell.Column + 1).Value Debug.Print txt End If End If Next txt = Right(txt, Len(txt) - 2) txt = Left(txt, Len(txt) - 2) compare = txt End Function
[/vba]
При помощи UDF можно так: =compare(диапазон (только одна строка), номер строки с датами)
Разделитель запятая + пробел.
Под ваши задачи подходит.
[vba]
Код
Function compare(rRange As Range, dt&) As String Application.Volatile Dim rCell As Range, txt$ On Error Resume Next txt = "" For Each rCell In rRange If rCell.Value <> rCell.Offset(0, 1).Value Then If rCell.Value <> "" Or rCell.Offset(0, 1).Value <> "" Then txt = txt & ", " & Cells(dt, rCell.Column + 1).Value Debug.Print txt End If End If Next txt = Right(txt, Len(txt) - 2) txt = Left(txt, Len(txt) - 2) compare = txt End Function
все супер! но есть одно НО, у меня файл под 11 мбайт, и он просто виснет с этой функцией пыталась в макрос затащить расчет функции но я полный "тук-тук". как думаете, что можно применить, чтобы файл отвис ? выкунить системник в окно не прдлагать UPD немножко пошаманила и файл перестал висеть, еще раз биг СПС!!!!
все супер! но есть одно НО, у меня файл под 11 мбайт, и он просто виснет с этой функцией пыталась в макрос затащить расчет функции но я полный "тук-тук". как думаете, что можно применить, чтобы файл отвис ? выкунить системник в окно не прдлагать UPD немножко пошаманила и файл перестал висеть, еще раз биг СПС!!!!Zolotaya
учусь excel и vba
Сообщение отредактировал Zolotaya - Вторник, 15.10.2013, 12:22
Наверное, так будет еще немного пошустрее (сам принцип кода не менял)
[vba]
Код
Function compare(rRange As Range, dt&) As String 'Application.Volatile Dim rCell As Range, txt$ Dim rc1 As String, cr2 As String On Error Resume Next txt = "" For Each rCell In rRange rc1_ = rCell.Value If rc1_ <> "" Then rc2_ = rCell.Offset(0, 1).Value If rc2_ <> "" Then If rc1_ <> rc2_ Then ' If rCell.Value <> "" Or rCell.Offset(0, 1).Value <> "" Then txt = txt & ", " & Cells(dt, rCell.Column + 1).Value ' Debug.Print txt End If End If End If Next txt = Right(txt, Len(txt) - 2) txt = Left(txt, Len(txt) - 2) compare = txt txt = "" End Function
Наверное, так будет еще немного пошустрее (сам принцип кода не менял)
[vba]
Код
Function compare(rRange As Range, dt&) As String 'Application.Volatile Dim rCell As Range, txt$ Dim rc1 As String, cr2 As String On Error Resume Next txt = "" For Each rCell In rRange rc1_ = rCell.Value If rc1_ <> "" Then rc2_ = rCell.Offset(0, 1).Value If rc2_ <> "" Then If rc1_ <> rc2_ Then ' If rCell.Value <> "" Or rCell.Offset(0, 1).Value <> "" Then txt = txt & ", " & Cells(dt, rCell.Column + 1).Value ' Debug.Print txt End If End If End If Next txt = Right(txt, Len(txt) - 2) txt = Left(txt, Len(txt) - 2) compare = txt txt = "" End Function
я хоть прав в том, что обнуление текстовой переменной вконце добавить "шустрости"
Теоретически да, но, я думаю, что последовательное отсечение вариантов Ifами и "снятие" значений с листа в переменные должно дать больший эффект._Boroda_