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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 293 След.
ссылки на исходные файлы через формулы, ссылки на исходные файлы через формулы
 
Код
=ВПР(A2;ДВССЫЛ(B11&"B2:E5");4;0)
Распределение суммы по месяцам с помощью формулы, Формула для разброса суммы по месяцам
 
В ячейку D10 вставьте формулу и протяните до ячейки D13:
Код
=D5

В ячейку E10 вставьте формулу и протяните до ячейки Q13:
Код
=$D10-(СУММ($E$4:E$4))

В ячейку E5 вставьте формулу и протяните до ячейки Q8:
Код
=МАКС(0;D10)-МАКС(0;E10)
Суммирование кол-ва ячеек по цвету заливки и текста, Суммирование кол-ва ячеек по заливке и частичному совпадения текста
 
В строке с отметкой "<-     ТУТ"
:D  
Суммирование кол-ва ячеек по цвету заливки и текста, Суммирование кол-ва ячеек по заливке и частичному совпадения текста
 
Понятно, продолжайте наблюдения  :D  
Суммирование кол-ва ячеек по цвету заливки и текста, Суммирование кол-ва ячеек по заливке и частичному совпадения текста
 
Код в Вашем сообщении и код в файле отличается.
Код
Function СуммДДУ(CheckRange As Range, SampleCell As Range) As Long
    Dim cell As Range
    Dim count As Long
    Dim sampleColor As Long
    Dim sampleText As String
    
    ' Получаем цвет заливки и текст эталонной ячейки B2
    sampleColor = SampleCell.Interior.Color
    sampleText = CStr(SampleCell.Value)
    
    count = 0
    
    ' Перебираем каждую ячейку в диапазоне A1:A10
    For Each cell In CheckRange
        ' Проверяем совпадение цвета заливки И текста
        If cell.Interior.Color = sampleColor And (InStr(1, CStr(cell.Value), sampleText, vbTextCompare) > 0) Then '           <- ТУТ
            count = count + 1
        End If
    Next cell
    
    СуммДДУ = count
End Function
График сменности, Вопрос со звездочкой*
 
Написал в личку.
Суммирование кол-ва ячеек по цвету заливки и текста, Суммирование кол-ва ячеек по заливке и частичному совпадения текста
 
Сколько по Вашим расчётам зелёных ячеек, содержащих букву к?
Обрезать строку после второго пробела СПРАВА
 
Код
=СЖПРОБЕЛЫ(ПРАВСИМВ(ПОДСТАВИТЬ(A1;" ";ПОВТОР(" ";СТЕПЕНЬ(10;ЦЕЛОЕ(LOG10(ДЛСТР(A1)))+1)));2*СТЕПЕНЬ(10;ЦЕЛОЕ(LOG10(ДЛСТР(A1)))+1)))
для обработки пробела 160
Код
=СЖПРОБЕЛЫ(ПРАВСИМВ(ПОДСТАВИТЬ(ПОДСТАВИТЬ(A1;СИМВОЛ(160);" ");" ";ПОВТОР(" ";СТЕПЕНЬ(10;ЦЕЛОЕ(LOG10(ДЛСТР(A1)))+1)));2*СТЕПЕНЬ(10;ЦЕЛОЕ(LOG10(ДЛСТР(A1)))+1)))
Изменено: МатросНаЗебре - 28.11.2025 16:37:02
График сменности, Вопрос со звездочкой*
 
Формулами обязательно? Макросом не так громоздко будет.
Изменено: МатросНаЗебре - 28.11.2025 15:19:10
График_дежурства_$ЕСЛИ_И$_, функция ЕСЛИ
 
Код
=ЕСЛИОШИБКА(ЕСЛИОШИБКА(ВПР(C2;$X$3:$Z$7;2;0);ВПР(B2;$X$4:$Z$5;3;0));"")
Скопировать данные во все книги папки
 
Добавьте удаление имён и после копирования листа.
Код
            DeleteNames_IL_PR wb 'копировать формулы без деспетчера имён->продолжене см. Private Sub DeleteNames
            ThisWorkbook.Worksheets("Информация_ИЛ").Cells.Copy wb.Worksheets("Информация_ИЛ").Cells 'копируем все данные с листа
            DeleteNames_IL_PR wb 'копировать формулы без деспетчера имён->продолжене см. Private Sub DeleteNames
Скопировать данные во все книги папки
 
Стало сложно без файла-примера.
как вписать массив в середину фомулы, как вписать массив в середину фомулы
 
Неочевидная сила Excel: константы массивов, которые решат кучу задач
Скопировать данные во все книги папки
 
Код
Set wb = Workbooks.Open(iCl.Value)
DeleteNames wb
...
End Sub

Private Sub DeleteNames(wb As Workbook)
    On Error Resume Next
    Dim nn As Name
    For Each nn In wb.Names
        nn.Delete
    Next
    On Error GoTo 0
End Sub
Скопировать данные во все книги папки
 
Код
Private Function sInitialFileName() As String
    sInitialFileName = ThisWorkbook.Sheets("Прог").Range("G12").Value
    If Right(sInitialFileName, 1) <> "\" Then sInitialFileName = sInitialFileName & "\"
End Function
Подтягивание данных из одного листа в другой
 
Код
=СУММЕСЛИМН(Лист1!C:C;Лист1!$A:$A;$A:$A)
Сводная таблица-отчет, помогите сделать)
 
Пишу в личку.
Сделал. Оплату получил.
Изменено: МатросНаЗебре - 27.11.2025 14:22:28
Скопировать данные в книги по названию из ячеек находящихся в одной папке
 
Эту строку
Код
Set wb = Workbooks.Open(iPath & iCl.Value)
Замените на эту
Код
Set wb = Workbooks.Open(iCl.Value)
Тогда на листе "Груша", в ячейках "A4,O4,S4,W4" ожидается полное имя файла, путь плюс имя.
Альтернативные способы выбора числа по нескольких условиям, Помогите разобраться начинающему нубу
 
Цитата
написал:
Формула Матроса вполне рабочая
Цитата
написал:
неуд ... оценка относилась к поведению на форуме
С обеими оценками согласен. Впредь обещаю)
Структура файлов из 1С в виде таблицы
 
Цитата
написал:
Только значения на кириллице заменил на латиницу в тексте
Если при копировании кода появились нечитаемые символы, то переключите раскладку на русскую.
Структура файлов из 1С в виде таблицы
 
Код
Option Explicit

Sub Преобразовать_активный_лист()
    CloseEmptyWb ""
    RangeJob ActiveSheet.UsedRange, Workbooks.Add(1).Sheets(1).Cells(1, 1)
End Sub

Private Sub RangeJob(rSource As Range, rTarget As Range)
'    Application.ScreenUpdating = False
    Dim Application_Calculation As XlCalculation: Application_Calculation = Application.Calculation: Application.Calculation = xlCalculationManual
    
    CloseEmptyWb rTarget.Parent.Parent.Name
        
    Dim ys As Long, ii As Long
    For ys = 1 To rSource.Rows.Count
        If ii < rSource.Rows(ys).OutlineLevel Then ii = rSource.Rows(ys).OutlineLevel
    Next
    If ii = 0 Then Exit Sub
    
    Dim arr As Variant, xt As Long, xs As Long, jj As Long
    ReDim arr(1 To ii)
    
    For ys = 1 To rSource.Rows.Count
        ii = rSource.Rows(ys).OutlineLevel
        arr(ii) = rSource.Cells(ys, 1).Value
        For jj = ii + 1 To UBound(arr)
            arr(jj) = Empty
        Next
        
        xt = 0
        For ii = 1 To UBound(arr)
            xt = xt + 1
            rTarget.Cells(ys, xt).Value = arr(xt)
        Next
        xs = 1
        Do
            With rSource.Cells(ys, xs).MergeArea
                xs = .Column + .Columns.Count
            End With
            If xs > rSource.Columns.Count Then Exit Do
            
            xt = xt + 1
            rTarget.Cells(ys, xt).Value = rSource.Cells(ys, xs).Value
            
            DoEvents
        Loop
    Next
    rTarget.Parent.UsedRange.EntireColumn.AutoFit

    Application.Calculation = Application_Calculation
    Application.ScreenUpdating = True
End Sub

Private Sub CloseEmptyWb(newName As String)
    Dim wb As Workbook
    For Each wb In Application.Workbooks
        If wb.Path = "" Then
            If wb.Name <> newName Then
                wb.Close False
            End If
        End If
    Next
End Sub
Вопрос по датам
 
Цитата
написал:
тут вопрос стит про целый год
- Кто поставил этот вопрос?
- А он вместе с другими буквами в кладовке лежал.
- Вопрос снять! :D

Либо используйте 12 замен(январь-января, ферваль-февраля,...), либо следуйте совету из сообщения #5 - используйте месяц в именительном падеже.
Вопрос по датам
 
Для месяца
Код
=ПОДСТАВИТЬ(СТРОЧН(ТЕКСТ(ДАТАЗНАЧ(E2&" "&ПОДСТАВИТЬ(H2;"ября";"ябрь")&" "&M2)+1;"ММММ"));"ябрь";"ября")
Для года
Код
=ЗНАЧЕН(ТЕКСТ(ДАТАЗНАЧ(E2&" "&ПОДСТАВИТЬ(H2;"ября";"ябрь")&" "&M2)+1;"ГГГГ"))

*) формулы несколько упростятся, если использовать месяц в именительном падеже "ноябрь", а не "ноября".
Вопрос по датам
 
Код
=ЗНАЧЕН(ТЕКСТ(ДАТАЗНАЧ(E2&" "&ПОДСТАВИТЬ(H2;"ября";"ябрь")&" "&M2)+1;"ДД"))
Вариант названия темы
Как вывести дату при смене месяца, прибавив +1
Перенести данные из открытой книги в закрытую в определенные листы
 
Цитата
написал:
А что если на несколько записей меньше стало?
Вы попробовали, макрос не сделал, как Вы хотели и задали вопрос?
Или просто задали вопрос?

Если первый вариант, попробуйте
Код
Вместо
If cd.Row - 1 <= rr.Row + nRows Then Exit Do
Напишите
If cd.Row <= rr.Row + nRows Then Exit Do
Изменено: МатросНаЗебре - 26.11.2025 15:50:12
Перенести данные из открытой книги в закрытую в определенные листы
 
Код
Option Explicit
 
Sub Копировать_значения_только_в_путь_в_определенной_ячейки()
    Dim rSheets As Range, journalFullname As String, sourceRange As Range
    Set rSheets = ThisWorkbook.Sheets("Подборка").UsedRange.Rows(1)
    journalFullname = ThisWorkbook.Sheets("Расположение").Range("G4").Value
    Set sourceRange = ThisWorkbook.Sheets("Данные").UsedRange
     
    CopyRange rSheets, journalFullname, sourceRange
End Sub
 
Private Sub CopyRange(rSheets As Range, journalFullname As String, sourceRange As Range)
    Dim Application_Calculation As XlCalculation: Application_Calculation = Application.Calculation: Application.Calculation = xlCalculationManual
     
    Dim journal As Workbook
    On Error Resume Next
    Set journal = Workbooks.Open(journalFullname)
    If journal Is Nothing Then
        MsgBox Err.Description, vbExclamation, "Ошибка открытия файла"
    End If
    On Error GoTo 0
    If Not journal Is Nothing Then
        Set rSheets = Intersect(rSheets, rSheets.Parent.UsedRange)
        Set sourceRange = Intersect(sourceRange, sourceRange.Parent.Range("A3").Resize(sourceRange.Parent.UsedRange.Rows.Count, sourceRange.Parent.UsedRange.Columns.Count))
         
        CopyJournal rSheets, journal, sourceRange
        Application.Calculation = Application_Calculation
         
        journal.Close True
    Else
        Application.Calculation = Application_Calculation
    End If
End Sub
 
Private Sub CopyJournal(rSheets As Range, journal As Workbook, sourceRange As Range)
    Dim clSheet As Range, shTarget As Worksheet, rTarget As Range
    For Each clSheet In rSheets.Cells
        On Error Resume Next
        Set shTarget = journal.Worksheets(clSheet.Value)
        On Error GoTo 0
        If Not shTarget Is Nothing Then
            Set rTarget = GetTargetRange(shTarget, sourceRange)
            Set rTarget = rTarget.Resize(sourceRange.Rows.Count, sourceRange.Columns.Count)
            sourceRange.Copy rTarget
            Application.CutCopyMode = False
            rTarget.Value = sourceRange.Value
             
            Set shTarget = Nothing
        End If
    Next
End Sub
 
Private Function GetTargetRange(sh As Worksheet, sourceRange As Range) As Range
    Set GetTargetRange = GetTargetRange_Exists(sh, sourceRange)
    If Not GetTargetRange Is Nothing Then Exit Function
    Set GetTargetRange = GetTargetRange_New(sh)
End Function

Private Function GetTargetRange_Exists(sh As Worksheet, sourceRange As Range) As Range
    Dim yy As Long
    For yy = 2 To sh.UsedRange.Rows.Count
        If sh.Cells(yy, 1).Value = sourceRange.Cells(1, 1).Value Then
        If sh.Cells(yy, 2).Value = sourceRange.Cells(1, 2).Value Then
        If sh.Cells(yy, 3).Value = sourceRange.Cells(1, 3).Value Then
            Set GetTargetRange_Exists = sh.Cells(yy, 1)
            AddRows sh.Cells(yy, 1), sourceRange.Rows.Count
            Exit Function
        End If
        End If
        End If
    Next
End Function

Private Sub AddRows(rr As Range, nRows As Long)
    Dim sh As Worksheet
    Set sh = rr.Parent
    
    Dim cd As Range
    Set cd = rr.End(xlDown)
    If cd.Row >= sh.Rows.Count - 2 Then Exit Sub
    
    Do
        If cd.Row >= rr.Row + nRows Then Exit Do
        cd.EntireRow.Insert
        DoEvents
    Loop
    
    Do
        If cd.Row - 1 <= rr.Row + nRows Then Exit Do
        cd.Cells(0, 1).EntireRow.Delete
        DoEvents
    Loop
End Sub

Private Function GetTargetRange_New(sh As Worksheet) As Range
    Dim cl As Range, yy As Long, ym As Long
    ym = 1
    For Each cl In sh.UsedRange.Rows(sh.UsedRange.Rows.Count + 2).Cells
        yy = cl.End(xlUp).Row + 1
        If ym < yy Then ym = yy
    Next
    Set GetTargetRange_New = sh.Cells(ym, 1)
End Function
Альтернативные способы выбора числа по нескольких условиям, Помогите разобраться начинающему нубу
 
Код
=ОКРУГЛ(0,5*(E10+0,5)-5,5;0)
Аналог без ЕСЛИ.
Перенести данные из открытой книги в закрытую в определенные листы
 
Код
Option Explicit
 
Sub Копировать_значения_только_в_путь_в_определенной_ячейки()
    Dim rSheets As Range, journalFullname As String, sourceRange As Range
    Set rSheets = ThisWorkbook.Sheets("Подборка").UsedRange.Rows(1)
    journalFullname = ThisWorkbook.Sheets("Расположение").Range("G4").Value
    Set sourceRange = ThisWorkbook.Sheets("Данные").UsedRange
     
    CopyRange rSheets, journalFullname, sourceRange
End Sub
 
Private Sub CopyRange(rSheets As Range, journalFullname As String, sourceRange As Range)
    Dim Application_Calculation As XlCalculation: Application_Calculation = Application.Calculation: Application.Calculation = xlCalculationManual
     
    Dim journal As Workbook
    On Error Resume Next
    Set journal = Workbooks.Open(journalFullname)
    If journal Is Nothing Then
        MsgBox Err.Description, vbExclamation, "Ошибка открытия файла"
    End If
    On Error GoTo 0
    If Not journal Is Nothing Then
        Set rSheets = Intersect(rSheets, rSheets.Parent.UsedRange)
        Set sourceRange = Intersect(sourceRange, sourceRange.Parent.Range("A3").Resize(sourceRange.Parent.UsedRange.Rows.Count, sourceRange.Parent.UsedRange.Columns.Count))
         
        CopyJournal rSheets, journal, sourceRange
        Application.Calculation = Application_Calculation
         
        journal.Close True
    Else
        Application.Calculation = Application_Calculation
    End If
End Sub
 
Private Sub CopyJournal(rSheets As Range, journal As Workbook, sourceRange As Range)
    Dim clSheet As Range, shTarget As Worksheet, rTarget As Range
    For Each clSheet In rSheets.Cells
        On Error Resume Next
        Set shTarget = journal.Worksheets(clSheet.Value)
        On Error GoTo 0
        If Not shTarget Is Nothing Then
            Set rTarget = GetTargetRange(shTarget, sourceRange)
            Set rTarget = rTarget.Resize(sourceRange.Rows.Count, sourceRange.Columns.Count)
            sourceRange.Copy rTarget
            Application.CutCopyMode = False
            rTarget.Value = sourceRange.Value
             
            Set shTarget = Nothing
        End If
    Next
End Sub
 
Private Function GetTargetRange(sh As Worksheet, sourceRange As Range) As Range
    Set GetTargetRange = GetTargetRange_Exists(sh, sourceRange)
    If Not GetTargetRange Is Nothing Then Exit Function
    Set GetTargetRange = GetTargetRange_New(sh)
End Function

Private Function GetTargetRange_Exists(sh As Worksheet, sourceRange As Range) As Range
    Dim yy As Long
    For yy = 2 To sh.UsedRange.Rows.Count
        If sh.Cells(yy, 1).Value = sourceRange.Cells(1, 1).Value Then
        If sh.Cells(yy, 2).Value = sourceRange.Cells(1, 2).Value Then
        If sh.Cells(yy, 3).Value = sourceRange.Cells(1, 3).Value Then
            Set GetTargetRange_Exists = sh.Cells(yy, 1)
            Exit Function
        End If
        End If
        End If
    Next
End Function

Private Function GetTargetRange_New(sh As Worksheet) As Range
    Dim cl As Range, yy As Long, ym As Long
    ym = 1
    For Each cl In sh.UsedRange.Rows(sh.UsedRange.Rows.Count + 2).Cells
        yy = cl.End(xlUp).Row + 1
        If ym < yy Then ym = yy
    Next
    Set GetTargetRange_New = sh.Cells(ym, 1)
End Function
Вставить данные с таблицы в протокол
 
Код
Option Explicit

Sub Напечатать_протоколы()
    CloseEmptyWb
    Dim wb As Workbook
    Set wb = ActiveWorkbook
    
    Dim protocols As Object
    Set protocols = GetProtocols(wb.Sheets("Данные"))
    
    Dim protocol_index As Long
    For protocol_index = 1 To protocols.Count - 1
        PrintProtocol protocols, protocol_index, wb.Sheets("Прот")
    Next
End Sub

Private Sub PrintProtocol(protocols As Object, protocol_index As Long, shTemplate As Worksheet)
    shTemplate.Copy
    Dim sh As Worksheet
    Set sh = ActiveSheet
    
    sh.Cells(4, 20).Value = protocols.Keys()(protocol_index)
    
    Dim aHead As Variant, aValu As Variant
    aHead = protocols.Items()(0).Items()(0)
    aValu = protocols.Items()(protocol_index).Items()
    
    Dim yy As Long
    For yy = 0 To UBound(aValu, 1)
        If yy >= 10 Then
            sh.Rows(28 + yy - 1).Copy
            sh.Rows(28 + yy - 1).Insert Shift:=xlDown
            Application.CutCopyMode = False
            sh.Cells(28 + yy, 1).Value = (yy + 1) & "."
        End If
        sh.Cells(28 + yy, 3).Value = aValu(yy)(1, 1)
        sh.Cells(28 + yy, 16).Value = aValu(yy)(1, 2)
        sh.Cells(28 + yy, 23).Value = aValu(yy)(1, 3)
        sh.Cells(28 + yy, 31).Value = aValu(yy)(1, 4)
        sh.Cells(28 + yy, 37).Value = aValu(yy)(1, 5)
    Next
    sh.PrintOut
End Sub

Private Function GetProtocols(sh As Worksheet) As Object
    Dim rr As Range
    Set rr = sh.Cells(1, 1).Resize(sh.UsedRange.Row + sh.UsedRange.Rows.Count - 1, sh.UsedRange.Column + sh.UsedRange.Columns.Count - 1)
    
    Dim rp As Range
    Set rp = rr.Find("Номер протокола")
    
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
    Dim ya As Long, bic As Object, vv As Variant
    For ya = rp.Row To rr.Rows.Count
        vv = rr.Cells(ya, rp.Column).Value
        If Not dic.Exists(vv) Then
            Set dic.Item(vv) = CreateObject("Scripting.Dictionary")
        End If
        Set bic = dic.Item(vv)
        bic.Item(bic.Count) = rr.Cells(ya, 1).Resize(1, rr.Columns.Count).Value
        Set dic.Item(vv) = bic
        Set bic = Nothing
    Next
    Set GetProtocols = 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
Как мне расставить значения из столбца далее по строкам в виде ступенек?, Есть данные в столбец, мне необходимо, чтобы все эти данные шли дальше в виде ступенек
 
Код
=ЕСЛИ(И(ОСТАТ(СЧЁТЕСЛИМН($A$1:$A2;"<>")-1;7)+1=B$1;$A2<>"");$A2;"")
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 293 След.
Наверх