Страницы: 1
RSS
Удаление данных из ячеек по условию с помощью VBA
 
Добрый день!

Появилась следующая проблема. К сожалению, собственных навыков не хватает для ее решения.

Есть два условия и одна строка.
Первое условие задает с какого столбца начинается заполнение строки. Второе - до какого столбца она заполняется.
Например, если в строке 100 столбцов, условие1 =10, условие2 =3, то должны остаться заполненными только столбцы с 4 по 10, с 14 по 20, с 24 по 30 и тд.
Из столбцов 1-3, 11-13, 21-23 и т.д требуется удалить данные.

Условие 1 может быть в диапазоне от 1 до 100.
Условие 2 - от 1 до 10.
При изменении этих условий хотелось, чтобы автоматически удалялись данные из нужных ячеек.

Подскажите, возможно ли решение данное задачи с помощью макроса?

Пример в Ecxel прикладываю.

Буду очень сильна благодарна за помощь :)
Изменено: Jullyyyl - 08.08.2022 17:55:35
 
Макрос для одной строки
Код
Sub Макрос2()
n = Range("B2")
m = Range("B3")
i = 1
For Each c In Range(Cells(5, 2), Cells(5, Cells(5, Columns.Count).End(xlToLeft).Column))
    If i > n Then i = 1
    If i <= m Then c.Offset(1, 0) = ""
    i = i + 1
Next
End Sub
Изменено: Msi2102 - 08.08.2022 18:43:44
 
Цитата
решение данное задачи с помощью макроса
Удаляет столбцы с ненужными данными
Код
Sub DelDann()
Dim iLastCol As Integer
Dim j As Long
  iLastCol = Cells(5, Columns.Count).End(xlToLeft).Column
   For j = iLastCol To 2 Step -1
     If Cells(5, j).Value Mod Range("B2") > 0 And Cells(5, j).Value Mod Range("B2") <= Range("B3") Then
       Columns(j).Delete
     End If
   Next
End Sub
 
Макрос для всех строк, 5-я строка заголовок
Код
Sub Макрос3()
Dim rng As Range, с As Range, n As Byte, m As Byte, cc As Integer, rr As Integer, i As Integer
n = Range("B2")
m = Range("B3")
cc = Cells(5, Columns.Count).End(xlToLeft).Column
rr = Cells(Rows.Count, 1).End(xlUp).Row - 5
i = 1
For Each c In Range(Cells(5, 2), Cells(5, cc))
    If i > n Then i = 1
    If i <= m Then If rng Is Nothing Then Set rng = Range(c.Offset(1, 0), c.Offset(rr, 0)) Else Set rng = Union(rng, Range(c.Offset(1, 0), c.Offset(rr, 0)))
    i = i + 1
Next
If Not rng Is Nothing Then rng.ClearContents
End Sub
Изменено: Msi2102 - 08.08.2022 19:03:12
 
Kuzmich, Спасибо!
 
Msi2102, Спасибо огромное!

Добавила макрос в файл Модель.xlsm (34.26 КБ). Осталась одна проблема - он работает только до столбца V.
Прикрепила файл.

Подскажите, что нужно поправить?
 
Цитата
Подскажите, что нужно поправить?
А так
Код
For Each c In Range(Cells(14, 2), Cells(14, Cells(14, Columns.Count).End(xlToLeft).Column))
 
Kuzmich, нет( так совсем не хочет работать
 
Так еще
Код
If i <= m Then c.Offset(2, 0) = ""
 
Kuzmich, тоже нет
 
Код
Sub Макрос1()
n = Range("c6")
m = Range("c7")
i = 1
For Each c In Range(Cells(14, 2), Cells(14, Cells(14, Columns.Count).End(xlToLeft).Column))
    If i > n Then i = 1
    If i <= m Then c.Offset(2, 0) = ""
    i = i + 1
Next
End Sub
 
Kuzmich, Получилось! Спасибо!))
 
Цитата
Jullyyyl написал:
он работает только до столбца V.
сейчас нет компьютера под рукой, скорее всего нужно заполнить 5 строку более чем до столбца V. По пятой строке определяется общее количество столбцов
 
С моим макросом
Код
Sub iClearDann()
Dim iLastCol As Integer
Dim j As Long
  iLastCol = Cells(14, Columns.Count).End(xlToLeft).Column
   For j = iLastCol To 2 Step -1
     If Cells(14, j).Value Mod Range("C6") > 0 And Cells(14, j).Value Mod Range("C6") <= Range("C7") Then
       Cells(16, j).ClearContents
     End If
   Next
End Sub
Изменено: Kuzmich - 08.08.2022 22:30:56
Страницы: 1
Наверх