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

Страницы: 1 2 3 4 5 6 7 8 След.
Макрос копирования формул, аналог двойного клика в нижний правый угол ячейки
 
Спасибо большое! Макрос1 то что нужно !
Макрос копирования формул, аналог двойного клика в нижний правый угол ячейки
 
Здравствуйте!
Помогите пожалуйста автоматизировать небольшой процесс.
У меня есть таблица в  которой я прописываю в ячейках и Exel умеет заполнять нижестоящие ячейки формулами, принцип всем известен когда выделяешь ячейку с исходной формулой  и двойным кликом по нижнему правому углу протягиваешь ее вниз.

Подскажите можно прописать такой макрос которым бы мог проделывать эту операцию
Получается я выделю ячеку/ячейку или несколько ячеей с формулами (условие что они будут рядом , как в примере 1 и 2)
И запускаю макрсос котрый  растягивает формулы вниз автоматически (с учетом того что количество строк/и выделенных ячеек может меняться )
Код
Sub Fill_Blanks()
   For Each cell In Selection
       If IsEmpty(cell) Then cell.Value = cell.Offset(-1, 0).Value
   Next cell
End Sub

Нашел такой пример очень удобный но он не копирует формулы а копирует значение (
Изменено: Marat_Mamedov - 25.03.2019 21:48:41
Cуммирование записей с учетом доп. анализа
 
StepanWolkoff пытался разобратся и подправить формулу не получилось.
Ожидалось что  расчет в столбце K будет равен тому что я столбце  в J  
Изменено: Marat_Mamedov - 20.01.2018 16:42:55
Cуммирование записей с учетом доп. анализа
 
Irregular Expression я бы с удовольствием сделал бы это с помощью макроса если бы мой уровень IQ позволил мне это. Касетельно выделением цвета - это я руками выделю цветом потом делаю фильтр по цвету проверяю что сумма всех записей залитых равно 0 (проверяю правильно ли я все закрасил).
Я надеялся что можно формулой просуммировать записи (в примере столбец J )  
Изменено: Marat_Mamedov - 19.01.2018 12:50:27
Cуммирование записей с учетом доп. анализа
 
День добрый!
Подскажите пожалуйста можно ли решить мою задачу с помощью формулы
Есть таблица в которой есть конкретное количество повторений ID транзакции
Сама формула должна понимать какие записи уже были учитанны для суммировани и учитвать приоритет суммирования (честно даже не понимаю как это описать) я сейчас обрабатываю это глазами таким образом :
Если 3 записи по критерию .
Вариант 1
есть три записи и есть запись в которой реф начинается на JXAU* с "+" в сумме  я нахожу вторую запись с "-" в сумме и выделю цветом (сумма этих двух записей равна 0)
Вариант 2
если по одному критерию  три записи и нет записи  в которой реф начинается на JXAU* я беру любые две записи с "+" и "-" с одиновой суммой и выделю цветом (сумма этих записей равна нулю)
Если 5 записи по критерию .
Вариант 1
есть пять записей по одному критерию и  есть запись в которой реф начинается на JXAU* с "+" я нахожу вторую запись с "-" в сумме и выделю цветом (сумма этих двух записей равна 0)
остальные три записи отрабатываю по принципу
если по одному критерию  три записи  я беру любые две записи с "+" и "-" с одинаковой суммой и выделю цветом (сумма этих записей равна нулю)
Вариант 2
есть пять записей одному критерию и  нет записи в которой реф начинается на JXAU* с "+" я нахожу две записи  с "-"  и две записи с "+" в сумме и выделю цветом (сумма этих 4 записей равна 0)

Примечание:
По  одному критерию в таблице может быть только одна запись JXAU с "+"  а также суммы без учета знаков будут всегда одинаковая по одному критерию  
Удаление ячеек по маске, Помогите в модернизации макроса
 
Проста супеер ! Спасибо всем огромное!
Power Query - для меня новинка разбираюсь как он работает, крутая штука (компания подарила офис 365 - а я еще в 2007-2010 завис.)  прогресс не стоит на месте
Макрос автора  Sanja - отработал программа не вылетела.  
Изменено: Marat_Mamedov - 18.01.2018 11:17:34
Удаление ячеек по маске, Помогите в модернизации макроса
 
"но при этом будет утеряно форматирование ячеек (цвета шрифтов, курсив и прочее)" - такой вариант подходит там вообще нет ничего такого в формате ячеек , просто текст.  
Удаление ячеек по маске, Помогите в модернизации макроса
 
Программа не выдержала , вылет.
Цитата
Если не актуально форматирование на листе, то можно переделать на массивах/словарях
Подскажите о чем речь не совсем понимаю.  
Удаление ячеек по маске, Помогите в модернизации макроса
 
Просто супер! Спасибо большое теперь пойду на боевых реестрах удалять записи там записей под 1,5 млн ячеек (пришлось экспортировать в две колонки что бы поместились ) посмотрю как себя поведет Excel.
Не смог найти как настроить умный  экспор в ексель из txt  буду удалять их вашим макросом )

Может кто то сталкивался с подобной задачей - "умный экспорт данных из txt" что бы перебрать текстовый файл по условию ( в моем случаи строка  начинается и  перечень условий ) если строка начинается на указанные условия только их и забрать из текстовго файла  
Удаление ячеек по маске, Помогите в модернизации макроса
 
Что то он не работает.
Нечего не происходит, прикрепил файл в котором использовал код от "Sanja" но  после нажатия выполнить макрос не чего не произошло (ячейки не удалилсь)
Ожидалось что удалятся все ячейки в диапазоне A:B которые не начинаются на Анат или Уру или Инокен
Код из примера
Код
Sub Макрос2()
    Dim iText, iKey, iTemp, i&, flag As Boolean
    Dim myRng As Range, cl As Range, delRng As Range
    Dim dic As Object
    iText = Array("Анат*", "Уру*", "Инокен*") 'список слов на удаление
    Set dic = CreateObject("Scripting.Dictionary")
    For i = 0 To UBound(iText)
        iTemp = dic(iText(i))
    Next
    Set myRng = Intersect(Range("A:B"), ActiveSheet.UsedRange)
    flag = False
    For Each cl In myRng
        For Each iKey In dic.Keys
            If cl.Value Like "*" & iKey & "*" Then
                flag = True
                Exit For
            End If
            If flag Then Exit For
        Next
        If Not flag Then
            If Not delRng Is Nothing Then
                Set delRng = Union(delRng, cl)
            Else
                Set delRng = cl
            End If
            flag = False
        End If
    Next
    If Not delRng Is Nothing Then delRng.Delete Shift:=xlShiftUp
    MsgBox "ненужные строки удалены!", 64, "конец"
    End Sub
Изменено: Marat_Mamedov - 18.01.2018 09:34:04
Удаление ячеек по маске, Помогите в модернизации макроса
 
Здравствуйте!
На форме нашел макрос который удаляет ячейки со сдвигом вверх по условию :
Код
Sub Макрос2()
    Dim iRange As Range
    Dim iText As Variant
    Dim i As Long
    iText = Array("05056280*","06056280*","01056280*") 'список слов на удаление
    For i = 0 To UBound(iText)
       Set iRange = Range("A:B").Find(What:=iText(i), LookIn:=xlFormulas, Lookat:=xlPart)
        If Not iRange Is Nothing Then
            Do
                iRange.Delete Shift:=xlShiftUp
                Set iRange = Range("A:B").Find(What:=iText(i), _
                    LookIn:=xlFormulas, Lookat:=xlPart)
            Loop Until iRange Is Nothing
        End If
    Next i
    MsgBox "ненужные строки удалены!", 64, "конец"
End Sub
Данный макрос удаляет все ячейки в диапазоне которые начинаются на 05056280 или 06056280 или 01056280 ,  подскажите как его модернизировать что бы удалили все кроме  05056280 и 06056280 и 01056280 (указать в макросе те которые нужно оставить а не удалить т.к. оставить нужно порядка 10 масок а удалить намного больше и количество масок вырастает)  
Макрос сохранения в .csv, сохранения пути оригинального файла и сохранения названия без учета расширения
 
Спасибо большое !!!! то что нужно
Макрос сохранения в .csv, сохранения пути оригинального файла и сохранения названия без учета расширения
 
Помогите пожалуйста настроить через макрос сохранения файлов в сsv

я использовал стандартный мастер записи макросов и у меня получилось следующее
Код
Sub SVS_invoice()

    ActiveWorkbook.SaveAs filename:= _
        "D:\Работа\Invois\Master\2016\Январь\Invoice\MCE_Invoice_01-31-2016_6250.csv", _
        FileFormat:=xlCSV, CreateBackup:=False
End Sub
Помогите его сделать универсальным
Что бы папка для сохранения файла = папке где находится файл ктороый я пытаюсь сохранить в csv
Что бы имя нового файла файла csv = имя файла который я пытаюсь сохранить в csv без учета расширения (было MCE_Invoice_01-31-2016_6250.xsl стало MCE_Invoice_01-31-2016_6250.csv
Проставить отрицательные значения в тексте,
 
Длина текста может менятся, но струкура (разделити запятая) не меняется.
Проставить отрицательные значения в тексте,
 
Ivan.kh - спасибо большое то что нужно !!!
Проставить отрицательные значения в тексте,
 
Пример прилагаю.
Извините!
Проставить отрицательные значения в тексте,
 
День добрый подскажите как формулой можно сделать такое
Было
2155,und,mPay,ECP,2016-07-26 10:15:25,unde,47************09,21333142,13,16,,214268720,1.00,0.01600,0.98400,UAH ,0.03,0.00048,0.02952,EUR,,,2016-07-26 10:15:25
Стало
2155,und,mPay,ECP,2016-07-26 10:15:25,unde,47************09,21333142,13,16,,214268720,-1.00,-0.01600,-0.98400,UAH ,-0.03,-0.00048,-0.02952,EUR,,,2016-07-26 10:15:25

Строка из csv отчета структура всегда одинаковая ,разделитель запятая , меняются только значения
Определение диапазона в макросе
 
Добрый день.
Определение диапазона в макросе
 
Александр, спасибо большое пошел ковырять дальше код, вроде понял как это записывается
Получилось такое чудо
Код
Sub Ïåðåñ÷åò()
Dim lRws As Long
'
    Columns("H:H").Select
    lRws = Cells(Rows.Count, "G").End(xlUp).Row
    Selection.ClearContents
    Range("A5:G5").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("29095134568014").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("29095134568014").Sort.SortFields.Add Key:= _
    Range(Cells(5, "G"), Cells(lRws, "G")), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("29095134568014").Sort
        .SetRange Range(Cells(5, "G"), Cells(lRws, "G"))
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range(lRws, "G").Select
    Selection.End(xlUp).Select
    ActiveWindow.SmallScroll Down:=-18
    Range("H5").Select
    ActiveCell.FormulaR1C1 = _
        "=SUMIF(R[-3]C[-1]:R[2]C[-1],RC[-1],R[-3]C[-6]:R[2]C[-6])"
    Selection.AutoFill Destination:=Range("H5:H12263")
     lRws = Cells(Rows.Count, "H").End(xlUp).Row
    Range(Cells(5, "H"), Cells(lRws, "H")).Select
    Range("H5").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("A:H").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    Range(lRws, "H").Select
    Selection.End(xlUp).Select
   End Sub
Определение диапазона в макросе
 
Попробовал понял как работает.
Моих знаний не хватает это дело применить в коде, не знаю как это записать в моем случаи.
В этом моя беда
Определение диапазона в макросе
 
Можете пожалуйста  на примере этого фрагмента показать как он должен выглядит, а по примеру я уже смогу разобраться дальше
Код
 ActiveWorkbook.Worksheets("29095134568014").Sort.SortFields.Add Key:=Range( _
 "G5:G12263"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
     
Ваш пример я нашел на фруме не смог его интегрировать в свой код(
Определение диапазона в макросе
 
Добрый день!
Уважаемые знтаnjки помогите доработать макрос
Получается я использовал обычную запись макроса, но увы он фиксирует конкретно тот диапазон который именно сейчас актуален.
Можете подправить его что бы он сам понимал какой диапазон сейчас актуален в этих местах:
Код
ActiveWorkbook.Worksheets("29095134568014").Sort.SortFields.Add Key:=Range( _         "G5:G12263"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _         xlSortTextAsNumbers - тут G5 константа а вот G12263 всегда разная так как диапазон меняется 
 .SetRange Range("A5:G12263") -  тут А5 константа а вот G12263 всегда разная так как диапазон меняется 
 Range("G12263").Select -  G12263 всегда разная так как диапазон меняется
Range("H5:H12263").Select - тут H5 константа а вот H12263 всегда разная так как диапазон меняется 
Range("H12263").Select - H12263 всегда разная так как диапазон меняется 

Весь код указал ниже. Очень прошу помочь пытался сам у меня все валится ((... (находил на форуме как определить последнюю ячейку но применить не смог)
Код
Sub Пересчет()
    Columns("H:H").Select
    Selection.ClearContents
    Range("A5:G5").Select
    Range(Selection, Selection.End(xlDown)).Select
    ActiveWorkbook.Worksheets("29095134568014").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("29095134568014").Sort.SortFields.Add Key:=Range( _
        "G5:G12263"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("29095134568014").Sort
        .SetRange Range("A5:G12263")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("G12263").Select
    Selection.End(xlUp).Select
    ActiveWindow.SmallScroll Down:=-18
    Range("H5").Select
    ActiveCell.FormulaR1C1 = _
        "=SUMIF(R[-3]C[-1]:R[2]C[-1],RC[-1],R[-3]C[-6]:R[2]C[-6])"
    Selection.AutoFill Destination:=Range("H5:H12263")
    Range("H5:H12263").Select
    Range("H5").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("A:H").Select
    Application.CutCopyMode = False
    Selection.AutoFilter
    Range("H12263").Select
    Selection.End(xlUp).Select
   End Sub
 
Объединить файлы csv в один
 
Спасибо!
Код просто супер!
Объединить файлы csv в один
 
В моем случаи все работает на ура ))
Не смог отключить прописания в первой колонке название файла, и он вставляет со второй ячейки
но это дело все удаляю в конце и все хорошо (еще вставил отключение диалогового окна  буфера обмена)
Объединить файлы csv в один
 
Нашел на просторах интернета (немого подкрутил вроде работает)
Может кому пригодиться

Код
Option Explicit

Sub SCV_and_Sheets1()
    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("A1")
    'Application.InputBox("Выберите диапазон сбора данных." & vbCrLf & _
                                           "1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. " & _
                                           vbCrLf & "2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.", Type:=8)
    'для указания диапазона без диалогового окна:
    'Set iBeginRange = Range("A1:A10") 'диапазон указывается нужный
    'Если диапазон не выбран - завершаем процедуру
    'If iBeginRange Is Nothing Then Exit Sub
    
    'Указываем имя листа
    'Допустимо указывать в имени листа символы подставки ? и *.
    'Если указать только * то данные будут собираться со всех листов
    'If sSheetName = "" Then sSheetName = "*"sSheetName = InputBox("Введите имя листа, с которого собирать данные(если не указан, то данные собираются со всех листов)", "Параметр")
    'Если имя листа не указано - данные будут собраны со вех листов
    'If sSheetName = "" Then sSheetName = "*"
    
    sSheetName = "*"
    On Error GoTo 0
    'Запрос - вставлять на результирующий лист все данные
    'или только значения ячеек (без формул и форматов)
    bPasteValues = (MsgBox("Вставлять только значения?", vbQuestion + vbYesNo, "Excel-VBA") = vbYes)
    'Запрос сбора данных с книг(если Нет - то сбор идет с активной книги)
    If MsgBox("Собрать данные с нескольких книг?", vbInformation + vbYesNo, "Excel-VBA") = vbYes Then
        avFiles = Application.GetOpenFilename("Excel files(*.csv*),*.csv*", , "Выбор файлов", , True)
        If VarType(avFiles) = vbBoolean Then Exit Sub
        bPolyBooks = True
        lCol = 1
    Else
        avFiles = Array(ThisWorkbook.FullName)
    End If
    'отключаем обновление экрана, автопересчет формул и отслеживание событий
    'для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды
    With Application
        lCalc = .Calculation
        .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual
    End With
    'создаем новый лист в книге для сбора
    Set wsDataSheet = ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count))
    'если нужно сделать сбор данных на новый лист книги с кодом
    'Set wsDataSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    'цикл по книгам
    For li = LBound(avFiles) To UBound(avFiles)
        If bPolyBooks Then
            Set wbAct = Workbooks.Open(filename:=avFiles(li))
        Else
            Set wbAct = ThisWorkbook
        End If
        oAwb = wbAct.Name
        'цикл по листам
        For Each wsSh In wbAct.Sheets
            If wsSh.Name Like sSheetName Then
                'Если имя листа совпадает с именем листа, в который собираем данные
                'и сбор идет только с активной книги - то переходим к следующему листу
                If wsSh.Name = wsDataSheet.Name And bPolyBooks = False Then GoTo NEXT_
                With wsSh
                    Select Case iBeginRange.Count
                    Case 1 'собираем данные начиная с указанной ячейки и до конца данных
                        lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row
                        iLastColumn = .Cells.SpecialCells(xlLastCell).Column
                        sCopyAddress = .Range(.Cells(iBeginRange.Row, iBeginRange.Column), .Cells(lLastrow, iLastColumn)).Address
                    Case Else 'собираем данные с фиксированного диапазона
                        sCopyAddress = iBeginRange.Address
                    End Select
                    lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1
                    'вставляем имя книги, с которой собраны данные
                    If lCol Then wsDataSheet.Cells(lLastRowMyBook, 1).Resize(Range(sCopyAddress).Rows.Count).Value = oAwb
                    If bPasteValues Then 'если вставляем только значения
                        .Range(sCopyAddress).Copy
                        wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteValues
                    Else
                        .Range(sCopyAddress).Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol)
                    End If
                End With
            End If
NEXT_:
        Next wsSh
        Application.DisplayAlerts = False
        If bPolyBooks Then wbAct.Close False
    Next li
    With Application
        .ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc
    End With

 Columns("A:A").Select
    Selection.Delete Shift:=xlToLeft
    Rows("1:1").Select
    Selection.Delete Shift:=xlUp
    Range("A1").Select
End Sub
Объединить файлы csv в один
 
Добрый день.
В просторах интернета не смог найти макроса для что бы "сцепить" несколько файлов csv в один (нашел примеры с xls - очень крутой, запускаешь макрос и он обьденяет фалы которые ты сам выбреешь в проводнике записывает их друг под другом)
Возможно у Вас есть примеры подобного и для csv.

 
Изменено: Marat_Mamedov - 08.09.2016 10:16:54
Макрос импорта txt , срабатывает 50/50, Срабатывает через раз , не могу понять причину по которой он делит текст по столбцам разделитель ";"
 
по одному файлу то срабатывает то нет (((
Макрос импорта txt , срабатывает 50/50, Срабатывает через раз , не могу понять причину по которой он делит текст по столбцам разделитель ";"
 
Добрый день .
Подскажите причину по которой макрос не всегда осуществляет разделения текста по столбцам ";" при импорте из txt

сам макрос :

Код
Sub test()
            Application.ScreenUpdating = False
            Application.Calculation = xlCalculationManual
            Application.EnableEvents = False
            Application.DisplayStatusBar = False
            Application.DisplayAlerts = False
   Sheets("report").Select ' вделить весь лист
   Sheets("report").Cells.ClearContents ' очистить
    ' импорт txt
  
    Dim wbCsv As String: wbCsv = ActiveWorkbook.Path & "\" & Worksheets("Итого").Range("$A$2").Value
    Workbooks.OpenText Filename:=wbCsv, otherchar:=";"
    With ActiveWorkbook
    .ActiveSheet.UsedRange.Copy ThisWorkbook.Sheets("report").[a1].Cells
     .Close (True)
    End With
    ' добавить строку шапки это уже мои докруточки 
    Rows("1:1").Select
    Selection.Insert Shift:=xlDown
    Range("A1").Select
    Sheets("Итого").Select
    Range("A11:A25").Select
    Selection.Copy
    Sheets("report").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Sheets("Итого").Select
    Range("A1").Select
            Application.ScreenUpdating = True
            Application.ScreenUpdating = True
            Application.Calculation = xlCalculationAutomatic
            Application.EnableEvents = True
            Application.DisplayStatusBar = True
            Application.DisplayAlerts = True
    
End Sub
 
Подскажите что тут упущено ?
Изменения знака по условию (*-1)
 
Спасибо !!! Просто бомба а не код ,
ЧУДО ДИВНОЕ !!!
Изменения знака по условию (*-1)
 
Добрый день.
Столкнулся с задачей изменения знака (*-1) числа по условию
Есть файл с листами "29242824698003","29244824698012","29095829098101","29247824698912" (это массив в котором нужно проверить ) - где нужно поменять знак в столбце B , если значение в А есть на листе справочника "OTRIC" в колонке А
Лист справочник "OTRIC" в столбце A условие
формулой это выглядит так :
=ЕСЛИ(СЧЁТЕСЛИ(OTRIC!A:A;'29242824698003'!A2)>0;B2*-1;B2)
первая проблемма что при помощи формул мне приходится создавать доп колонки так как поменять знак в столбце B я не могу
но проблема в том что по этой формуле я перебераю все значения на листах хотя по факту на листе OTRIC может быть 3 занчения а на листах кде нужно поменять знак 50 тыс.
Помогите с макросом которой брал бы значение из листа "OTRIC" и прогонял его по листам "29242824698003","29244824698012","29095829098101","29247824698912" в случаии нахождения проставлял знак "-" в следующей ячейки в колонке B. Пример прикрепляю.
Изменено: Marat_Mamedov - 11.07.2014 11:50:41
Страницы: 1 2 3 4 5 6 7 8 След.
Наверх