Здравствуйте. Помогите, пожалуйста, макросом 1. В строке, где значение столбца "B" равно "УДАЛИТЬ" (в примере строка 5) - Перенести значения столбцов "C", "D", "E", "F", "H" в текстовый файл - Удалить значения столбцов "B", "D", "E", "F", "I", "J" - В столбце "G" поставить значение "-" - В столбце "C" поставить значение "я" - Снять свойство защищаемая ячейка и убрать заливку со столбцов "C", "D", "J" 2. В строке, где значение столбца "C" отличается от "я" (в примере строка 9) - Поставить свойство защищаемая ячейка и окрасить столбцы "C", "D", "J" в светло-серый цвет
Здравствуйте. Помогите, пожалуйста, макросом 1. В строке, где значение столбца "B" равно "УДАЛИТЬ" (в примере строка 5) - Перенести значения столбцов "C", "D", "E", "F", "H" в текстовый файл - Удалить значения столбцов "B", "D", "E", "F", "I", "J" - В столбце "G" поставить значение "-" - В столбце "C" поставить значение "я" - Снять свойство защищаемая ячейка и убрать заливку со столбцов "C", "D", "J" 2. В строке, где значение столбца "C" отличается от "я" (в примере строка 9) - Поставить свойство защищаемая ячейка и окрасить столбцы "C", "D", "J" в светло-серый цветnvk_ivan
nvk_ivan, предлагаю дополнить Ваш код следующими элементами:
1). Нахождение в таблице последней строки. Многие работают через Cells(Rows.Count, 1).End(xlUp).Row 2). Добавить For ... Next для перебора строк от второй до последней заполненной в таблице. 3). Для выбора вариантов действия можно использовать оператор If ... Then или Select Case
Предлагаю с сохранением в .TXT разобраться после успешного выполнения этих пунктов.
With Range("C5, D5, J5") .Locked = False .FormulaHidden = False .Interior.Pattern = xlNone .Interior.TintAndShade = 0 .Interior.PatternTintAndShade = 0 End With
End Sub
[/vba] Сам перебор строк. Допустим, Вы объявили переменную X, с помощью которой цикл For X = [Первая проверяемая строка] to [Последняя проверяемая строка] step 1 (...) Next X перебирает строки по очереди. Номер строки везде будет заменён на Х. Ваш первый макрос примет вид:
[vba]
Код
Sub Макрос1() ' ' Удаление всего подряд со 2-й по 10-ю строку ' Dim X As Long 'Для перебора строк
For X = 2 To 10 Step 1 Range("B" & X & ", D" & X & ", E" & X & ", F" & X & ", I" & X & ", J" & X).Value = "" Range("C" & X).Value = "я" Range("G" & X).Value = "-" Range("H" & X).Value = "0"
With Range("C" & X & ", D" & X & ", J" & X) .Locked = False .FormulaHidden = False .Interior.Pattern = xlNone .Interior.TintAndShade = 0 .Interior.PatternTintAndShade = 0 End With Next X
End Sub
[/vba] Те же действия можно сделать более сложной и оптимальной (короткой) записью, но для начала работы с VBA стоит начать с избыточных записей для большего понимания происходящего.
nvk_ivan, предлагаю дополнить Ваш код следующими элементами:
1). Нахождение в таблице последней строки. Многие работают через Cells(Rows.Count, 1).End(xlUp).Row 2). Добавить For ... Next для перебора строк от второй до последней заполненной в таблице. 3). Для выбора вариантов действия можно использовать оператор If ... Then или Select Case
Предлагаю с сохранением в .TXT разобраться после успешного выполнения этих пунктов.
With Range("C5, D5, J5") .Locked = False .FormulaHidden = False .Interior.Pattern = xlNone .Interior.TintAndShade = 0 .Interior.PatternTintAndShade = 0 End With
End Sub
[/vba] Сам перебор строк. Допустим, Вы объявили переменную X, с помощью которой цикл For X = [Первая проверяемая строка] to [Последняя проверяемая строка] step 1 (...) Next X перебирает строки по очереди. Номер строки везде будет заменён на Х. Ваш первый макрос примет вид:
[vba]
Код
Sub Макрос1() ' ' Удаление всего подряд со 2-й по 10-ю строку ' Dim X As Long 'Для перебора строк
For X = 2 To 10 Step 1 Range("B" & X & ", D" & X & ", E" & X & ", F" & X & ", I" & X & ", J" & X).Value = "" Range("C" & X).Value = "я" Range("G" & X).Value = "-" Range("H" & X).Value = "0"
With Range("C" & X & ", D" & X & ", J" & X) .Locked = False .FormulaHidden = False .Interior.Pattern = xlNone .Interior.TintAndShade = 0 .Interior.PatternTintAndShade = 0 End With Next X
End Sub
[/vba] Те же действия можно сделать более сложной и оптимальной (короткой) записью, но для начала работы с VBA стоит начать с избыточных записей для большего понимания происходящего.Rioran
Роман, Москва, voronov_rv@mail.ru Яндекс-Деньги: 41001312674279
Сообщение отредактировал Rioran - Понедельник, 24.11.2014, 15:15
Возможно, его трудно заметить, но оно сидит вот в этой строке =)
[vba]
Код
For X = 2 To 10 Step 1
[/vba] Подсказываю - приглядитесь к 10-ке повнимательнее =) Так как Иван попытался разобраться сам (уважаю) и написал свой собственный код - хочу поделиться не рыбой, но удочкой. В дальнейшем 10-ку (последняя строка для просмотра) нужно будет кое-на-что заменить.
Возможно, его трудно заметить, но оно сидит вот в этой строке =)
[vba]
Код
For X = 2 To 10 Step 1
[/vba] Подсказываю - приглядитесь к 10-ке повнимательнее =) Так как Иван попытался разобраться сам (уважаю) и написал свой собственный код - хочу поделиться не рыбой, но удочкой. В дальнейшем 10-ку (последняя строка для просмотра) нужно будет кое-на-что заменить.
Ну вроде всё получилось. Всем огромное спасибо за помощь.
[vba]
Код
' ' Удаляем клиентов помеченных на удаление ' Dim X As Long 'Переменная для перебора Dim Y As Long 'Переменная определяющая последнюю строку Y = Cells(Rows.Count, 1).End(xlUp).Row 'Определяем последнюю строку
'Начинаем цикл For X = 2 To Y Step 1 'Если значение второго столбца "УДАЛИТЬ" If Cells(X, 2) = "УДАЛИТЬ" Then 'То Range("B" & X & ", D" & X & ", E" & X & ", F" & X & ", I" & X & ", J" & X).Value = "" 'Очищаем столбцы "B", "D", "E", "F", "I", "J" Range("C" & X).Value = "я" 'В столбце "C" ставим значение "я" Range("G" & X).Value = "-" 'В столбце "G" ставим значение "-" Range("H" & X).Value = "0" 'В столбце "H" ставим значение "0" 'Снимаем свойство защищаемая ячейка и убрать заливку со столбцов "C", "D", "J" With Range("C" & X & ", D" & X & ", J" & X) .Locked = False .FormulaHidden = False .Interior.Pattern = xlNone .Interior.TintAndShade = 0 .Interior.PatternTintAndShade = 0 End With End If 'Иначе переходим к следующей строке Next X
End Sub
Sub Макрос2() ' ' Защита добавленных клиентов ' Dim X As Long 'Переменная для перебора Dim Y As Long 'Переменная определяющая последнюю строку Y = Cells(Rows.Count, 1).End(xlUp).Row 'Определяем последнюю строку
'Начинаем цикл For X = 2 To Y Step 1 'Если значение третьего столбца отличается от "я" и не пустое If Cells(x, 3) <> "" And Cells(x, 3) <> "я" Then 'То cтавим свойство защищаемая ячейка и делаем заливку ячеек "C", "D", "J" With Range("C" & X & ", D" & X & ", J" & X) .Locked = True .FormulaHidden = True .Interior.Pattern = xlSolid .Interior.PatternColorIndex = xlAutomatic .Interior.ThemeColor = xlThemeColorDark1 .Interior.TintAndShade = -0.149998474074526 .Interior.PatternTintAndShade = 0 End With End If 'Иначе переходим к следующей строке Next X
End Sub
[/vba]
Ну вроде всё получилось. Всем огромное спасибо за помощь.
[vba]
Код
' ' Удаляем клиентов помеченных на удаление ' Dim X As Long 'Переменная для перебора Dim Y As Long 'Переменная определяющая последнюю строку Y = Cells(Rows.Count, 1).End(xlUp).Row 'Определяем последнюю строку
'Начинаем цикл For X = 2 To Y Step 1 'Если значение второго столбца "УДАЛИТЬ" If Cells(X, 2) = "УДАЛИТЬ" Then 'То Range("B" & X & ", D" & X & ", E" & X & ", F" & X & ", I" & X & ", J" & X).Value = "" 'Очищаем столбцы "B", "D", "E", "F", "I", "J" Range("C" & X).Value = "я" 'В столбце "C" ставим значение "я" Range("G" & X).Value = "-" 'В столбце "G" ставим значение "-" Range("H" & X).Value = "0" 'В столбце "H" ставим значение "0" 'Снимаем свойство защищаемая ячейка и убрать заливку со столбцов "C", "D", "J" With Range("C" & X & ", D" & X & ", J" & X) .Locked = False .FormulaHidden = False .Interior.Pattern = xlNone .Interior.TintAndShade = 0 .Interior.PatternTintAndShade = 0 End With End If 'Иначе переходим к следующей строке Next X
End Sub
Sub Макрос2() ' ' Защита добавленных клиентов ' Dim X As Long 'Переменная для перебора Dim Y As Long 'Переменная определяющая последнюю строку Y = Cells(Rows.Count, 1).End(xlUp).Row 'Определяем последнюю строку
'Начинаем цикл For X = 2 To Y Step 1 'Если значение третьего столбца отличается от "я" и не пустое If Cells(x, 3) <> "" And Cells(x, 3) <> "я" Then 'То cтавим свойство защищаемая ячейка и делаем заливку ячеек "C", "D", "J" With Range("C" & X & ", D" & X & ", J" & X) .Locked = True .FormulaHidden = True .Interior.Pattern = xlSolid .Interior.PatternColorIndex = xlAutomatic .Interior.ThemeColor = xlThemeColorDark1 .Interior.TintAndShade = -0.149998474074526 .Interior.PatternTintAndShade = 0 End With End If 'Иначе переходим к следующей строке Next X