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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2014, 12:32   #11
Seraf01
Пользователь
 
Регистрация: 23.09.2013
Сообщений: 10
По умолчанию

IgorGO, thanks!!!
Seraf01 вне форума Ответить с цитированием
Старый 22.01.2015, 19:58   #12
Seraf01
Пользователь
 
Регистрация: 23.09.2013
Сообщений: 10
По умолчанию

IgorGO, подскажите, пожалуйста, что менять в коде, если столбец из которого выбирается максимальное значение стоит левее(или правее) на n-столбцов от результатирующего? :-)
Вложения
Тип файла: zip Макрос.zip (14.5 Кб, 5 просмотров)
Seraf01 вне форума Ответить с цитированием
Старый 22.01.2015, 20:42   #13
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub SetMax()
  Const c1 As Long = 4, c2 As Long = 67, c3 As Long = 70
  Dim lr As Long, r As Long, c As Long, tm As Double, lc As Long
  tm = Timer
  Application.EnableEvents = False:  Application.ScreenUpdating = False:
  Columns(1).Insert
  lr = Cells(Rows.Count, 5).End(xlUp).Row
  lc = Cells(9, 1).End(xlToRight).Column
  Range(Cells(10, 1), Cells(lr, 1)).Formula = "=row()"
  Range(Cells(10, 1), Cells(lr, 1)).Copy
  Cells(10, 1).PasteSpecial Paste:=xlPasteValues
  With ActiveSheet.Sort
    .SortFields.Clear
    .SortFields.Add Key:=Cells(9, c1).Resize(lr - 8, 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Cells(9, c2).Resize(lr - 8, 1), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .SetRange Cells(9, 1).Resize(lr - 8, lc): .Header = xlYes: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
    r = 10
    Do While r < lr
      c = WorksheetFunction.CountIf(Range(Cells(r, c1), Cells(lr, c1)), Cells(r, c1))
      Range(Cells(r, c3), Cells(r + c - 1, c3)) = Cells(r, c2)
      r = r + c
    Loop
    .SortFields.Clear
    .SortFields.Add Key:=Range("A9:A" & lr), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange Cells(9, 1).Resize(lr - 8, lc): .Header = xlYes: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
  End With
  Columns(1).Delete:  Application.EnableEvents = True:  Application.ScreenUpdating = True
  MsgBox Timer - tm
End Sub
добавил строку констант в начале (и чуть поправил код)
с1, с2, с3 - номера колонок Фактор, Значение, Макс
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 22.01.2015, 20:46   #14
Seraf01
Пользователь
 
Регистрация: 23.09.2013
Сообщений: 10
По умолчанию

Круто, спасибо!!! Удобно и эффективно!.

Последний раз редактировалось Seraf01; 22.01.2015 в 20:59.
Seraf01 вне форума Ответить с цитированием
Старый 22.01.2015, 21:05   #15
Seraf01
Пользователь
 
Регистрация: 23.09.2013
Сообщений: 10
По умолчанию

вот незадача, выдает ошибку
Seraf01 вне форума Ответить с цитированием
Старый 22.01.2015, 22:34   #16
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub SetMax()
  Const c1 As Long = 4, c2 As Long = 67, c3 As Long = 70
  Dim lr As Long, r As Long, c As Long, tm As Double, lc As Long
  tm = Timer
  Application.EnableEvents = False:  Application.ScreenUpdating = False:
  Columns(1).Insert
  lr = Cells(Rows.Count, c1+1).End(xlUp).Row
  lc = Cells(9, 2).End(xlToRight).Column
  Range(Cells(10, 1), Cells(lr, 1)).Formula = "=row()"
  Range(Cells(10, 1), Cells(lr, 1)).Copy
  Cells(10, 1).PasteSpecial Paste:=xlPasteValues
  With ActiveSheet.Sort
    .SortFields.Clear
    .SortFields.Add Key:=Cells(9, c1+1).Resize(lr - 8, 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SortFields.Add Key:=Cells(9, c2+1).Resize(lr - 8, 1), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .SetRange Cells(9, 1).Resize(lr - 8, lc): .Header = xlYes: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
    r = 10
    Do While r < lr
      c = WorksheetFunction.CountIf(Range(Cells(r, c1+1), Cells(lr, c1+1)), Cells(r, c1))
      Range(Cells(r, c3+1), Cells(r + c - 1, c3+1)) = Cells(r, c2+1)
      r = r + c
    Loop
    .SortFields.Clear
    .SortFields.Add Key:=Range("A9:A" & lr), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange Cells(9, 1).Resize(lr - 8, lc): .Header = xlYes: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
  End With
  Columns(1).Delete:  Application.EnableEvents = True:  Application.ScreenUpdating = True
  MsgBox Timer - tm
End Sub
думаете я помню все что написал... как бы не так, забыл что на лист добавлялась колонка 1 (а потом сносилась) так что Вы этого и не замечали.
везде в тексте, где встречались с1, с2, с3 их следовало заменить на с1+1, с2+1, с3+1. уже заменил))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 23.01.2015, 04:17   #17
Seraf01
Пользователь
 
Регистрация: 23.09.2013
Сообщений: 10
По умолчанию

К сожалению есть что-то еще, что не дает нормально работать, после запуска макроса excel зависает, а после принудительной остановки макроса все равно добавляется колонка и ошибка появляется...)

Последний раз редактировалось Seraf01; 23.01.2015 в 19:28.
Seraf01 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена значения при условии dariya92 Microsoft Office Excel 0 21.07.2012 15:34
Определение позиции значения (номер столбца) при повторениях Exel 2003 Ирина Розанова Microsoft Office Excel 5 17.02.2012 23:37
Определение табличного значения имея изначально 2 исходных значения? Михаил К. Общие вопросы Delphi 2 18.06.2011 21:32
определить значения выражения z=max (a,2b)*max(2a-b,b)(алгоритм функция) анжелка Паскаль, Turbo Pascal, PascalABC.NET 2 04.04.2011 08:53
Копирование значения в другой столбец при определенном условии stasbz Microsoft Office Excel 1 01.07.2009 23:55