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

Вход

Регистрация

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

 

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

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для выделения диапазона в активном столбце (Макросы/Sub)
Макрос для выделения диапазона в активном столбце
zshfan Дата: Четверг, 24.03.2016, 14:23 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Доброго времени суток уважаемые форумчане, появилась такая проблема, есть лист с данными "База", над данными строка с выпадающими списками, необходимо при выборе в выпадающем списке значения закрыт, разрывать все связи в столбце с данными в котором расположен выпадающий список, уже голову сломал, а всё никак не получается выделить диапазон данных под списком, замену формул на их значения для выбранного диапазона провести не проблема, а вот выбрать как не знаю.
[p.s.]Заранее благодарю![/p.s.]
[moder]А пример в файле?[/moder]


Сообщение отредактировал _Boroda_ - Четверг, 24.03.2016, 14:34
 
Ответить
СообщениеДоброго времени суток уважаемые форумчане, появилась такая проблема, есть лист с данными "База", над данными строка с выпадающими списками, необходимо при выборе в выпадающем списке значения закрыт, разрывать все связи в столбце с данными в котором расположен выпадающий список, уже голову сломал, а всё никак не получается выделить диапазон данных под списком, замену формул на их значения для выбранного диапазона провести не проблема, а вот выбрать как не знаю.
[p.s.]Заранее благодарю![/p.s.]
[moder]А пример в файле?[/moder]

Автор - zshfan
Дата добавления - 24.03.2016 в 14:23
_Boroda_ Дата: Четверг, 24.03.2016, 14:48 | Сообщение № 2
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Выбрать вот так примерно можно.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Count > 1 Then Exit Sub
        If .Row > 1 Then Exit Sub
        If .Value <> "закрыт" Then Exit Sub
        c_ = .Column
        r0_ = 2
        r1_ = Cells(Rows.Count, c_).End(xlUp).Row
        Cells(r0_, c_).Resize(r1_ - r0_ + 1).Select
    End With
End Sub
[/vba]
К сообщению приложен файл: 48257869.xlsm(14Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВыбрать вот так примерно можно.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Count > 1 Then Exit Sub
        If .Row > 1 Then Exit Sub
        If .Value <> "закрыт" Then Exit Sub
        c_ = .Column
        r0_ = 2
        r1_ = Cells(Rows.Count, c_).End(xlUp).Row
        Cells(r0_, c_).Resize(r1_ - r0_ + 1).Select
    End With
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 24.03.2016 в 14:48
Manyasha Дата: Четверг, 24.03.2016, 14:54 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 1590
Репутация: 669 ±
Замечаний: 0% ±

Excel 2007, 2010
еще вариант:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Set myRng = Intersect(Target, Rows(1))
    If Not myRng Is Nothing Then
        For Each cell In myRng
            If cell.Value = "закрыт" Then _
                Set res = Range(Cells(2, cell.Column), Cells(Rows.Count, cell.Column).End(xlUp))
                res.Select 'выделяем
        Next cell
    End If
End Sub
[/vba]
К сообщению приложен файл: test.xlsm(16Kb)


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениееще вариант:
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Set myRng = Intersect(Target, Rows(1))
    If Not myRng Is Nothing Then
        For Each cell In myRng
            If cell.Value = "закрыт" Then _
                Set res = Range(Cells(2, cell.Column), Cells(Rows.Count, cell.Column).End(xlUp))
                res.Select 'выделяем
        Next cell
    End If
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 24.03.2016 в 14:54
zshfan Дата: Четверг, 24.03.2016, 17:58 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Manyasha, Большое спасибо! сработал второй вариант. Правда при изменении на другое значение ячейка вываливается с ошибкой, но это решу просто обработчиком ошибок.
 
Ответить
СообщениеManyasha, Большое спасибо! сработал второй вариант. Правда при изменении на другое значение ячейка вываливается с ошибкой, но это решу просто обработчиком ошибок.

Автор - zshfan
Дата добавления - 24.03.2016 в 17:58
_Boroda_ Дата: Четверг, 24.03.2016, 18:06 | Сообщение № 5
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
сработал второй вариант

Вы хотите сказать, что мой вариант не работает?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
сработал второй вариант

Вы хотите сказать, что мой вариант не работает?

Автор - _Boroda_
Дата добавления - 24.03.2016 в 18:06
zshfan Дата: Четверг, 24.03.2016, 18:08 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
_Boroda_, совершенно верно. просто не реагирует на изменения, по крайней мере в моём файле.
К сообщению приложен файл: 6878529.xlsx(97Kb)
 
Ответить
Сообщение_Boroda_, совершенно верно. просто не реагирует на изменения, по крайней мере в моём файле.

Автор - zshfan
Дата добавления - 24.03.2016 в 18:08
zshfan Дата: Четверг, 24.03.2016, 18:14 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
В итоге у меня получилось так:

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo endMacro
Dim myRng, cell, res As Range
    Set myRng = Intersect(Target, Rows(1))
    If Not myRng Is Nothing Then
        For Each cell In myRng
            If cell.Value = "Закрыт" Then _
                Set res = Range(Cells(4, cell.Column), Cells(Rows.Count, cell.Column).End(xlUp))
                res.Select 'выделяем
                    Selection.Copy
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                Range(Cells(1, cell.Column), Cells(1, cell.Column)).Select
        Next cell
    End If
endMacro:
End Sub
[/vba]
 
Ответить
СообщениеВ итоге у меня получилось так:

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo endMacro
Dim myRng, cell, res As Range
    Set myRng = Intersect(Target, Rows(1))
    If Not myRng Is Nothing Then
        For Each cell In myRng
            If cell.Value = "Закрыт" Then _
                Set res = Range(Cells(4, cell.Column), Cells(Rows.Count, cell.Column).End(xlUp))
                res.Select 'выделяем
                    Selection.Copy
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                Range(Cells(1, cell.Column), Cells(1, cell.Column)).Select
        Next cell
    End If
endMacro:
End Sub
[/vba]

Автор - zshfan
Дата добавления - 24.03.2016 в 18:14
_Boroda_ Дата: Четверг, 24.03.2016, 18:17 | Сообщение № 8
Группа: Модераторы
Ранг: Экселист
Сообщений: 9381
Репутация: 3951 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Конечно не реагирует - у Вас его в файле просто нет. :D
Ловите еще раз. Немного изменил там - высота считается по столбцу А
И зачем Вам выделять-то? Вот так смотрите
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Count > 1 Then Exit Sub
        If .Row > 1 Then Exit Sub
        If .Value <> "Закрыт" Then Exit Sub
        c_ = .Column
        r0_ = 4
        r1_ = Cells(Rows.Count, 1).End(xlUp).Row
        Cells(r0_, c_).Resize(r1_ - r0_ + 1) = Cells(r0_, c_).Resize(r1_ - r0_ + 1).Value
    End With
End Sub
[/vba]
К сообщению приложен файл: 6878529_2.xlsb(95Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеКонечно не реагирует - у Вас его в файле просто нет. :D
Ловите еще раз. Немного изменил там - высота считается по столбцу А
И зачем Вам выделять-то? Вот так смотрите
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Count > 1 Then Exit Sub
        If .Row > 1 Then Exit Sub
        If .Value <> "Закрыт" Then Exit Sub
        c_ = .Column
        r0_ = 4
        r1_ = Cells(Rows.Count, 1).End(xlUp).Row
        Cells(r0_, c_).Resize(r1_ - r0_ + 1) = Cells(r0_, c_).Resize(r1_ - r0_ + 1).Value
    End With
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 24.03.2016 в 18:17
zshfan Дата: Четверг, 24.03.2016, 18:59 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
_Boroda_, Теперь отрабатывает идеально! Спасибо большое!
 
Ответить
Сообщение_Boroda_, Теперь отрабатывает идеально! Спасибо большое!

Автор - zshfan
Дата добавления - 24.03.2016 в 18:59
Wasilich Дата: Четверг, 24.03.2016, 19:34 | Сообщение № 10
Группа: Друзья
Ранг: Ветеран
Сообщений: 878
Репутация: 222 ±
Замечаний: 0% ±

2003
И так можно
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("J1:BK1"), Target) Is Nothing Then
If Target <> "Закрыт" Then Exit Sub
KL = Target.Column
PS = Cells(Rows.Count, KL).End(xlUp).Row
Application.EnableEvents = False
Range(Cells(4, KL), Cells(PS, KL)).Value = Range(Cells(4, KL), Cells(PS, KL)).Value
Application.EnableEvents = True
End If
End Sub
[/vba]


Сообщение отредактировал Wasilich - Четверг, 24.03.2016, 19:34
 
Ответить
СообщениеИ так можно
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Application.Intersect(Range("J1:BK1"), Target) Is Nothing Then
If Target <> "Закрыт" Then Exit Sub
KL = Target.Column
PS = Cells(Rows.Count, KL).End(xlUp).Row
Application.EnableEvents = False
Range(Cells(4, KL), Cells(PS, KL)).Value = Range(Cells(4, KL), Cells(PS, KL)).Value
Application.EnableEvents = True
End If
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 24.03.2016 в 19:34
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для выделения диапазона в активном столбце (Макросы/Sub)
Страница 1 из 11
Поиск:

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