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

 

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

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
проверка условия и копирование на новый лист
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
Группа: Друзья
Ранг: Экселист
Сообщений: 9133
Репутация: 2416 ±
Замечаний: 0% ±

Excel 2010

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

К сообщению приложен файл: 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 = ТrueEnd Sub
[/vba]

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

SkyLine6299, добрый день!
Вариант на массивах:

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

К сообщению приложен файл: 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) > 230000000000Then For            j arr = LBound(To, 2) arr UBound(lr, 2)                .Cells(j, i) = arr(j, Next)            j lr            lr = End + 1        If Next    iEnd WithEnd Sub undefined
[/vba]

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

большое спасибо, вариант с массивами самый идеальный. Но возможно ли не указывать лист с исходными данными в ручную? название листа = название файла exel и каждый день формируется новый файл с новым именем. Как можно это изменить в коде макроса?
Вот я попробовал чуть доработать код:

Dim sName$, arr, i, j, lr

добавляю новую переменную

sName$


sName = ActiveWorkbook.ActiveSheet.Name

присваиваю ей значение

arr = Worksheets("sName").UsedRange

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


Сообщение отредактировал 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("sЧame").UsedRange
[/vba] а вот как одной переменной задать значение другой переменной, не совсем понимаю

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

Можете просто запускать на активном листе (лист Res автоматически создается)

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

К сообщению приложен файл: 2224586.xlsm (18.3 Kb)
 
Ответить
СообщениеМожете просто запускать на активном листе (лист Res автоматически создается)
[vba]
Sub Copy_()Dim arr, i, j, lrDim sh    arr = ActiveSheet.UsedRange    If Not WorksheetExists("Res") Then ' имя Res заменить на имя листа с результатами        Set sh = Worksheets.Add(After:=ActiveSheet)        sh.Name = "Res"    End IfWith 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) > 230000000000Then For            j arr = LBound(To, 2) arr UBound(lr, 2)                .Cells(j, i) = arr(j, Next)            j lr            lr = End + 1        If Next    iEnd WithEnd Sub https'stackoverflow.com://questions/test/6688131/or-check-if-sheet-existsFunction-shtName WorksheetExists(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 shtName = wb.Sheets(On)    Error GoTo WorksheetExists 0    Not = sht Is NothingEnd Function undefined
[/vba]

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

Цитата SkyLine6299, 04.07.2022 в 14:06, в сообщении № 4 ( писал(а)):
а вот как одной переменной задать значение другой переменной, не совсем понимаю

Просто убрать кавычки в строке:

arr = Worksheets("sName").UsedRange


:)
 
Ответить
Сообщение
Цитата SkyLine6299, 04.07.2022 в 14:06, в сообщении № 4 ( писал(а)):
а вот как одной переменной задать значение другой переменной, не совсем понимаю

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

Автор - jun
Дата добавления - 04.07.2022 в 15:34
  • Страница 1 из 1
  • 1
Поиск:

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