Поиск последнего столбца и копирование - VBA

Узнай цену своей работы

Формулировка задачи:

Всем добрый день. Ребята подскажите пожалуйста, как найти столбец с именем "Столбец 25", в столбце найти строки с значением "Номер один" и все это , вместе со строками и шапкой скопировать на новый лист.

Решение задачи: «Поиск последнего столбца и копирование»

textual
Листинг программы
Option Explicit
 
Private Sub disAccelerateExcel() 'Включаем всё то что выключили процедурой AccelerateExcel
    On Error Resume Next
    With Application
        .ScreenUpdating = True 'Включаем обновление экрана после каждого события
        .Calculation = xlCalculationAutomatic 'Расчёты формул - снова в автоматическом режиме
        .EnableEvents = True 'Включаем события
        If Workbooks.Count Then _
            ActiveWorkbook.ActiveSheet.DisplayPageBreaks = True 'Показываем границы ячеек
        .DisplayStatusBar = True 'Возвращаем статусную строку
        .DisplayAlerts = True 'Разрешаем сообшения Excel
    End With
End Sub
 
 Private Sub AccelerateExcel() 'Ускоряем Excel путём отключения всего "тормозящего"
    On Error Resume Next
    With Application
        .ScreenUpdating = False 'Больше не обновляем страницы после каждого действия
        .Calculation = xlCalculationManual 'Расчёты переводим в ручной режим
        .EnableEvents = False 'Отключаем события
        If Workbooks.Count Then _
            ActiveWorkbook.ActiveSheet.DisplayPageBreaks = False 'Не отображаем границы ячеек
        .DisplayStatusBar = False 'Отключаем статусную строку
        .DisplayAlerts = False 'Отключаем сообщения Excel
    End With
 End Sub
 
Sub Найти_number_one()
    Dim r As Range, i&, j&, maxRow&, maxColumn&
    Dim n&
    '
    AccelerateExcel 'Ускоряем работу Excel !
    '
    maxColumn = ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count - 1
    maxRow = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
    Set r = Range(Cells(1, 1), Cells(maxRow, maxColumn))
    With Worksheets.Add
        For i = 1 To maxRow: For j = 1 To maxColumn
            If r.Cells(i, j) = "номер один" Or i = 1 Then
                n = n + 1
                r.Range(r.Cells(i, 1), r.Cells(i, maxColumn)).Copy
                .Cells(n, 1).Select
                ActiveSheet.Paste
                Exit For
            End If
        Next: Next
        For i = 1 To maxRow
            .Cells(i, 1).RowHeight = r.Cells(i, 1).RowHeight
        Next
        For j = 1 To maxColumn
            .Cells(1, j).ColumnWidth = r.Cells(1, j).ColumnWidth
        Next
    End With
    '
    disAccelerateExcel 'Восстанавливаем Excel !
    '
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы