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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 295 След.
Автоматическое выделение ячеек в желтый цвет с помощью макроса
 
Код
Sub HighlightMinValueInRows()
    Dim ws As Worksheet
    Set ws = ActiveSheet
    
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
 
    Dim searchText As String
    searchText = "ИТОГО с учетом индексации и курсов валют с НДС 22%"
 
    Dim r As Long
    Dim c As Long
    Dim minVal As Variant
    Dim minCell As Range
    Dim lastCol As Long
    Dim cellValue As Variant
    Dim numVal As Double
 
    Application.ScreenUpdating = False
 
    For r = 1 To lastRow
        ' Проверяем, соответствует ли ячейка в столбце C искомому тексту
        If ws.Cells(r, "C").Value = searchText Then
            ' Определяем последний заполненный столбец в текущей строке
            lastCol = ws.Cells(r, ws.Columns.Count).End(xlToLeft).Column
            minVal = Empty
            Set minCell = Nothing
            For c = 1 To lastCol
                cellValue = ws.Cells(r, c).Value
                ' Проверяем, что значение числовое
                If IsNumeric(cellValue) Then
                    ' Преобразуем в число для сравнения
                    numVal = CDbl(cellValue)
                    If IsEmpty(minVal) Or numVal < minVal Then
                        minVal = numVal
                        Set minCell = ws.Cells(r, c)
                    End If
                End If
            Next c
            ' Если минимальное число найдено — выделяем ячейку жёлтым
            If Not minCell Is Nothing Then
                minCell.Interior.Color = vbYellow
            End If
        End If
    Next r
 
    Application.ScreenUpdating = True
    MsgBox "Готово! Минимальные значения выделены жёлтым.", vbInformation
 
End Sub
Поиск максимальных и минимальных значений с формулой массива., Не могу понять почему не работает формула массива
 
Вроде похоже.

Off topic: коллеги, гоните прочь искушение выдать решение картинкой :)
поиск значения с перебором
 
Код
=ЕСЛИОШИБКА(ИНДЕКС(Лист1!$H$1:$H$20362;ЕСЛИОШИБКА(ПОИСКПОЗ("*"&ЗНАЧЕН(C4)&"*";Лист1!F:F;0);ЕСЛИОШИБКА(ПОИСКПОЗ("*"&C4&"*";Лист1!F:F;0);20362+1)));"Нет совпадений")
поиск разного набора символов
 
Код
=ЗНАЧЕН(СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ($A3;"|";ПОВТОР(" ";100));ПОИСК(B$2&"-";ПОДСТАВИТЬ($A3;"|";ПОВТОР(" ";100)))+ДЛСТР(B$2)+1;100)))
Как вытащить разные числа с определённым символом из одной ячейки
 
Если под "определённым символом" имеется в виду "-", то функция примет вид
Код
Function ВЫТАЩИТЬ2(строка As String, символ1 As String, символ2 As String) As String
    Dim arr As Variant, brr As Variant, crr As Variant
    arr = Split(строка, символ1)
    ReDim brr(LBound(arr) To UBound(arr))
    
    Dim vv As Variant, yb As Long, xc As Long
    yb = LBound(brr) - 1
    For Each vv In arr
        crr = Split(vv, символ2)
        If UBound(crr) > LBound(crr) Then
            yb = yb + 1
            If InStr(crr(UBound(crr)), ".") = 0 Then
                xc = UBound(crr)
            Else
                xc = LBound(crr)
            End If
            brr(yb) = crr(xc)
        End If
    Next
    If yb >= LBound(brr) Then
        ReDim Preserve brr(LBound(brr) To yb)
        ВЫТАЩИТЬ2 = Join(brr, "+")
    End If
End Function
Код
=ВЫТАЩИТЬ2(A1;"/";"-")
=ВЫТАЩИТЬ2(A1;"-";"/") 'будет работать, как предыдущий вариант.
Как вытащить разные числа с определённым символом из одной ячейки
 
В стандартный модуль.
Код
Function ВЫТАЩИТЬ(строка As String, символ As String) As String
    Dim arr As Variant, brr As Variant, crr As Variant
    arr = Split(строка, "-")
    ReDim brr(LBound(arr) To UBound(arr))
    
    Dim vv As Variant, yb As Long
    yb = LBound(brr) - 1
    For Each vv In arr
        crr = Split(vv, символ)
        If UBound(crr) > LBound(crr) Then
            yb = yb + 1
            brr(yb) = crr(UBound(crr))
        End If
    Next
    If yb >= LBound(brr) Then
        ReDim Preserve brr(LBound(brr) To yb)
        ВЫТАЩИТЬ = Join(brr, "+")
    End If
End Function
В ячейку на лист
Код
=ВЫТАЩИТЬ(A1;"/")
"8+7,2+2+7,2" почему в этой строке оказалась 8? Она не содержит "определённый символ".
Выделение одинаковых текстовых значений в двух столбцах
 
"Свечников Леонид Леонидович " и "Свечников Леонид Леонидович" это разные строки.
Измените формулу
Код
=СЧЁТЕСЛИМН(B:B;СЖПРОБЕЛЫ(A1)&"*")>0
Изменено: МатросНаЗебре - 18.12.2025 09:25:40
Выделение одинаковых текстовых значений в двух столбцах
 
Код
=СЧЁТЕСЛИМН(B:B;A2)>0
Вставьте формулу в условное форматирование ячейки A2. Формат скопируйте на диапазон A3:A28.
Проделайте подобные манипуляции со столбцом B:B.
Код
=СЧЁТЕСЛИМН(A:A;B2)>0
Как в excel удалить дубликаты с объединением значений соседнего столбца?, Как в excel удалить дубликаты с объединением значений соседнего столбца?
 
Цитата
написал:
удалить дубли с одинаковыми артикулами
На ленте ДАННЫЕ - Удалить дубликаты
Цитата
написал:
Объединить значения столбца B
Вариант макросом.
Код
Sub Удалить_дубликаты()
    CloseEmptyWb

    Dim arr As Variant
    arr = GetPrintArray(Range("A2").CurrentRegion)
    
    PrintArray arr
End Sub

Private Sub PrintArray(arr As Variant)
    Workbooks.Add (1)
    Dim rr As Range
    Set rr = Cells(2, 1).Resize(UBound(arr, 1), UBound(arr, 2))
    rr.Value = arr
    rr.Columns(1).EntireColumn.AutoFit
    
    rr.Parent.Parent.Saved = True
End Sub

Private Function GetPrintArray(source As Range) As Variant
    Dim arr As Variant
    arr = Intersect(source, source.Parent.UsedRange).Columns("A:B").Value
    
    Dim dic As Object
    Set dic = GetDic(arr)
    
    Dim brr As Variant, yb As Long
    ReDim brr(1 To dic.Count, 1 To 2)
    For yb = 1 To UBound(brr, 1)
        brr(yb, 1) = dic.keys()(yb - 1)
        brr(yb, 2) = Join(dic.Items()(yb - 1).keys(), " ")
    Next
    GetPrintArray = brr
End Function

Private Function GetDic(arr As Variant) As Object

    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
    Dim ya As Long
    For ya = 1 To UBound(arr, 1)
        If IsEmpty(arr(ya, 1)) Then
        ElseIf IsEmpty(arr(ya, 2)) Then
        Else
            If Not dic.Exists(arr(ya, 1)) Then
                Set dic(arr(ya, 1)) = CreateObject("Scripting.Dictionary")
            End If
            dic(arr(ya, 1))(arr(ya, 2)) = Empty
        End If
    Next
    
    Set GetDic = dic
End Function

Private Sub CloseEmptyWb()
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        If wb.Path = "" Then wb.Close False
    Next
End Sub
Требование "без сводных таблиц" выполнено.  :D
Как использовать макросы, можно почитать тут.
Создание макросов и пользовательских функций на VBA
Связанные динамические списки из двух форматированных таблиц
 
Цитата
написал:
я так понимаю, речь про второй лист?
Да, про лист План.
Связанные динамические списки из двух форматированных таблиц
 
В ячейку D2 вставьте формулу массива и протяните до ячейки G3:
Код
=ЕСЛИОШИБКА(ИНДЕКС(Факт!$C$1:$C$99;100-НАИБОЛЬШИЙ((Таблица2[Заказчик]=Таблица6[@ЗАКАЗЧИК])*(100-СТРОКА(Таблица2[Заказчик]));СТОЛБЕЦ(A:A)));" ")
В проверку B2 вставьте формул и протяните до B3
Код
=СМЕЩ(D2;0;0;1;ПОИСКПОЗ(" ";D2:G2;0)-1)
Поздравительные видео с НГ, в таблицах
 
Ещё немного новогодних открыток
"Новый год к нам мчится..."
Вывод данных по значению из столбца
 
Вариант макросом. Вставьте код в модуль листа.
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Const doc = "F26"
    Const prn = "E29:H30"
    Const VALUE_MODE = False
    
    If Intersect(Target, Range(doc)) Is Nothing Then Exit Sub
    
    Dim tb As ListObject
    Set tb = ActiveSheet.ListObjects(1)
    
    Dim aTarget As Variant
    With Range(prn)
        ReDim aTarget(1 To .Rows.Count, 1 To .Columns.Count)
    End With
    
    Dim aSource As Variant
    On Error Resume Next
    aSource = tb.ListColumns(Range(doc).Value).DataBodyRange.Value
    On Error GoTo 0
    If Not IsEmpty(aSource) Then
        Dim aNN As Variant
        aNN = tb.ListColumns("НН").DataBodyRange.Value
        Dim ySource As Long, xTarget As Long
        For ySource = 1 To UBound(aSource, 1)
            If Not IsEmpty(aSource(ySource, 1)) Then
                xTarget = xTarget + 1
                If xTarget > UBound(aTarget, 2) Then Exit For
                If VALUE_MODE Then
                    aTarget(1, xTarget) = aNN(ySource, 1)
                    aTarget(2, xTarget) = aSource(ySource, 1)
                Else
                    aTarget(1, xTarget) = "=" & tb.ListColumns("НН").DataBodyRange.Cells(ySource, 1).Address(0, 0, xlA1)
                    aTarget(2, xTarget) = "=" & tb.ListColumns(Range(doc).Value).DataBodyRange.Cells(ySource, 1).Address(0, 0, xlA1)
                End If
            End If
        Next
    End If
    Range(prn).Value = aTarget
End Sub
Автоматическое формирование гиперссылки на файл Vol.2
 
А так можете создавать "до бесконечности". Перечислите папки в текстовом файле.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   'проверка: если столбец не I - выход
   If Target.Column <> 9 Then Exit Sub
   'проверка: если строка меньше 2 - выход
   If Target.Row < 2 Then Exit Sub
   'проверка: если изменили более одной ячейки - выход
   If Target.Count > 1 Then Exit Sub
   'проверка: если в ячейку ничего не ввели(удаление) - выход
   If Len(Target) = 0 Then Exit Sub
      
   Dim s$, sFolder As String
   
   With CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\tmp\1.txt", 1)
        Do
            If .AtEndOfStream Then Exit Do
            sFolder = .ReadLine
            'создаем путь к файлу
            s = sFolder & Target.Value & ".pdf"
            If Dir(s) <> "" Then
                'отключаем отслеживание событий, чтобы не было зацикливания при создании ссылки
                Application.EnableEvents = 0
                'создаем гиперссылку
                Me.Hyperlinks.Add Anchor:=Target, Address:=s, TextToDisplay:=CStr(Target.Value)
                'возвращаем отслеживание событий
                Application.EnableEvents = 1
                Exit Do
            End If
            DoEvents
        Loop
    End With
End Sub
Автоматическое формирование гиперссылки на файл Vol.2
 
Скорее нет. Ограничения в VBA всё-таки есть.
График отпусков без выходных и праздничных дней
 
Цитата
написал:
а мне надо учитывать ... выходные
Уберите эту часть из формулы
Код
*(ДЕНЬНЕД($R$2:$NR$2;2)<6)
Автоматическое формирование гиперссылки на файл Vol.2
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   'проверка: если столбец не I - выход
   If Target.Column <> 9 Then Exit Sub
   'проверка: если строка меньше 2 - выход
   If Target.Row < 2 Then Exit Sub
   'проверка: если изменили более одной ячейки - выход
   If Target.Count > 1 Then Exit Sub
   'проверка: если в ячейку ничего не ввели(удаление) - выход
   If Len(Target) = 0 Then Exit Sub
     
   Dim s$
   Dim vFolder As Variant
   For Each vFolder In Array("C:\tmp\", "C:\temp\")
        'создаем путь к файлу
        s = vFolder & Target.Value & ".pdf"
        If Dir(s) <> "" Then
            'отключаем отслеживание событий, чтобы не было зацикливания при создании ссылки
            Application.EnableEvents = 0
            'создаем гиперссылку
            Me.Hyperlinks.Add Anchor:=Target, Address:=s, TextToDisplay:=CStr(Target.Value)
            'возвращаем отслеживание событий
            Application.EnableEvents = 1
            Exit For
        End If
    Next
End Sub
График отпусков без выходных и праздничных дней
 
Можно перечислить праздники во вспомогательном диапазоне, тогда формула примет вид.
Код
=СУММ(($R$2:$NR$2>=F3)*($R$2:$NR$2<=H3)*(ДЕНЬНЕД($R$2:$NR$2;2)<6)*(ЕНД(ПОИСКПОЗ($R$2:$NR$2;Лист2!$A$1:$A$14;0)))*1)
График отпусков без выходных и праздничных дней
 
Можно, например, перечислить праздники в формуле:
Код
=СУММ(($R$2:$NR$2>=F3)*($R$2:$NR$2<=H3)*(ДЕНЬНЕД($R$2:$NR$2;2)<6)*($R$2:$NR$2<>ДАТА(2026;5;1))*($R$2:$NR$2<>ДАТА(2026;5;11))*1)
График отпусков без выходных и праздничных дней
 
Заливка подсвечивает ячейки между датой начала и датой Окончания.
Если не надо, чтоб подсвечивала субботы и воскресенья, добавьте условие в условное форматирование, что день недели не равен субботе или воскресенью.
Формулу подсмотреть можно в сообщении #2.
График отпусков без выходных и праздничных дней
 
Эта формула посчитает длительность отпуска, без учёта суббот и воскресений.
Код
=СУММ(($R$2:$NR$2>=F3)*($R$2:$NR$2<=H3)*(ДЕНЬНЕД($R$2:$NR$2;2)<6)*1)
Вводить как формулу массива Ctrl+Shift+Enter.
MultiProcessing или хакерский менеджер процессов на VBA, Воскрешение (вторая жизнь) VBA
 
Цитата
написал:
проще убрать Implements и работать с обычными классами.
Я когда разбирался, тоже об этом подумал. А оказывается всё уже подумано до нас :D  
Проверка совпадений и перенос отличающихся значений, Два разных файла, перенести значения из одного в другой
 
Увы, у меня не воспроизводится.
MultiProcessing или хакерский менеджер процессов на VBA, Воскрешение (вторая жизнь) VBA
 
Тимофеев, воспользовался кодом из #38
создал описанные классы
создал модуль класса ISDIInterface со строкой
Код
Public ProcessCount As Long
Ругается на строку Implements ISDIInterface в модуле clsSDIInterface
"Object module needs to implement 'ProcessCount' for interface 'ISDIInterface'"
Можете подсказать, как поправить?
Проверка совпадений и перенос отличающихся значений, Два разных файла, перенести значения из одного в другой
 
Очевидно среди открытых файлов нет файл "Пример 1 (1).xlsx", название которого написано в макросе.
Скрытие нужных строк по условию
 
Не, не забыл. Сознательно не сделал  :D
Сделал как в ТЗ, и написал что задание лучше дополнить. Мало ли, может так и надо было.
Выпадающие списки с помощью ДВССЫЛ, Помогите пожалуйста с выпадающими списками
 
Если нужна одинаковая формула для выпадающих списков столбцов C, H, M, R, W, AB.
Код
=ДВССЫЛ(ДВССЫЛ(СЖПРОБЕЛЫ(ЛЕВСИМВ(ПОДСТАВИТЬ(ЯЧЕЙКА("адрес");"$";ПОВТОР(" ";10));20))&20*ЦЕЛОЕ(СТРОКА()/20)+9))
Выпадающие списки с помощью ДВССЫЛ, Помогите пожалуйста с выпадающими списками
 
Если нужна одинаковая формула и для С31.
Код
=ДВССЫЛ(ДВССЫЛ("C"&20*ЦЕЛОЕ(СТРОКА()/20)+9))
Выпадающие списки с помощью ДВССЫЛ, Помогите пожалуйста с выпадающими списками
 
Код
=ДВССЫЛ($C$9)
В проверку С11.
Скрытие нужных строк по условию
 
Этот код надо вставить в модуль листа. Правый клик на ярлычке листа - Исходный текст.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Select Case Range("A1").Value
        Case "Значение1", "Значение2"
            'А4-А6 не изменияются
        Case "Значение3", "Значение4"
            'А5,А6 скрываются
            Range("A5:A6").EntireRow.Hidden = True
        Case "Значение5", "Значение6"
            'А4,А5 скрываются
            Range("A4:A5").EntireRow.Hidden = True
        Case Else
            Range("A4:A6").EntireRow.Hidden = False
        End Select
    End If
End Sub
Выглядит, будто в задании написано не всё. Ни слова нет о том, когда строки отображаются.
Изменено: МатросНаЗебре - 12.12.2025 14:23:26
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 295 След.
Наверх