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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 298 След.
Размножить строку по столбцу
 
Вариант макросом.
Код
Sub Multiply_strings()
    CloseEmptyWb
    ActiveSheet.Copy
    Dim rSource As Range
    Set rSource = Intersect(Selection, ActiveSheet.UsedRange)
    
    Dim cs As Range, arr As Variant
    For Each cs In rSource.Cells
        If InStr(cs.Value, " / ") > 0 Then
            arr = Split(cs.Value, " / ")
            cs.EntireRow.Copy
            cs.Cells(2, 1).Resize(UBound(arr) - LBound(arr)).EntireRow.Insert Shift:=xlDown
            Application.CutCopyMode = False
            cs.Resize(UBound(arr) - LBound(arr) + 1).Value = Application.Transpose(arr)
        End If
    Next
End Sub

Private Sub CloseEmptyWb()
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        If wb.Path = "" Then wb.Close False
    Next
End Sub
Учет материалов
 
Цитата
написал:
если кто умеет такую чудо-таблицу-учетчицу сделать, дайте пожалуйста знать!
Я умею.
(произнесено слегка дрогнувшим от самонадеянности голосом :D )
Соревнования. Сортировка и ранжирование при равных очках, по лучшим местам
 
Вариант с дополнительным столбцом.
В ячейку O7 вставьте формулу и протяните до ячейки O17:
Код
=РАНГ(P7;$P$7:$P$17)

В ячейку P7 вставьте формулу и протяните до ячейки P17:
Код
=L7+0,01*МАКС(I7;K7)+0,0001*K7
[ Закрыто] Помогите разобраться. Формула XL., Формула XL.
 
Цитата
написал:
пиши прям маркером на экране
:D  
Изменено: МатросНаЗебре - 29.01.2026 16:27:33
Как можно автоматически по названию сохранять данные из таблицы в другую!?, Формула для перенеса данных с объеденнной ячейки
 
Можно перенести макросом.
Код
Option Explicit

Sub Перенести()
    Dim rSource As Range
    Set rSource = GetSourceRange()
    If rSource Is Nothing Then Exit Sub
    
    Dim shTarget As Worksheet
    Set shTarget = GetTargetSheet()
    If shTarget Is Nothing Then Exit Sub
    
    CopyData rSource, shTarget
End Sub

Private Sub CopyData(rSource As Range, shTarget As Worksheet)
    Dim aSource As Variant
    aSource = rSource.FormulaR1C1
    
    Dim aTarget As Variant
    aTarget = shTarget.UsedRange.Resize(shTarget.UsedRange.Rows.Count + UBound(aSource, 1)).Value
    
    Dim nomerSource As Variant, dateSource As Variant
    GetSourceData rSource.Parent, nomerSource, dateSource
    
    Dim ys As Long, yt As Long, vv As Variant, yxx As Variant, yf As Long, xf As Long, xt As Long, updated As Boolean, newYmin As Long, newYmax As Long
    For ys = 1 To UBound(aSource, 1)
        If IsNumeric(aSource(ys, 1)) Then
            For yt = 1 To UBound(aTarget, 1)
                If aTarget(yt, 1) = dateSource Then
                If aTarget(yt, 3) = nomerSource Then
                If aTarget(yt, 9) = aSource(ys + 1, 2) Then
                If aTarget(yt, 26) = aSource(ys + 1, 9) Then
                    Exit For
                End If
                End If
                End If
                End If
            Next
            If yt = UBound(aTarget, 1) + 1 Then
                For yt = UBound(aTarget, 1) To 1 Step -1
                    If Not IsEmpty(aTarget(yt, 9)) Then Exit For
                Next
                yt = yt + 1
                If newYmin = 0 Then newYmin = yt
                newYmax = yt
            
                aTarget(yt, 1) = dateSource
                aTarget(yt, 3) = nomerSource
            End If
            
            For Each vv In Split("1 1 5;1 2 10;1 4 15;1 6 13;1 9 27;1 11 32;1 13 30;2 2 9;2 4 16;2 9 26;2 11 33", ";")
                yxx = Split(vv, " ")
                yf = yxx(0)
                xf = yxx(1)
                xt = yxx(2)
                If Not IsEmpty(aSource(ys + yf - 1, xf)) Then
                    If CStr(aTarget(yt, xt)) <> CStr(aSource(ys + yf - 1, xf)) Then
                        aTarget(yt, xt) = aSource(ys + yf - 1, xf)
                        updated = True
                    End If
                End If
            Next
        End If
    Next
    
    If updated Then
        With shTarget.UsedRange.Resize(UBound(aTarget, 1), UBound(aTarget, 2))
            If newYmin > 4 Then
                .Rows(4).Copy .Rows(newYmin & ":" & newYmax)
                .Rows(newYmin & ":" & newYmax).ClearContents
            End If
            .FormulaR1C1 = aTarget
        End With
    End If
End Sub

Private Function GetTargetSheet() As Worksheet
    Dim wb As Workbook, sh As Worksheet
    For Each wb In Workbooks
        For Each sh In wb.Worksheets
            If sh.Range("A2").Value = "Дата" Then
                Set GetTargetSheet = sh
                Exit Function
            End If
        Next
    Next
    
    Workbooks.Add (1)
    ActiveSheet.Range("A2").Value = "Дата"
    Set GetTargetSheet = ActiveSheet
End Function

Private Function GetSourceRange() As Range
    Dim wb As Workbook, sh As Worksheet, rr As Range
    For Each wb In Workbooks
        For Each sh In wb.Worksheets
            On Error Resume Next
            Set rr = sh.Cells.Find("ИСТОЧНИК", LookAt:=xlWhole)
            Set rr = rr.Resize(sh.UsedRange.Rows.Count).Find("№", LookAt:=xlWhole)
            Set rr = rr.Resize(sh.UsedRange.Rows.Count).Find(1, LookAt:=xlWhole)
            On Error GoTo 0
            If Not rr Is Nothing Then
                Set GetSourceRange = rr.Cells(2, 1).Resize(sh.UsedRange.Rows.Count, sh.UsedRange.Columns.Count)
                Set rr = Nothing
            End If
            If Not GetSourceRange Is Nothing Then Exit Function
        Next
    Next
End Function

Private Sub GetSourceData(sh As Worksheet, nomerSource As Variant, dateSource As Variant)
    Dim rr As Range
    On Error Resume Next
    Set rr = sh.UsedRange.Find("Перемещение бюджетных средств №*от*", LookAt:=xlWhole)
    On Error GoTo 0
    If rr Is Nothing Then Exit Sub
    
    Dim ss As String
    ss = rr.Value
    ss = Replace(ss, "Перемещение бюджетных средств №", "")
    ss = Replace(ss, " г.", "")
    
    Dim arr As Variant
    arr = Split(ss, " от ")
    If UBound(arr) > 0 Then
        nomerSource = arr(0)
        dateSource = arr(1)
        
        If IsNumeric(nomerSource) Then nomerSource = CLng(nomerSource)
        If IsDate(dateSource) Then dateSource = CDate(dateSource)
    Else
        nomerSource = ss
    End If
End Sub
Умножение ячеек в строке парами, перемножить значения в строке b1*c1+d1*e1+...+x1*y1 формулой с возможностью расширить диапазон
 
Код
=СУММПРОИЗВ((B3:X3)*(C3:Y3)*($B$1:$X$1=$B$1))
Найти значение с другой таблицы, Найти значение с другой таблицы
 
Вариант через пользовательскую функцию.
Код
Option Explicit

Function ГОРИЗОНТ(скважина1 As String, начало1 As Double, конец1 As Double, скважина2 As Range, начало2 As Range, конец2 As Range, горизонт2 As Range) As String
    Dim nrr As Variant, krr As Variant, srr As Variant, grr As Variant
    nrr = Intersect(начало2, начало2.Parent.UsedRange).Resize(, 1).Value
    krr = Intersect(конец2, конец2.Parent.UsedRange).Resize(UBound(nrr, 1), 1).Value
    srr = Intersect(скважина2, скважина2.Parent.UsedRange).Resize(UBound(nrr, 1), 1).Value
    grr = Intersect(горизонт2, горизонт2.Parent.UsedRange).Resize(UBound(nrr, 1), 1).Value
    
    ClearArray nrr, True
    ClearArray krr, True
    ClearArray srr, False
    ClearArray grr, False
    
    Dim yn As Long, minD As Double, maxD As Double, curK As Double, optK As Double
    For yn = 1 To UBound(nrr, 1)
        If srr(yn, 1) = скважина1 Then
            If Not IsEmpty(nrr(yn, 1)) Then
                minD = Application.Max(nrr(yn, 1), начало1)
                maxD = Application.Min(krr(yn, 1), конец1)
                If maxD >= minD Then
                    If конец1 > начало1 Then
                        curK = maxD - minD
                        curK = curK / (конец1 - начало1)
                    ElseIf конец1 = начало1 Then
                        curK = 1
                    End If
                    If optK < curK Then
                        optK = curK
                        ГОРИЗОНТ = grr(yn, 1)
                    End If
                End If
            End If
        End If
    Next
End Function

Private Sub ClearArray(arr As Variant, doubleOnly As Boolean)
    Dim ya As Long
    Dim xa As Long
    For ya = LBound(arr, 1) To UBound(arr, 1)
        For xa = LBound(arr, 2) To UBound(arr, 2)
            If IsError(arr(ya, xa)) Then
                arr(ya, xa) = Empty
            End If
            If doubleOnly Then
                If Not IsNumeric(arr(ya, xa)) Then
                    arr(ya, xa) = Empty
                End If
            End If
        Next
    Next
End Sub
Изменено: МатросНаЗебре - 29.01.2026 10:19:32 (Прикрепил файл.)
Формула для получения рандомных чисел при двух известных суммах
 
Код
=МАКС(СЛУЧМЕЖДУ(1;МИН($E2-СУММ($A2:A2)-(СТОЛБЕЦ($E2)-СТОЛБЕЦ()-1);B$5-СУММ(B1:B$1)-(СТРОКА(B$5)-СТРОКА()-1)));($E2-СУММ($A2:A2))*((СТОЛБЕЦ($E2)=СТОЛБЕЦ()+1));(B$5-СУММ(B1:B$1))*((СТРОКА(B$5)=СТРОКА()+1)))
Как вывести план по двум параметрам.
 
Код
'Сумма планов по магазинам равна сумме планов по товарам
=ВПР(A2;$H$6:$I$7;2)/СУММ($I$6:$I$7)*ВПР(B2;$H$2:$I$3;2)/СУММ($I$2:$I$3)*СУММ($I$2:$I$3)
'План по товарам задаёт только соотношение, абсолютная величина задаётся таблицей магазинов
=ВПР(A2;$H$6:$I$7;2)*ВПР(B2;$H$2:$I$3;2)/СУММ($I$2:$I$3)
'План по магазинам задаёт только соотношение, абсолютная величина задаётся таблицей товаров
=ВПР(B2;$H$2:$I$3;2)*ВПР(A2;$H$6:$I$7;2)/СУММ($I$6:$I$7)
Изменено: МатросНаЗебре - 22.01.2026 15:46:00
Сбор данных из нескольких файлов
 
Выглядит так, будто Вы говорите про файлы, сильно непохожие на файлы из сообщения #1.
Ошибка в формуле ЗАМЕНИТЬ
 
Код
=ЗАМЕНИТЬ(L9;1;ПОИСК("х";ПОДСТАВИТЬ(ПОДСТАВИТЬ(L9;"x";"х");"y";"у"));"")
Так заменяет латинские на русские буквы, и краткое можно не менять  :D  :D  :D  
найти ошибку в макросе, невиыбирает данные на листе база по выбранным критериям
 
Ищете Ремонт водопровода в пгт. Ивановка, а в базе Ремонт водопровода есть только в с. Дружбовка.
Повредите водопровод в Ивановке, тогда макрос будет хоть что-то выводить.
Изменено: МатросНаЗебре - 21.01.2026 15:57:41
Отказ в редактировании макроса, Изменение структуры макроса
 
Код
Sub НижПодч_Описание()
    Workbooks.Add (1)
    Application.MacroOptions _
            Macro:="НижПодч", _
            Description:="Если ячейка не пустая, ставит '_' и текст", _
            Category:="MIT-Excel", _
            ArgumentDescriptions:=Array( _
                "ячейка для проверки", _
                "текст или ссылка на ячейку, которая будет отображаться как текст после '_'")
    ActiveWorkbook.Close False
End Sub
Писали же
Цитата
написал:
Хоть одна книга на момент работы этого макроса открыта и видима?
Отказ в редактировании макроса, Изменение структуры макроса
 
НижПодч_Описание находится в той же книге, что и НижПодч?
Отказ в редактировании макроса, Изменение структуры макроса
 
Цитата
написал:
И вот спустя 5 лет эта тема поднимается)
Сделали ли то, что написано в первом ответе #2?
Запуск макроса при изменении ListBox
 
Цитата
написал:
извините за критику.
Нет проблем. Ошибки - это наша рутина )
Цитата
написал:
я не заметил того, что вы закавычили имена макросов и оставил сначала свою строку
Именно такое у меня и было предположение, когда я попросил выложить код.
Условное форматирование (градиентная заливка) каждой строки
 
Цитата
написал:
Спасибо, дружище!
Hasta la vista!  :D  
Запуск макроса при изменении ListBox
 
Цитата
написал:
код проявляет свою "неправильность" так же как и мой уже на 6 строке
Не выглядит правдоподобным. Покажите, пжста, файл после внесённых изменений.
Условное форматирование (градиентная заливка) каждой строки
 
Такой вариант с макросом.
Подсчет кол-ва дней, начиная с определенной ячейки, Надо посчитать кол-во дней между двумя датами, но начиная с определенной ячейки диапазона
 
У Вас формула введена как формула массива.
- Но как, Холмс?!
Условное форматирование (градиентная заливка) каждой строки
 
Тут скорее нужен пример от Вас.
В ветке уже есть пример, но он Вам не помог)

Вариант макросом.
Допустим в B2:M2 Вы уже создали условное форматирование.
Запустите макрос, выделите диапазон B2:M10.
Макрос заполнит условное форматирование отдельно для каждой строки.
Код
Sub Копировать_форматирование()
    Dim rr As Range
    On Error Resume Next
    Set rr = Application.InputBox(Prompt:="Выделите диапазон", Default:=Selection.Address(0, 0, xlA1), Type:=8)
    On Error GoTo 0
    If rr Is Nothing Then Exit Sub
    
    Dim yt As Long
    For yt = 2 To rr.Rows.Count
        rr.Rows(1).Copy
        rr.Rows(yt).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Next
    Application.CutCopyMode = False
End Sub
Изменено: МатросНаЗебре - 20.01.2026 15:42:08
Условное форматирование (градиентная заливка) каждой строки
 
Условное форматирование-Управление правилами-Изменить правило
Подсчет кол-ва дней, начиная с определенной ячейки, Надо посчитать кол-во дней между двумя датами, но начиная с определенной ячейки диапазона
 
В ячейку E2 вставьте формулу и протяните до ячейки E157:
Код
=ЕСЛИ(СТРОКА()=ПОИСКПОЗ(A:A;A:A;0);СУММЕСЛИМН(E3:E$1048576;$A3:$A$1048576;A2);ЕСЛИ(C1=ИНДЕКС(C:C;ПОИСКПОЗ(A:A;A:A;0)+1);D2;D2-1))
Запуск макроса при изменении ListBox
 
Код
Private Sub UserForm_Initialize()
    Me.Service_macros.List = Array("восс-е исходных значений ДИ", "восс-е контекст. меню листа", "визуал-я 1 строки прихода", "отображение скрытых имен")
End Sub

Private Sub Service_macros_Change()
    ad = Array("Func_RecNM", "Func_RecCM", "Func_RecViz", "Func_ShowImen")(Service_macros.ListIndex)
    Application.Run ThisWorkbook.Name & "!" & ad
'    Select Case Service_macros.ListIndex
'         Case 0: ad = Func_RecNM
'         Case 1: ad = Func_RecCM
'         Case 2: ad = Func_RecViz
'         Case 3: ad = Func_ShowImen
'     End Select
End Sub
Заполнение шаблона маршрутного листа с помощью макроса (макрос сформирован с помощью записи макросов)
 
Код
Sub Маршрут1()
    'Новая строка
    Sheets("Маршрутный лист").Select
    'А это записал макрорекордер.
    Range("D7:G7").Select
    ActiveCell.FormulaR1C1 = "='Остаток_Потребность_Зима 2026'!R[9]C"
    Range("B11:B21").Select
    ActiveCell.FormulaR1C1 = "='Остаток_Потребность_Зима 2026'!R[-7]C[-1]"
    Range("H11:H21").Select
    ActiveCell.FormulaR1C1 = "='Остаток_Потребность_Зима 2026'!R[-7]C[3]"
    Range("C11").Select
    ActiveCell.FormulaR1C1 = "='Остаток_Потребность_Зима 2026'!R[-7]C[-1]"
    Range("C11").Select
    Selection.AutoFill Destination:=Range("C11:C20"), Type:=xlFillDefault
    Range("C11:C20").Select
    Range("D11").Select
    ActiveCell.FormulaR1C1 = "='Остаток_Потребность_Зима 2026'!R[-7]C[-1]"
    Range("D11").Select
    Selection.AutoFill Destination:=Range("D11:D20"), Type:=xlFillDefault
    Range("D11:D20").Select
    Range("E11").Select
    ActiveCell.FormulaR1C1 = "='Остаток_Потребность_Зима 2026'!R[-7]C[3]"
    Range("E11").Select
    Selection.AutoFill Destination:=Range("E11:E20"), Type:=xlFillDefault
    Range("E11:E20").Select
    Selection.AutoFill Destination:=Range("E11:G20"), Type:=xlFillDefault
    Range("E11:G20").Select
    Range("E21").Select
    ActiveCell.FormulaR1C1 = "='Остаток_Потребность_Зима 2026'!R[-7]C[3]"
    Range("E21").Select
    Selection.AutoFill Destination:=Range("E21:G21"), Type:=xlFillDefault
    Range("E21:G21").Select
End Sub
Так?
Загрузка смены по часам рабочего времени, Как сделать загрузку на смену, в зависимости от продолжительности смены
 
Код
=РАБДЕНЬ(J2;ЦЕЛОЕ(12/24*((ЦЕЛОЕ((H2+I2+(G2*F2)/1440-8/24)/(12/24))+1)-(ЦЕЛОЕ((J2-8/24)/(12/24))+1))+H2+I2+(G2*F2)/1440)-ЦЕЛОЕ(J2))+ОСТАТ(12/24*((ЦЕЛОЕ((H2+I2+(G2*F2)/1440-8/24)/(12/24))+1)-(ЦЕЛОЕ((J2-8/24)/(12/24))+1))+H2+I2+(G2*F2)/1440;1)
С учётом выходных дней.
Изменено: МатросНаЗебре - 19.01.2026 11:16:36
Загрузка смены по часам рабочего времени, Как сделать загрузку на смену, в зависимости от продолжительности смены
 
Для 12-часовой смены
Код
=J2+G2/24/60+12/24*(J2+G2/24/60>(ЦЕЛОЕ((J2-8/24)/(12/24))+1)*12/24+8/24)
12/24 - продолжительность смены
8/24 - начало смены в 8:00.
Условное форматирование строки в таблице, Условное форматирование строки в большой таблице
 
Код
Option Explicit

Sub test()
    Dim rr As Range
    For Each rr In Intersect(Columns("K:U"), ActiveSheet.UsedRange).Rows
        If rr.Row > 4 Then
            SetFormatConditions rr
        End If
    Next
End Sub
 
Private Sub SetFormatConditions(rr As Range)
    rr.FormatConditions.Delete
    rr.FormatConditions.AddColorScale ColorScaleType:=3
    rr.FormatConditions(rr.FormatConditions.Count).SetFirstPriority
    rr.FormatConditions(1).ColorScaleCriteria(1).Type = xlConditionValueLowestValue
    With rr.FormatConditions(1).ColorScaleCriteria(1).FormatColor
        .Color = 7039480
        .TintAndShade = 0
    End With
    rr.FormatConditions(1).ColorScaleCriteria(2).Type = xlConditionValuePercentile
    rr.FormatConditions(1).ColorScaleCriteria(2).Value = 50
    With rr.FormatConditions(1).ColorScaleCriteria(2).FormatColor
        .Color = 8711167
        .TintAndShade = 0
    End With
    rr.FormatConditions(1).ColorScaleCriteria(3).Type = xlConditionValueHighestValue
    With rr.FormatConditions(1).ColorScaleCriteria(3).FormatColor
        .Color = 8109667
        .TintAndShade = 0
    End With
End Sub
Условное форматирование строки в таблице, Условное форматирование строки в большой таблице
 
Код
Option Explicit

Sub test()
    Const myRANGE = "A1:J10"

    Dim rr As Range
    For Each rr In Range(myRANGE).Rows
        SetFormatConditions rr
    Next
End Sub

Private Sub SetFormatConditions(rr As Range)
    rr.FormatConditions.Delete
    rr.FormatConditions.AddColorScale ColorScaleType:=3
    rr.FormatConditions(rr.FormatConditions.Count).SetFirstPriority
    rr.FormatConditions(1).ColorScaleCriteria(1).Type = xlConditionValueLowestValue
    With rr.FormatConditions(1).ColorScaleCriteria(1).FormatColor
        .Color = 7039480
        .TintAndShade = 0
    End With
    rr.FormatConditions(1).ColorScaleCriteria(2).Type = xlConditionValuePercentile
    rr.FormatConditions(1).ColorScaleCriteria(2).Value = 50
    With rr.FormatConditions(1).ColorScaleCriteria(2).FormatColor
        .Color = 8711167
        .TintAndShade = 0
    End With
    rr.FormatConditions(1).ColorScaleCriteria(3).Type = xlConditionValueHighestValue
    With rr.FormatConditions(1).ColorScaleCriteria(3).FormatColor
        .Color = 8109667
        .TintAndShade = 0
    End With
End Sub
Вместо A1:J10 поставьте ваш диапазон.
Рассчитать годовую норму часов (для мужчин и женщин раздельно) если сотрудника табелируем не с начала года. Формулами. Excel2013. (макросы запрещены), Формулами. Excel2013. (макросы запрещены),
 
Как вариант.

На листе норма создаёте вспомогательные столбцы
- в первом даты с 1 января по 31 декабря
- следующий количество часов в этот день для женщин
- следующий количество часов в этот день для мужчин
при заполнении учитываете праздничные и предпраздничные дни
Далее добавляете столбцы, суммирующие часы от текущей строки до 31 декабря.
Таким образом получаете норму для каждого дня, для каждого режима работы.
С помощью ВПР тяните эти данные на лист июнь.
Норма получена, расходимся )
Изменено: МатросНаЗебре - 15.01.2026 17:20:13
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 298 След.
Наверх