Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Формула с шагом через INDIRECT со ссылкой на другой лист
 
Всем привет!

Нужно растянуть формулу с шагом в 4 строки, и по этой формуле, к примеру все ок: =INDIRECT("D"&31+(ROW()-31)*4) - то есть в итоге при растяжке я получаю каждое пятое значение в столбце D, начиная с D31.
Проблема в том, что мне нужно сослаться на столбец D в другом листе, и я какие бы комбинации ни пробовала (к примеру, =INDIRECT("'Sheet1'!D"&31+(ROW()-31)*4)  , все выдает #REF.

Как правильно прописать такую формулу, куда вставлять имя листа?
Объединение таблиц из разных файлов Excel на один лист
 
Здравствуйте!

Передо мной на данный момент стоит такая задача: из нескольких книг excel мне нужно собрать данные таблиц в одну таблицу. У всех таблиц одинаковые столбцы, но разное количество заполненных строк (от 2 до 15).

Нашла в интренете похожий на нужный код и подогнала его под свою задачу.
С этим кодом у меня только две проблемы (с моим уровнем в VBA я не смогла решить, все только сбиватся и становится хуже):
1) Никак не могу настроить так, чтобы он останавливался на последней заполненной строке в выгружаемой таблице. На данный момент остановилась на решении копировать все 15 строчек, но это выглядит как "три заполненных строчки, 12 пустых, 4 заполненных, 11 пустых и т.д."
2) Насколько я поняла, он выгружает все в первую свободную строку листа. Однако, у меня есть оформление для таблицы (в которую объядиняются другие), и он выгружает данные не в нее, а "под ней". Как задать код таким образом, чтобы всегда он заполнял строчки, начиная с А3?

Заранее спасибо!

Макрос на данный момент:
Код
Sub Agregator()
    Dim iBeginRange As Object, lCalc As Long, lCol As Long
    Dim oAwb As String, sCopyAddress As String, sSheetName As String
    Dim lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer
    Dim wsSh As Object, wsDataSheet As Object, bPolyBooks As Boolean, avFiles
    Dim wbAct As Workbook
    Dim bPasteValues As Boolean
    
    On Error Resume Next
    'Выбираем диапазон выборки с книг
    Set iBeginRange = Range("$K$3:$AG$17")
    'Указываем имя листа
    sSheetName = "Risk Report"
    'Запрос сбора данных с книг
        avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Выбор файлов", , True)
        If VarType(avFiles) = vbBoolean Then Exit Sub
        bPolyBooks = True
        lCol = 1
    'отключаем обновление экрана, автопересчет формул и отслеживание событий
    'для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды
    With Application
        lCalc = .Calculation
        .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual
    End With
    'выбираем лист в книге для сбора
    Set wsDataSheet = Sheet1
    
    'цикл по книгам
    For li = LBound(avFiles) To UBound(avFiles)
        Set wbAct = Workbooks.Open(Filename:=avFiles(li))
        oAwb = wbAct.Name
        
        'цикл по листам
        For Each wsSh In wbAct.Sheets
            If wsSh.Name Like sSheetName Then
               With wsSh
                    sCopyAddress = iBeginRange.Address
                    
                    lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1
                    'вставляем имя книги, с которой собраны данные
                    If lCol Then wsDataSheet.Cells(lLastRowMyBook, 1).Resize(Range(sCopyAddress).Rows.Count).Value = oAwb
                    'вставляем только значения
                        .Range(sCopyAddress).Copy
                        wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, 1).PasteSpecial xlPasteValues
                    End With
            End If
                
NEXT_:
        Next wsSh
        If bPolyBooks Then wbAct.Close False
    Next li
    With Application
        .ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc
    End With
        
    
End Sub
Страницы: 1
Наверх