Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос для автоматической сортировки диапазона значений - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для автоматической сортировки диапазона значений (Макросы/Sub)
Макрос для автоматической сортировки диапазона значений
Account196 Дата: Среда, 12.09.2018, 10:41 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
У меня был вопрос по данной таблице, пользователь Pelena очень сильно помогла в решении одного вопроса, но есть еще один не менее важный. Если кто знает, подскажите, пожалуйста.
Подробнее описал ниже.
На вкладке "Производственные затраты и ФР" после нажатия кнопки "Добавить позицию статьи затрат" происходит добавление строки, где в ячейке А1 необходимо выбрать из справочника нужную статью затрат.
А можно ли, чтобы со строки А24 и внесенное значение в поле строки В24 автоматически сортировалось по коду в порядке возрастания, т.е. если в поле А1 выбрано значение П001, затем значение П038, и далее значение П005, в таблице со строки 24 и ниже статьи затрат (А) и их цифровые значения (В) распологались в порядке П001, П005, П038 и т.д.
Заранее спасибо!
P.S. Статьи затрат с кодом А000 - постоянные (они не изменяются), а с кодом П000 - переменные (могут в одном месяце быть, а могут и не быть). Вот они и нуждаются в сортировке в данной таблице.
К сообщению приложен файл: 7795196.7z(96.8 Kb)


Сообщение отредактировал Account196 - Среда, 12.09.2018, 13:17
 
Ответить
СообщениеУ меня был вопрос по данной таблице, пользователь Pelena очень сильно помогла в решении одного вопроса, но есть еще один не менее важный. Если кто знает, подскажите, пожалуйста.
Подробнее описал ниже.
На вкладке "Производственные затраты и ФР" после нажатия кнопки "Добавить позицию статьи затрат" происходит добавление строки, где в ячейке А1 необходимо выбрать из справочника нужную статью затрат.
А можно ли, чтобы со строки А24 и внесенное значение в поле строки В24 автоматически сортировалось по коду в порядке возрастания, т.е. если в поле А1 выбрано значение П001, затем значение П038, и далее значение П005, в таблице со строки 24 и ниже статьи затрат (А) и их цифровые значения (В) распологались в порядке П001, П005, П038 и т.д.
Заранее спасибо!
P.S. Статьи затрат с кодом А000 - постоянные (они не изменяются), а с кодом П000 - переменные (могут в одном месяце быть, а могут и не быть). Вот они и нуждаются в сортировке в данной таблице.

Автор - Account196
Дата добавления - 12.09.2018 в 10:41
_Boroda_ Дата: Среда, 12.09.2018, 11:07 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13487
Репутация: 5522 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
В модуль листа вот так можно
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    r0_ = 24
    n_ = Cells(Rows.Count, 1).End(3).Row - r0_ - 4
    If Not Intersect(Target, Range("A" & r0_).Resize(n_)) Is Nothing Then
        With Application
            .ScreenUpdating = 0
            .Calculation = xlCalculationManual
            .EnableEvents = 0
        End With
        With Me.Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("A" & r0_)
            .SetRange Range("A" & r0_).Resize(n_, 2)
            .Apply
        End With
        With Application
            .ScreenUpdating = 1
            .Calculation = xlCalculationAutomatic
            .EnableEvents = 1
        End With
    End If
End Sub
[/vba]
К сообщению приложен файл: ____1.xlsb(77.7 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВ модуль листа вот так можно
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    r0_ = 24
    n_ = Cells(Rows.Count, 1).End(3).Row - r0_ - 4
    If Not Intersect(Target, Range("A" & r0_).Resize(n_)) Is Nothing Then
        With Application
            .ScreenUpdating = 0
            .Calculation = xlCalculationManual
            .EnableEvents = 0
        End With
        With Me.Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("A" & r0_)
            .SetRange Range("A" & r0_).Resize(n_, 2)
            .Apply
        End With
        With Application
            .ScreenUpdating = 1
            .Calculation = xlCalculationAutomatic
            .EnableEvents = 1
        End With
    End If
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 12.09.2018 в 11:07
Account196 Дата: Среда, 12.09.2018, 13:13 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
В модуль листа вот так можно

Спасибо Вам большое за помощь. В макрос изменения внес, в модуль добавил, Работает, но...
На главной форме предусмотрена кнопка [Очистка (обнуление) данных о реализации и себестоимости готовой продукции за предыдущий отчетный период, а также производственных затрат и ФР], после нажатия которой (в начале нового отчетного месяца) производится обнуление ранее введенных показателей в таблицах в целом (где это предусмотрено) и удаление статей переменных затрат, имеющих светло-зеленую заливку, в частности. После нажатия данной кнопки появляется окно с ошибкой: Run-time error '1004': Application-defined or object-definder error.
В определенный месяц переменных затрат с кодом П000 может и не быть, а только постоянные (А000), но ошибка '1004' все равно появляется((
Возможно, что-то в коде мешает этому макросу выполнять команду по обнулению/удалению ранее введенных показателей.
Благодарю


Сообщение отредактировал Account196 - Среда, 12.09.2018, 13:29
 
Ответить
Сообщение
В модуль листа вот так можно

Спасибо Вам большое за помощь. В макрос изменения внес, в модуль добавил, Работает, но...
На главной форме предусмотрена кнопка [Очистка (обнуление) данных о реализации и себестоимости готовой продукции за предыдущий отчетный период, а также производственных затрат и ФР], после нажатия которой (в начале нового отчетного месяца) производится обнуление ранее введенных показателей в таблицах в целом (где это предусмотрено) и удаление статей переменных затрат, имеющих светло-зеленую заливку, в частности. После нажатия данной кнопки появляется окно с ошибкой: Run-time error '1004': Application-defined or object-definder error.
В определенный месяц переменных затрат с кодом П000 может и не быть, а только постоянные (А000), но ошибка '1004' все равно появляется((
Возможно, что-то в коде мешает этому макросу выполнять команду по обнулению/удалению ранее введенных показателей.
Благодарю

Автор - Account196
Дата добавления - 12.09.2018 в 13:13
_Boroda_ Дата: Среда, 12.09.2018, 13:34 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13487
Репутация: 5522 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Видите у меня в макросе два блока With - End With? Добавьте их в свой макрос обнуления
Должно получиться вот так
[vba]
Код
Sub Обнуление_Щелчок()
With Application
    .ScreenUpdating = 0
    .Calculation = xlCalculationManual
    .EnableEvents = 0
End With
Sheets("Реализация и себестоимость").Range("I8,J8").Value = " "
Sheets("Производственные затраты и ФР").Range("B12:B23").Value = "0"
Sheets("Реализация и себестоимость").Select
For i = 1000 To 2 Step -1
If Cells(i, 1).Interior.ColorIndex = Cells(1, 1).Interior.ColorIndex Then
Rows(i).Delete
End If
Next
Sheets("Производственные затраты и ФР").Select
For i = 1000 To 2 Step -1
If Cells(i, 1).Interior.ColorIndex = Cells(1, 1).Interior.ColorIndex Then
Rows(i).Delete
End If
Next
Sheets("Главная форма").Select
With Application
    .ScreenUpdating = 1
    .Calculation = xlCalculationAutomatic
    .EnableEvents = 1
End With
End Sub
[/vba]
К сообщению приложен файл: ____2.xlsb(79.9 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВидите у меня в макросе два блока With - End With? Добавьте их в свой макрос обнуления
Должно получиться вот так
[vba]
Код
Sub Обнуление_Щелчок()
With Application
    .ScreenUpdating = 0
    .Calculation = xlCalculationManual
    .EnableEvents = 0
End With
Sheets("Реализация и себестоимость").Range("I8,J8").Value = " "
Sheets("Производственные затраты и ФР").Range("B12:B23").Value = "0"
Sheets("Реализация и себестоимость").Select
For i = 1000 To 2 Step -1
If Cells(i, 1).Interior.ColorIndex = Cells(1, 1).Interior.ColorIndex Then
Rows(i).Delete
End If
Next
Sheets("Производственные затраты и ФР").Select
For i = 1000 To 2 Step -1
If Cells(i, 1).Interior.ColorIndex = Cells(1, 1).Interior.ColorIndex Then
Rows(i).Delete
End If
Next
Sheets("Главная форма").Select
With Application
    .ScreenUpdating = 1
    .Calculation = xlCalculationAutomatic
    .EnableEvents = 1
End With
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 12.09.2018 в 13:34
Account196 Дата: Среда, 12.09.2018, 13:48 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Вы - гений! Спасибо!! Внес изменения в кнопку очистки. Вот что значит невнимательность (моя). Одно исправил, а на другое даже не посмотрел.
А можно ли исправить эту ошибку, если переменных затрат в месяце нет, а только постоянные, то есть: переменных затрат с кодом П000 может и не быть, а только постоянные (А000), но ошибка '1004' все равно появляется, если не использовать статьи затрат с кодом П000. Если хоть одна добавлена в таблицу, то всё происходит ровно. Если нет, то выскакивает ошибка.
 
Ответить
Сообщение_Boroda_, Вы - гений! Спасибо!! Внес изменения в кнопку очистки. Вот что значит невнимательность (моя). Одно исправил, а на другое даже не посмотрел.
А можно ли исправить эту ошибку, если переменных затрат в месяце нет, а только постоянные, то есть: переменных затрат с кодом П000 может и не быть, а только постоянные (А000), но ошибка '1004' все равно появляется, если не использовать статьи затрат с кодом П000. Если хоть одна добавлена в таблицу, то всё происходит ровно. Если нет, то выскакивает ошибка.

Автор - Account196
Дата добавления - 12.09.2018 в 13:48
_Boroda_ Дата: Среда, 12.09.2018, 13:52 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13487
Репутация: 5522 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Я думал, что строки до 24-й всегда неизменны. Если нет, то так
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    r0_ = 24
    n_ = Cells(Rows.Count, 1).End(3).Row - r0_ - 4
    If n_ < 1 Then Exit Sub
    If Not Intersect(Target, Range("A" & r0_).Resize(n_)) Is Nothing Then
        With Application
            .ScreenUpdating = 0
            .Calculation = xlCalculationManual
            .EnableEvents = 0
        End With
        With Me.Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("A" & r0_)
            .SetRange Range("A" & r0_).Resize(n_, 2)
            .Apply
        End With
        With Application
            .ScreenUpdating = 1
            .Calculation = xlCalculationAutomatic
            .EnableEvents = 1
        End With
    End If
End Sub
[/vba]
К сообщению приложен файл: ____3.xlsb(79.9 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЯ думал, что строки до 24-й всегда неизменны. Если нет, то так
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    r0_ = 24
    n_ = Cells(Rows.Count, 1).End(3).Row - r0_ - 4
    If n_ < 1 Then Exit Sub
    If Not Intersect(Target, Range("A" & r0_).Resize(n_)) Is Nothing Then
        With Application
            .ScreenUpdating = 0
            .Calculation = xlCalculationManual
            .EnableEvents = 0
        End With
        With Me.Sort
            .SortFields.Clear
            .SortFields.Add Key:=Range("A" & r0_)
            .SetRange Range("A" & r0_).Resize(n_, 2)
            .Apply
        End With
        With Application
            .ScreenUpdating = 1
            .Calculation = xlCalculationAutomatic
            .EnableEvents = 1
        End With
    End If
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 12.09.2018 в 13:52
Account196 Дата: Среда, 12.09.2018, 14:00 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 17
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Я думал, что строки до 24-й всегда неизменны. Если нет, то так

Да, эти строки в таблице (А000) всегда неизменны, а вот П000 - непостоянны.
Изменения внес. Проверил, поиграл с таблицей всем и мыслимыми и немыслимыми образами :D :D
Всё! Супер. Отлично! Благодарю Вас! respect
Отличный форум, помогают профессионально. clap
 
Ответить
Сообщение
Я думал, что строки до 24-й всегда неизменны. Если нет, то так

Да, эти строки в таблице (А000) всегда неизменны, а вот П000 - непостоянны.
Изменения внес. Проверил, поиграл с таблицей всем и мыслимыми и немыслимыми образами :D :D
Всё! Супер. Отлично! Благодарю Вас! respect
Отличный форум, помогают профессионально. clap

Автор - Account196
Дата добавления - 12.09.2018 в 14:00
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для автоматической сортировки диапазона значений (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!