макрос, который копирует данные до первой пустой строки и вставляет в указ место

Автор GoodPaul, 02.10.2014, 21:00

« назад - далее »

GoodPaul

Задача следующая: есть данные, которые отделены друг от друга пустой строкой. Данных много и пустые строки всегда в разных местах. Нужен макрос, который бы скопировал из столбца F данные от строки 51 до первой пустой ячейки и вставил эти данные в тот же столбец F, но выше, в ячейку F5. В прикладываемом примере таких столбцов с данными два F и H. Для H все тоже самое, что и для F.
Вторая задача заключается в создании макроса, который выделит НАИБОЛЬШИЙ диапазон из имеющихся в столбце F и вставит в F5 (в примере такой диапазон будет для столбца F - F115:F152, для столбца H - H70:H100, нужно, чтобы макрос сам их нашел,скопировал,вставил).

iron priest

можно и без макроса. выделяете столбцы. f5 выделить - пустые ячейки - контрл+минус - со сдвигов вверх

GoodPaul

Вы не правильно поняли, что нужно сделать. Первая задача именно в копировании диапазона ячеек до первой пустой строки, т.е. для столбца F макрос должен самостоятельно найти диапазон F51:F66 и вставить в ячейку F5. Пример содержит только 2 столбца, на деле их может быть и 300, ручное выделение ни в коем случае не подходит

cheshiki1

макрос для активного столбца, т.е. становитесь в любой ячейке столбца F и запускаете макрос, потом становитесь в столбец Н и снова запускаете макрос.Sub vvv()
Application.ScreenUpdating = False
Dim i&, n1&, n2&, i1&, i2&, Col&
Col = ActiveCell.Column
For i = 51 To Cells(Rows.Count, Col).End(xlUp).Row + 1
  If Cells(i, Col) <> "" Then
  n1 = n1 + 1
      If n1 = 1 Then i1 = i
  Else
   If n2 < n1 Then
   n2 = n1: i2 = i1: n1 = 0
   Else
   n1 = 0
   End If
  End If
Next
Range(Cells(i2, Col), Cells(i2 + n2 - 1, Col)).Copy
Cells(5, Col).PasteSpecial
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub

GoodPaul

Спасибо БОЛЬШОЕ! :) То что нужно. Один вопрос, как можно назначить столбец, чтобы не становиться на него курсором? К примеру столбец F будет всегда обсчитываться этим макросом. Изменить надо эту строчку Col = ActiveCell.Column на Col = F или как-то так?

cheshiki1

Цитата: GoodPaul от 03.10.2014, 10:57
Спасибо БОЛЬШОЕ! :) Изменить надо эту строчку Col = ActiveCell.Column на Col = F или как-то так?
почти, Col = 6 т.к. выше переменная объявлена как число (Col&)

GoodPaul


GoodPaul


zs

Цитата: iron priest от 02.10.2014, 22:30
можно и без макроса.
формула массива
=A2:ИНДЕКС(A2:A9;МИН(ЕСЛИ(A2:A9=0;СТРОКА(A2:A9)-1)))+B2:B8
С уважением, ZS5