Добрый день! В файле "Пример" 6 Листов: первые 5 из них содержат данные, в последнем - результат. В Листах А1-А5 содержатся данные в Столбе Е, начиная с 6-ой строки, которые мне необходимо перенести в Лист "Результат". Я создала упрощенный вариант своей задачи, в качестве примера, сохранив структуру и суть, где Листов с данными всего 5, на самом деле их больше 50. Поэтому я воспользовалась функцией СМЕЩ для перенесения данных с Листа А1 в ,Столб "Данные" в Листе "Результат". Далее я планировала создать условие при помощи функции ЕСЛИ, для того чтобы в случае, когда все возможные данные с одного Листа были перенесены, то при протягивании формулы в ячейке без ссылки стоит 0. Из этого вытекает условие
Код
ЕСЛИ(A2=0;СМЕЩ(А2!#ССЫЛКА!;1;0);A2)
и т.д. Т.е. если выражение равно 0 - истина, то мы переходим на следующий лист и проделываем те же самые операции. Как будет выглядеть Формула, которая позволит прописать "шаг" для перехода на последующие листы? Имеется в виду можно ли использовать "глобальную переменную" для несколько листов? P.S. напоминаю, что таких листов в реале больше 50
Добрый день! В файле "Пример" 6 Листов: первые 5 из них содержат данные, в последнем - результат. В Листах А1-А5 содержатся данные в Столбе Е, начиная с 6-ой строки, которые мне необходимо перенести в Лист "Результат". Я создала упрощенный вариант своей задачи, в качестве примера, сохранив структуру и суть, где Листов с данными всего 5, на самом деле их больше 50. Поэтому я воспользовалась функцией СМЕЩ для перенесения данных с Листа А1 в ,Столб "Данные" в Листе "Результат". Далее я планировала создать условие при помощи функции ЕСЛИ, для того чтобы в случае, когда все возможные данные с одного Листа были перенесены, то при протягивании формулы в ячейке без ссылки стоит 0. Из этого вытекает условие
Код
ЕСЛИ(A2=0;СМЕЩ(А2!#ССЫЛКА!;1;0);A2)
и т.д. Т.е. если выражение равно 0 - истина, то мы переходим на следующий лист и проделываем те же самые операции. Как будет выглядеть Формула, которая позволит прописать "шаг" для перехода на последующие листы? Имеется в виду можно ли использовать "глобальную переменную" для несколько листов? P.S. напоминаю, что таких листов в реале больше 50Шифр-шмыфр
_Boroda_, Сейчас всё исправлю. Извините, я новичок Создала новую, потому что подумала, что та тема безнадежна Если бы знала, как её удалить, удалила бы
_Boroda_, Сейчас всё исправлю. Извините, я новичок Создала новую, потому что подумала, что та тема безнадежна Если бы знала, как её удалить, удалила быШифр-шмыфр
bmv98rus, да что не так? Я уже второе сообщение написала, а мне все отказываются помочь... Какой ещё Михаил? Я не Михаил. Короче эту тему тоже можно удалять и больше не суваться сюда с вопросами????
bmv98rus, да что не так? Я уже второе сообщение написала, а мне все отказываются помочь... Какой ещё Михаил? Я не Михаил. Короче эту тему тоже можно удалять и больше не суваться сюда с вопросами????Шифр-шмыфр
Оформите формулу тегами (в режиме правки поста выделите формулу и нажмите кнопку fx, пояснялка здесь)
? Есть Ваш первый пост, в нем есть формула, ее нужно оформить тегами, методика оформления приведена в самой фразе и подробнее в ссылке
Михаил - это не Вы, это bmv98rus
Если Вы посмотрите другие вопросы, то увидите, что ответы появляются очень быстро. Но только в том случае, если автор вопроса задал его без нарушений Правил форума. Ничего страшного, у многих поначалу возникают вопросы, подобные Вашим, это нормально, очень скоро привыкнете
Оформите формулу тегами (в режиме правки поста выделите формулу и нажмите кнопку fx, пояснялка здесь)
? Есть Ваш первый пост, в нем есть формула, ее нужно оформить тегами, методика оформления приведена в самой фразе и подробнее в ссылке
Михаил - это не Вы, это bmv98rus
Если Вы посмотрите другие вопросы, то увидите, что ответы появляются очень быстро. Но только в том случае, если автор вопроса задал его без нарушений Правил форума. Ничего страшного, у многих поначалу возникают вопросы, подобные Вашим, это нормально, очень скоро привыкнете_Boroda_
Все это гораздо проще сделать макросом или пользовательской функцией. Нужно именно формулой? Формулой тоже можно, но она получится довольно сложной. Кстати, в реальном файле листы у Вас так и называются "А1", "А2, ...? Или названия произвольны?
Все это гораздо проще сделать макросом или пользовательской функцией. Нужно именно формулой? Формулой тоже можно, но она получится довольно сложной. Кстати, в реальном файле листы у Вас так и называются "А1", "А2, ...? Или названия произвольны?_Boroda_
Вариант 1- сложный и массивный Вариант 2- с доп. столбцами которые можно вынести на отдельный лист или скрыть и элементарный Оба летучие и рассчитаны на то, что листы в названии имею отличие только в индексе.
Файл в сообщении ниже
Вариант 1- сложный и массивный Вариант 2- с доп. столбцами которые можно вынести на отдельный лист или скрыть и элементарный Оба летучие и рассчитаны на то, что листы в названии имею отличие только в индексе.
потому что макросами я пользоваться, к сожалению, пока не умею
ох, ну раз уж написал, то выложу
[vba]
Код
Sub sss() Dim IR1& Dim sh As Worksheet Dim II& Dim IR& Application.ScreenUpdating = False Application.CutCopyMode = False Application.DisplayAlerts = False IR1 = Sheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row If IR1 = 1 Then IR1 = 2 Else IR1 = Sheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row End If Sheets("Результат").Range("A2" & ":A" & IR1).ClearContents For Each sh In ThisWorkbook.Sheets IR = Sheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row If sh.Name <> "Результат" Then II = Sheets(sh.Name).Cells(6, 5).End(xlDown).Row Sheets(sh.Name).Activate Sheets(sh.Name).Range(Cells(6, 5), Cells(II, 5)).Copy Sheets("Результат").Activate Sheets("Результат").Range("A" & IR + 1).PasteSpecial Paste:=xlPasteValues End If Next sh Application.ScreenUpdating = True Application.CutCopyMode = True Application.DisplayAlerts = True End Sub
[/vba]
[p.s.]критика от знатоков приветствуется и поощряется
потому что макросами я пользоваться, к сожалению, пока не умею
ох, ну раз уж написал, то выложу
[vba]
Код
Sub sss() Dim IR1& Dim sh As Worksheet Dim II& Dim IR& Application.ScreenUpdating = False Application.CutCopyMode = False Application.DisplayAlerts = False IR1 = Sheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row If IR1 = 1 Then IR1 = 2 Else IR1 = Sheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row End If Sheets("Результат").Range("A2" & ":A" & IR1).ClearContents For Each sh In ThisWorkbook.Sheets IR = Sheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row If sh.Name <> "Результат" Then II = Sheets(sh.Name).Cells(6, 5).End(xlDown).Row Sheets(sh.Name).Activate Sheets(sh.Name).Range(Cells(6, 5), Cells(II, 5)).Copy Sheets("Результат").Activate Sheets("Результат").Range("A" & IR + 1).PasteSpecial Paste:=xlPasteValues End If Next sh Application.ScreenUpdating = True Application.CutCopyMode = True Application.DisplayAlerts = True End Sub
[/vba]
[p.s.]критика от знатоков приветствуется и поощряетсякитин
Лови По идее все нужно сначала сложить в массив, а потом выложить на лист. Но если не менять логику твоего макроса, то такие комментарии [vba]
Код
Sub sss() Dim IR1& Dim sh As Worksheet Dim II& Dim IR& Application.ScreenUpdating = False ' Application.CutCopyMode = False 'зачем? ' Application.DisplayAlerts = False 'зачем? With Sheets("Результат") 'один раз обращаемся IR1 = .Cells(Rows.Count, 1).End(xlUp).Row If IR1 = 1 Then IR1 = 2 ' Else ' IR1 = Sheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row 'зачем? End If .Range("A2" & ":A" & IR1).ClearContents For Each sh In ThisWorkbook.Sheets IR = .Cells(Rows.Count, 1).End(xlUp).Row If sh.Name <> .Name Then 'имя луюше кодом II = sh.Cells(6, 5).End(xlDown).Row 'Sheets(sh.Name) - это sh ' Sheets(sh.Name).Activate 'зачем? sh.Cells(6, 5).Resize(II - 6 + 1).Copy ' .Activate .Range("A" & IR + 1).PasteSpecial Paste:=xlPasteValues End If Next sh End With Application.CutCopyMode = False 'один раз в конце нужно Application.ScreenUpdating = True ' Application.CutCopyMode = True ' Application.DisplayAlerts = True End Sub
Лови По идее все нужно сначала сложить в массив, а потом выложить на лист. Но если не менять логику твоего макроса, то такие комментарии [vba]
Код
Sub sss() Dim IR1& Dim sh As Worksheet Dim II& Dim IR& Application.ScreenUpdating = False ' Application.CutCopyMode = False 'зачем? ' Application.DisplayAlerts = False 'зачем? With Sheets("Результат") 'один раз обращаемся IR1 = .Cells(Rows.Count, 1).End(xlUp).Row If IR1 = 1 Then IR1 = 2 ' Else ' IR1 = Sheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row 'зачем? End If .Range("A2" & ":A" & IR1).ClearContents For Each sh In ThisWorkbook.Sheets IR = .Cells(Rows.Count, 1).End(xlUp).Row If sh.Name <> .Name Then 'имя луюше кодом II = sh.Cells(6, 5).End(xlDown).Row 'Sheets(sh.Name) - это sh ' Sheets(sh.Name).Activate 'зачем? sh.Cells(6, 5).Resize(II - 6 + 1).Copy ' .Activate .Range("A" & IR + 1).PasteSpecial Paste:=xlPasteValues End If Next sh End With Application.CutCopyMode = False 'один раз в конце нужно Application.ScreenUpdating = True ' Application.CutCopyMode = True ' Application.DisplayAlerts = True End Sub
Sub sss() Dim sh As Worksheet Dim II& Dim IR& Application.ScreenUpdating = False With Sheets("Результат") .Range(.Cells(1, 1), .Columns(1).SpecialCells(xlCellTypeLastCell)).Offset(1).ClearContents End With For Each sh In ThisWorkbook.Sheets With sh If .Name <> "Результат" Then II = .Cells(6, 5).End(xlDown).Row IR = Sheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row Sheets("Результат").Range("A" & IR + 1).Resize(Range(Cells(6, 5), Cells(II, 5)).Rows.Count).Value = _ .Range(sh.Cells(6, 5), .Cells(II, 5)).Value End If End With Next Application.ScreenUpdating = False End Sub
[/vba]
китин, Меньше дергатни
[vba]
Код
Sub sss() Dim sh As Worksheet Dim II& Dim IR& Application.ScreenUpdating = False With Sheets("Результат") .Range(.Cells(1, 1), .Columns(1).SpecialCells(xlCellTypeLastCell)).Offset(1).ClearContents End With For Each sh In ThisWorkbook.Sheets With sh If .Name <> "Результат" Then II = .Cells(6, 5).End(xlDown).Row IR = Sheets("Результат").Cells(Rows.Count, 1).End(xlUp).Row Sheets("Результат").Range("A" & IR + 1).Resize(Range(Cells(6, 5), Cells(II, 5)).Rows.Count).Value = _ .Range(sh.Cells(6, 5), .Cells(II, 5)).Value End If End With Next Application.ScreenUpdating = False End Sub
Ничего здесь не напрягает? К чему относятся Range и два Cells? Что больше нравится - точка или sh? Дергатни-то может и меньше (хотя если убрать Activate, то ненамного), зато строка получилась такая прям понятная-понятная
Ничего здесь не напрягает? К чему относятся Range и два Cells? Что больше нравится - точка или sh? Дергатни-то может и меньше (хотя если убрать Activate, то ненамного), зато строка получилась такая прям понятная-понятная _Boroda_
не напрягает совсем, так как неважно на каком листе считать строки из указанного диапазона. Не к данным обращаемся, даже если другая книга будет активна , то все равно вернет число строк. хотя в данном случае просто можно было из II вычесть 6 и прибавить 1 то есть вычесть 5.
не напрягает совсем, так как неважно на каком листе считать строки из указанного диапазона. Не к данным обращаемся, даже если другая книга будет активна , то все равно вернет число строк. хотя в данном случае просто можно было из II вычесть 6 и прибавить 1 то есть вычесть 5.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Вторник, 26.03.2019, 13:31