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

Вход

Регистрация

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

 

= Мир MS Excel/проверка условия и копирование на новый лист - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » проверка условия и копирование на новый лист (Макросы/Sub)
проверка условия и копирование на новый лист
SkyLine6299 Дата: Четверг, 30.06.2022, 16:22 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Добрый день.
У меня очень мало опыта в написании макросов, но надо автоматизировать часть ручной работы.
Суть задачи: проверка условия в определенной ячейки и если условие соблюдается, то копирование целой строки на новый лист.
В файле в столбце I указаны числа, условие такое что, если значение в ячейке больше чем 230000000000, то на новый лист целая строка должна скопироваться, и так по всему файлу. Коллеги, пожалуйста помогите решить данную задачу. Ибо без помощи к сожалению не справляюсь.

Уважаемая администрация, заранее прошу прощения, я не совсем разобрался как проставить корректные хештеги к своей теме.

спасибо
К сообщению приложен файл: 6086074.xlsm(10.2 Kb)
 
Ответить
СообщениеДобрый день.
У меня очень мало опыта в написании макросов, но надо автоматизировать часть ручной работы.
Суть задачи: проверка условия в определенной ячейки и если условие соблюдается, то копирование целой строки на новый лист.
В файле в столбце I указаны числа, условие такое что, если значение в ячейке больше чем 230000000000, то на новый лист целая строка должна скопироваться, и так по всему файлу. Коллеги, пожалуйста помогите решить данную задачу. Ибо без помощи к сожалению не справляюсь.

Уважаемая администрация, заранее прошу прощения, я не совсем разобрался как проставить корректные хештеги к своей теме.

спасибо

Автор - SkyLine6299
Дата добавления - 30.06.2022 в 16:22
Nic70y Дата: Четверг, 30.06.2022, 16:50 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 7666
Репутация: 1833 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Sub u_912()
    Application.ScreenUpdating = False
    u = Cells(Rows.Count, "i").End(xlUp).Row
    For Each c In Range("i1:i" & u)
        If c > Range("l1").Value Then
            v = Sheets("Ëèñò1").Cells(Rows.Count, "a").End(xlUp).Row + 1
            Range("a" & c.Row & ":j" & c.Row).Copy Sheets("Ëèñò1").Range("a" & v)
        End If
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: 3355815.xlsm(21.2 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщение[vba]
Код
Sub u_912()
    Application.ScreenUpdating = False
    u = Cells(Rows.Count, "i").End(xlUp).Row
    For Each c In Range("i1:i" & u)
        If c > Range("l1").Value Then
            v = Sheets("Ëèñò1").Cells(Rows.Count, "a").End(xlUp).Row + 1
            Range("a" & c.Row & ":j" & c.Row).Copy Sheets("Ëèñò1").Range("a" & v)
        End If
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 30.06.2022 в 16:50
jun Дата: Понедельник, 04.07.2022, 10:41 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 18 ±
Замечаний: 0% ±

SkyLine6299, добрый день!
Вариант на массивах:
[vba]
Код
Sub Copy_()
Dim arr, i, j, lr
    arr = Worksheets("тест").UsedRange ' имя тест заменить на имя листа с исходными данными
With Worksheets("Res") ' имя Res заменить на имя листа с результатами
    lr = .Cells(Rows.Count, 1).End(xlUp).Row
    For i = LBound(arr, 1) To UBound(arr, 1)
        If arr(i, 9) > 230000000000# Then
            For j = LBound(arr, 2) To UBound(arr, 2)
                .Cells(lr, j) = arr(i, j)
            Next j
            lr = lr + 1
        End If
    Next i
End With
End Sub
[/vba]
К сообщению приложен файл: 7583791.xlsm(17.6 Kb)
 
Ответить
СообщениеSkyLine6299, добрый день!
Вариант на массивах:
[vba]
Код
Sub Copy_()
Dim arr, i, j, lr
    arr = Worksheets("тест").UsedRange ' имя тест заменить на имя листа с исходными данными
With Worksheets("Res") ' имя Res заменить на имя листа с результатами
    lr = .Cells(Rows.Count, 1).End(xlUp).Row
    For i = LBound(arr, 1) To UBound(arr, 1)
        If arr(i, 9) > 230000000000# Then
            For j = LBound(arr, 2) To UBound(arr, 2)
                .Cells(lr, j) = arr(i, j)
            Next j
            lr = lr + 1
        End If
    Next i
End With
End Sub
[/vba]

Автор - jun
Дата добавления - 04.07.2022 в 10:41
SkyLine6299 Дата: Понедельник, 04.07.2022, 14:06 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

большое спасибо, вариант с массивами самый идеальный. Но возможно ли не указывать лист с исходными данными в ручную? название листа = название файла exel и каждый день формируется новый файл с новым именем. Как можно это изменить в коде макроса?
Вот я попробовал чуть доработать код:
[vba]
Код
Dim sName$, arr, i, j, lr
[/vba]добавляю новую переменную[vba]
Код
sName$
[/vba]
[vba]
Код
sName = ActiveWorkbook.ActiveSheet.Name
[/vba] присваиваю ей значение
[vba]
Код
arr = Worksheets("sName").UsedRange
[/vba] а вот как одной переменной задать значение другой переменной, не совсем понимаю


Сообщение отредактировал Serge_007 - Понедельник, 04.07.2022, 15:25
 
Ответить
Сообщениебольшое спасибо, вариант с массивами самый идеальный. Но возможно ли не указывать лист с исходными данными в ручную? название листа = название файла exel и каждый день формируется новый файл с новым именем. Как можно это изменить в коде макроса?
Вот я попробовал чуть доработать код:
[vba]
Код
Dim sName$, arr, i, j, lr
[/vba]добавляю новую переменную[vba]
Код
sName$
[/vba]
[vba]
Код
sName = ActiveWorkbook.ActiveSheet.Name
[/vba] присваиваю ей значение
[vba]
Код
arr = Worksheets("sName").UsedRange
[/vba] а вот как одной переменной задать значение другой переменной, не совсем понимаю

Автор - SkyLine6299
Дата добавления - 04.07.2022 в 14:06
jun Дата: Понедельник, 04.07.2022, 15:33 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 18 ±
Замечаний: 0% ±

Можете просто запускать на активном листе (лист Res автоматически создается)
[vba]
Код
Sub Copy_()
Dim arr, i, j, lr
Dim sh
    arr = ActiveSheet.UsedRange
    If Not WorksheetExists("Res") Then ' имя Res заменить на имя листа с результатами
        Set sh = Worksheets.Add(After:=ActiveSheet)
        sh.Name = "Res"
    End If
With Worksheets("Res") ' имя Res заменить на имя листа с результатами
    lr = .Cells(Rows.Count, 1).End(xlUp).Row
    .Cells.Clear
    For i = LBound(arr, 1) To UBound(arr, 1)
        If arr(i, 9) > 230000000000# Then
            For j = LBound(arr, 2) To UBound(arr, 2)
                .Cells(lr, j) = arr(i, j)
            Next j
            lr = lr + 1
        End If
    Next i
End With
End Sub
'https://stackoverflow.com/questions/6688131/test-or-check-if-sheet-exists
Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
[/vba]
К сообщению приложен файл: 2224586.xlsm(18.3 Kb)
 
Ответить
СообщениеМожете просто запускать на активном листе (лист Res автоматически создается)
[vba]
Код
Sub Copy_()
Dim arr, i, j, lr
Dim sh
    arr = ActiveSheet.UsedRange
    If Not WorksheetExists("Res") Then ' имя Res заменить на имя листа с результатами
        Set sh = Worksheets.Add(After:=ActiveSheet)
        sh.Name = "Res"
    End If
With Worksheets("Res") ' имя Res заменить на имя листа с результатами
    lr = .Cells(Rows.Count, 1).End(xlUp).Row
    .Cells.Clear
    For i = LBound(arr, 1) To UBound(arr, 1)
        If arr(i, 9) > 230000000000# Then
            For j = LBound(arr, 2) To UBound(arr, 2)
                .Cells(lr, j) = arr(i, j)
            Next j
            lr = lr + 1
        End If
    Next i
End With
End Sub
'https://stackoverflow.com/questions/6688131/test-or-check-if-sheet-exists
Function WorksheetExists(shtName As String, Optional wb As Workbook) As Boolean
    Dim sht As Worksheet

    If wb Is Nothing Then Set wb = ThisWorkbook
    On Error Resume Next
    Set sht = wb.Sheets(shtName)
    On Error GoTo 0
    WorksheetExists = Not sht Is Nothing
End Function
[/vba]

Автор - jun
Дата добавления - 04.07.2022 в 15:33
jun Дата: Понедельник, 04.07.2022, 15:34 | Сообщение № 6
Группа: Пользователи
Ранг: Участник
Сообщений: 82
Репутация: 18 ±
Замечаний: 0% ±

а вот как одной переменной задать значение другой переменной, не совсем понимаю

Просто убрать кавычки в строке:
[vba]
Код
arr = Worksheets("sName").UsedRange
[/vba]
:)
 
Ответить
Сообщение
а вот как одной переменной задать значение другой переменной, не совсем понимаю

Просто убрать кавычки в строке:
[vba]
Код
arr = Worksheets("sName").UsedRange
[/vba]
:)

Автор - jun
Дата добавления - 04.07.2022 в 15:34
Мир MS Excel » Вопросы и решения » Вопросы по VBA » проверка условия и копирование на новый лист (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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