Страницы: 1
RSS
УМЕНЬШЕНИЕ шрифта в определёнен строках
 
здраствуйте,
есть много листов, одинаковые но разные данные. в некоторых листах присутствует Retek PO No:с началом цифр 460-ххххх, строки с этим ПО надо уменьшить если они присутствуют с этом листе.
так же если не сложно вам помочь .надо каждое PO разделит и в Qty под каждым PO поставить сумму.
ЗАРАНИЕ ВСЕМ СПАСИБО КТО ПОМОЖЕТ
 
Здравствуйте!
Можно так

Код
Sub ПРОМЕЖУТОЧНЫЕ_ИТОГИ()
    Dim WS_Count As Integer, i As Integer, r As Range, rng As Range, lr As Long
    WS_Count = ActiveWorkbook.Worksheets.Count
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.Pattern = "460-"
    For i = 1 To WS_Count
        With ActiveWorkbook.Worksheets(i)
            lr = .Cells(Rows.Count, 3).End(xlUp).Row
            For Each r In .Range("C1:C" & lr)
                If objRegExp.Test(r) Then If rng Is Nothing Then Set rng = .Rows(r.Row) Else Set rng = Union(rng, .Rows(r.Row))
            Next r
            If Not rng Is Nothing Then rng.Font.Size = 8
            .Range("B1:F" & lr).Subtotal GroupBy:=2, Function:=xlSum, TotalList:=Array(5), Replace:=True, PageBreaks:=False, SummaryBelowData:=True
        End With
    Set rng = Nothing
    Next i
End Sub
Изменено: Msi2102 - 24.11.2021 10:36:30
 
БОЛЬШОЕ ВАМ СПАСИБО. ПРОВЕРИЛ ВСE РАБОТАЕТ. Я делал все опциями эксцела но это долго если много листов а тут нажал и готово. была проблема не могу поменять шрифт,
СПАСИБО
Изменено: Aleksejs Bogdanovs - 24.11.2021 11:29:08
 
здраствуйте, снова.
показал своим коллегам и они попросили , чтобы после каждого "------- Итог" добавить пустую строку и удалить "------- Итог".
я удалил "------- Итог" с помощью поиска замены на пробел а вот после него добавить пустую строку не получается
 
Так?
Код
Sub ПРОМЕЖУТОЧНЫЕ_ИТОГИ()
    Dim WS_Count As Integer, i As Integer, r As Range, rng As Range, lr As Long
    WS_Count = ActiveWorkbook.Worksheets.Count
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.IgnoreCase = True
    For i = 1 To WS_Count
        With ActiveWorkbook.Worksheets(i)
            lr = .Cells(Rows.Count, 3).End(xlUp).Row
            objRegExp.Pattern = "460-"
            For Each r In .Range("C1:C" & lr)
                If objRegExp.Test(r) Then If rng Is Nothing Then Set rng = .Rows(r.Row) Else Set rng = Union(rng, .Rows(r.Row))
            Next r
            If Not rng Is Nothing Then rng.Font.Size = 8
            .Range("B1:F" & lr).Subtotal GroupBy:=2, Function:=xlSum, TotalList:=Array(5), Replace:=True, PageBreaks:=False, SummaryBelowData:=True
            Set rng = Nothing
            lr = .Cells(Rows.Count, 3).End(xlUp).Row
            objRegExp.Pattern = "итог"
            For Each r In .Range("C1:C" & lr)
                If objRegExp.Test(r) Then If rng Is Nothing Then Set rng = r Else Set rng = Union(rng, r)
            Next r
            If Not rng Is Nothing Then rng = "Итог": rng.Offset(1, 0).EntireRow.Insert
'''''''''''' закомментировать строку выше и раскомментировать ниже если нужно удалить "Итог" совсем
'            If Not rng Is Nothing Then rng.Clear: rng.Offset(1, 0).EntireRow.Insert
            Set rng = Nothing
        End With
    Next i
End Sub
 
извините за назойливость и простите за мое безграмотность. я пытался разобраться в вашем макросом и попытался по копии вашего сделать свой, там где значение итога в столбце F, поставить это значение жирным и посередине ячейки. не получается-в чем ошибка и как надо подскажите пожалуйста,
Код
Sub sort()
    Dim WS_Count As Integer, i As Integer, r As Range, rng As Range, lr As Long
    WS_Count = ActiveWorkbook.Worksheets.Count
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.IgnoreCase = True
    For i = 1 To WS_Count
        With ActiveWorkbook.Worksheets(i)

lr = .Cells(Rows.Count, 6).End(xlUp).Row
            objRegExp.Pattern = ("\d+")  'так становится все полужирным а если конкретное число то работает
            For Each r In .Range("F1:F" & lr)
            If objRegExp.Test(r) Then If rng Is Nothing Then Set rng = .Rows(r.Row) Else Set rng = Union(rng, .Rows(r.Row))
            Next r
           
            
            
           If Not rng Is Nothing Then rng.Font.Bold = True  'это делает полужирным а как добавить выравнивание по центру?
           
       Set rng = Nothing
       
        End With
        
    Next i
    
End Sub
Изменено: Aleksejs Bogdanovs - 26.11.2021 03:14:25
 
Aleksejs Bogdanovs, Если вам надо на всех листах значение ПОСЛЕДНЕГО Итого в столбце F выделить жирным и поставить по центру, то так (почитайте зелёные комментарии)

Код
Sub Test()
    Dim i As Long, LastRow As Long
    
    'цикл по всем листам в активной книге
    For i = 1 To ActiveWorkbook.Worksheets.Count
        'с очередным листом делаем (от 1 до кол-ва листов в файле)
        With ActiveWorkbook.Worksheets(i)
            'ищем последнюю заполненную строку в столбце F
            LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row
            'проверяем, что в столбце С написано слово "Итог", тогда делаем ниже
            If .Cells(LastRow, "C") = "Итог" Then
                'делаем шрифт жирным
                .Cells(LastRow, "F").Font.Bold = True
                'выравниваем значение ячейки по горизонтали
                .Cells(LastRow, "F").HorizontalAlignment = xlCenter
            End If
        End With
    Next i
    MsgBox "Конец", vbInformation, ""
End Sub


Если же вам нужно сделать все цифры Итого жирными и выравнять их по центру (а не только последнего Итог), то вот так  (почитайте зелёные комментарии)

Код
Sub Test2()
    Dim i As Long, Rng As Range, firstAddress As String
    
    'цикл по всем листам в активной книге
    For i = 1 To ActiveWorkbook.Worksheets.Count
        'с очередным листом делаем (от 1 до кол-ва листов в файле)
        With ActiveWorkbook.Worksheets(i)
            'производим поиск слова "Итог" в столбце С (3-й столбец)
            Set Rng = .Columns(3).Find("Итог", , xlFormulas, xlWhole)
            'если где-то нашли слово "Итог", то
            If Not Rng Is Nothing Then
                'запоминаем адрес ячейки первого найденного слова "Итог"
                firstAddress = Rng.Address
                'начало цикла поиска
                Do
                    'делаем шрифт жирным в столбце F найденного значени Итог
                    .Cells(Rng.Row, "F").Font.Bold = True
                    'выравниваем значение ячейки по горизонтали
                    .Cells(Rng.Row, "F").HorizontalAlignment = xlCenter
                    'производим следующий поиск слова "Итог" в столбце С (3-й столбец)
                    Set Rng = .Columns(3).FindNext(Rng)
                    'производим цикл поиска по столбцу "С" пока поиск не приведёт нас к первой найденной ячейки Итог
                Loop Until Rng.Address = firstAddress
            End If
        End With
    Next i 'переходим к другому листу
    MsgBox "Конец", vbInformation, ""
End Sub
Изменено: New - 26.11.2021 11:21:54
 
Так?
Код
Sub ПРОМЕЖУТОЧНЫЕ_ИТОГИ()
    Dim WS_Count As Integer, i As Integer, r As Range, rng As Range, lr As Long
    WS_Count = ActiveWorkbook.Worksheets.Count
    Set objRegExp = CreateObject("VBScript.RegExp")
    objRegExp.IgnoreCase = True
    For i = 1 To WS_Count
        With ActiveWorkbook.Worksheets(i)
            lr = .Cells(Rows.Count, 3).End(xlUp).Row
            objRegExp.Pattern = "460-"
            For Each r In .Range("C1:C" & lr)
                If objRegExp.Test(r) Then If rng Is Nothing Then Set rng = .Rows(r.Row) Else Set rng = Union(rng, .Rows(r.Row))
            Next r
            If Not rng Is Nothing Then rng.Font.Size = 8
            .Range("B1:F" & lr).Subtotal GroupBy:=2, Function:=xlSum, TotalList:=Array(5), Replace:=True, PageBreaks:=False, SummaryBelowData:=True
            Set rng = Nothing
            lr = .Cells(Rows.Count, 3).End(xlUp).Row
            objRegExp.Pattern = "итог"
            For Each r In .Range("C1:C" & lr)
                If objRegExp.Test(r) Then If rng Is Nothing Then Set rng = r Else Set rng = Union(rng, r)
            Next r
            If Not rng Is Nothing Then rng.Offset(0, 3).Font.Bold = True: rng.Clear: rng.Offset(1, 0).EntireRow.Insert
            Set rng = Nothing
        End With
    Next i
End Sub
 
доброе утро всем, и большое спасибо за ответы и особенно за пояснения. буду все пробивать , анализировать и учиться.   еще раз большое спасибо
Страницы: 1
Наверх