Прошу подправить макрос которий копирует строки на другой лист если в ячеке С есть латиница а значение ячейки В неравно 0000000000, также макрос длолжен закрашивать латиницу на другом листе. В рабочем файле болше 200000 строк. В примере на листе1 результат роботи макроса, на листе2 как должно бить (Метод перебора колонки не подходит слишком много даних [vba]
Код
Option Explicit
Sub Test() Dim oSht1 As Worksheet, oSht2 As Worksheet, vl, k# Dim i As Long, jLastRow As Long Dim R_data As Variant Dim FinalRow, FinalColumn As Long With ActiveWorkbook For Each vl In .Worksheets If vl.Name Like "380*" Then Set oSht1 = .Sheets(vl.Name) ElseIf vl.Name Like "Лист1" Then Set oSht2 = .Sheets(vl.Name) End If Next oSht1.Activate Range("A1:D1").Select Selection.Copy Sheets("Лист1").Select Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ActiveSheet.Paste With ActiveWindow .SplitColumn = 0 .SplitRow = 1 End With ActiveWindow.FreezePanes = True Range("D3").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "Ошибки на " & Format$(Date, "dd.mm.yyyyг.") Range("D3").Select Selection.Font.Bold = True Columns("B:B").NumberFormat = "@"
FinalRow = oSht1.Cells(Rows.Count, 1).End(xlUp).Row FinalColumn = oSht1.Cells(1, Columns.Count).End(xlToLeft).Column R_data = oSht1.Range(oSht1.Cells(1, 1), oSht1.Cells(FinalRow, FinalColumn)) With oSht2 jLastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 2 .Cells(jLastRow, 4).Font.Bold = True .Cells(jLastRow, 4).Value = "Латиница" oSht1.Activate For i = 2 To FinalRow If R_data(i, 3) Like "*[A-Za-z]*" And R_data(i, 2) <> "0000000000" Then R_data(i, FinalColumn) = Union(Range(Cells(i, 1), Cells(i, 4)), Range(Cells(i, 4), Cells(i, 18))) End If
For k = 1 To Len(Cells(i, 3)) If Mid(R_data(i, 3), k, 1) Like "*[A-Za-z]*" Then .Cells(jLastRow + 1, 3).Characters(Start:=k, Length:=1).Font.Color = -16776961 End If Next Next i oSht2.Cells(jLastRow + 1, 1).Range(oSht2.Cells(1, 1), oSht2.Cells(FinalRow, 4)) = R_data End With End With End Sub
[/vba] [moder]Повторное нарушение п.3 Правил форума в части тегов. Очередное замечание и предупредительный бан 2 часа. Теги поправил.
Добрий день!
Прошу подправить макрос которий копирует строки на другой лист если в ячеке С есть латиница а значение ячейки В неравно 0000000000, также макрос длолжен закрашивать латиницу на другом листе. В рабочем файле болше 200000 строк. В примере на листе1 результат роботи макроса, на листе2 как должно бить (Метод перебора колонки не подходит слишком много даних [vba]
Код
Option Explicit
Sub Test() Dim oSht1 As Worksheet, oSht2 As Worksheet, vl, k# Dim i As Long, jLastRow As Long Dim R_data As Variant Dim FinalRow, FinalColumn As Long With ActiveWorkbook For Each vl In .Worksheets If vl.Name Like "380*" Then Set oSht1 = .Sheets(vl.Name) ElseIf vl.Name Like "Лист1" Then Set oSht2 = .Sheets(vl.Name) End If Next oSht1.Activate Range("A1:D1").Select Selection.Copy Sheets("Лист1").Select Selection.PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _ SkipBlanks:=False, Transpose:=False ActiveSheet.Paste With ActiveWindow .SplitColumn = 0 .SplitRow = 1 End With ActiveWindow.FreezePanes = True Range("D3").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "Ошибки на " & Format$(Date, "dd.mm.yyyyг.") Range("D3").Select Selection.Font.Bold = True Columns("B:B").NumberFormat = "@"
FinalRow = oSht1.Cells(Rows.Count, 1).End(xlUp).Row FinalColumn = oSht1.Cells(1, Columns.Count).End(xlToLeft).Column R_data = oSht1.Range(oSht1.Cells(1, 1), oSht1.Cells(FinalRow, FinalColumn)) With oSht2 jLastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 2 .Cells(jLastRow, 4).Font.Bold = True .Cells(jLastRow, 4).Value = "Латиница" oSht1.Activate For i = 2 To FinalRow If R_data(i, 3) Like "*[A-Za-z]*" And R_data(i, 2) <> "0000000000" Then R_data(i, FinalColumn) = Union(Range(Cells(i, 1), Cells(i, 4)), Range(Cells(i, 4), Cells(i, 18))) End If
For k = 1 To Len(Cells(i, 3)) If Mid(R_data(i, 3), k, 1) Like "*[A-Za-z]*" Then .Cells(jLastRow + 1, 3).Characters(Start:=k, Length:=1).Font.Color = -16776961 End If Next Next i oSht2.Cells(jLastRow + 1, 1).Range(oSht2.Cells(1, 1), oSht2.Cells(FinalRow, 4)) = R_data End With End With End Sub
[/vba] [moder]Повторное нарушение п.3 Правил форума в части тегов. Очередное замечание и предупредительный бан 2 часа. Теги поправил.sergey1978
Макрос анализирует лист "380", результат вставляет на лист2. В начале работы макроса лист2 очищается, начиная со строки 7 и до конца.
[vba]
Код
Sub Макрос1()
Dim shSrc As Worksheet, shRes As Worksheet Dim arrSrc(), arrRes() Dim lr As Long, i As Long, j As Long, r As Long
Application.ScreenUpdating = False
Set shSrc = Worksheets("380") Set shRes = Worksheets("Лист2")
If shRes.UsedRange.Row + shRes.UsedRange.Rows.Count - 1 >= 7 Then shRes.Rows("7:" & shRes.UsedRange.Row + shRes.UsedRange.Rows.Count - 1).Delete End If
For i = 2 To UBound(arrSrc, 1) If arrSrc(i, 2) <> "0000000000" And arrSrc(i, 3) Like "*[A-Zaz]*" Then r = r + 1 For j = 1 To 4 arrRes(r, j) = arrSrc(i, j) Next End If Next
If r = 0 Then Application.ScreenUpdating = True MsgBox "Готово!", vbInformation Exit Sub End If
shRes.Range("A7").Resize(r, 4).Value = arrRes()
For i = 1 To r For j = 1 To Len(arrRes(i, 3)) If Mid(arrRes(i, 3), j, 1) Like "[A-Za-z]" Then shRes.Cells(i + 6, "C").Characters(j, 1).Font.Color = -16776961 End If Next Next
Application.ScreenUpdating = True
MsgBox "Готово!", vbInformation
End Sub
[/vba]
Макрос анализирует лист "380", результат вставляет на лист2. В начале работы макроса лист2 очищается, начиная со строки 7 и до конца.
[vba]
Код
Sub Макрос1()
Dim shSrc As Worksheet, shRes As Worksheet Dim arrSrc(), arrRes() Dim lr As Long, i As Long, j As Long, r As Long
Application.ScreenUpdating = False
Set shSrc = Worksheets("380") Set shRes = Worksheets("Лист2")
If shRes.UsedRange.Row + shRes.UsedRange.Rows.Count - 1 >= 7 Then shRes.Rows("7:" & shRes.UsedRange.Row + shRes.UsedRange.Rows.Count - 1).Delete End If
For i = 2 To UBound(arrSrc, 1) If arrSrc(i, 2) <> "0000000000" And arrSrc(i, 3) Like "*[A-Zaz]*" Then r = r + 1 For j = 1 To 4 arrRes(r, j) = arrSrc(i, j) Next End If Next
If r = 0 Then Application.ScreenUpdating = True MsgBox "Готово!", vbInformation Exit Sub End If
shRes.Range("A7").Resize(r, 4).Value = arrRes()
For i = 1 To r For j = 1 To Len(arrRes(i, 3)) If Mid(arrRes(i, 3), j, 1) Like "[A-Za-z]" Then shRes.Cells(i + 6, "C").Characters(j, 1).Font.Color = -16776961 End If Next Next
Karataev а как сделать закраску если значение ячейки в колонке D = Латиница, то закрасить в строках что ниже латиницу(до первой пустой строки) в колонке С
Karataev а как сделать закраску если значение ячейки в колонке D = Латиница, то закрасить в строках что ниже латиницу(до первой пустой строки) в колонке Сsergey1978
Сообщение отредактировал sergey1978 - Среда, 18.11.2015, 11:51
файл тотже. поиск латиници нужно осущиствить на Листе2(primer.xls) т.е на листе с результатом. Нужно найти в колонке D запись "Латиница", затем найти первую не пустую строчку и начать закраску латиници в колонке C до первой пустой строчки
файл тотже. поиск латиници нужно осущиствить на Листе2(primer.xls) т.е на листе с результатом. Нужно найти в колонке D запись "Латиница", затем найти первую не пустую строчку и начать закраску латиници в колонке C до первой пустой строчкиsergey1978
Сделал такую функцию - она работает так: пишете как обычную формулу в отдельную ячейку, и указываете ячейку на которую смотреть, например:
Код
=ColorPattern(C5)
В ячейке С5 - выделятся цветом все Лат. символы, а в ячейке с формулой - эти символы появятся Вот сама функция:
[vba]
Код
Function ColorPattern(r As Range) As String Dim s$, i&, ss$ s = r.Value If Left(r.Formula, 1) = "=" Then Exit Function For i = 1 To Len(s) If Mid(s, i, 1) Like "[A-Za-z]" Then r.Characters(i, 1).Font.Color = -16776961: ss = ss & Mid(s, i, 1) Else r.Characters(i, 1).Font.Color = 0 End If Next i ColorPattern = ss End Function
[/vba]
Сделал такую функцию - она работает так: пишете как обычную формулу в отдельную ячейку, и указываете ячейку на которую смотреть, например:
Код
=ColorPattern(C5)
В ячейке С5 - выделятся цветом все Лат. символы, а в ячейке с формулой - эти символы появятся Вот сама функция:
[vba]
Код
Function ColorPattern(r As Range) As String Dim s$, i&, ss$ s = r.Value If Left(r.Formula, 1) = "=" Then Exit Function For i = 1 To Len(s) If Mid(s, i, 1) Like "[A-Za-z]" Then r.Characters(i, 1).Font.Color = -16776961: ss = ss & Mid(s, i, 1) Else r.Characters(i, 1).Font.Color = 0 End If Next i ColorPattern = ss End Function