Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Поиск латиници - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Поиск латиници
sergey1978 Дата: Вторник, 17.11.2015, 15:13 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 100% ±

Excel 2010
Добрий день!

Прошу подправить макрос которий копирует строки на другой лист если в ячеке С есть латиница а значение ячейки В неравно 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 часа. Теги поправил.
К сообщению приложен файл: primer.xls (42.0 Kb)


Сообщение отредактировал _Boroda_ - Вторник, 17.11.2015, 15:17
 
Ответить
СообщениеДобрий день!

Прошу подправить макрос которий копирует строки на другой лист если в ячеке С есть латиница а значение ячейки В неравно 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
Дата добавления - 17.11.2015 в 15:13
Karataev Дата: Вторник, 17.11.2015, 23:09 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1342
Репутация: 535 ±
Замечаний: 0% ±

Excel
Макрос анализирует лист "380", результат вставляет на лист2. В начале работы макроса лист2 очищается, начиная со строки 7 и до конца.


Сообщение отредактировал Karataev - Вторник, 17.11.2015, 23:12
 
Ответить
СообщениеМакрос анализирует лист "380", результат вставляет на лист2. В начале работы макроса лист2 очищается, начиная со строки 7 и до конца.

Автор - Karataev
Дата добавления - 17.11.2015 в 23:09
sergey1978 Дата: Среда, 18.11.2015, 11:09 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 100% ±

Excel 2010
Karataev
а как вставить уже закрашений результат, т.е не красить на листе 2
 
Ответить
СообщениеKarataev
а как вставить уже закрашений результат, т.е не красить на листе 2

Автор - sergey1978
Дата добавления - 18.11.2015 в 11:09
Karataev Дата: Среда, 18.11.2015, 11:28 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 1342
Репутация: 535 ±
Замечаний: 0% ±

Excel
Такой возможности нет
 
Ответить
СообщениеТакой возможности нет

Автор - Karataev
Дата добавления - 18.11.2015 в 11:28
sergey1978 Дата: Среда, 18.11.2015, 11:50 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 100% ±

Excel 2010
Karataev
а как сделать закраску если значение ячейки в колонке D = Латиница, то закрасить в строках что ниже латиницу(до первой пустой строки) в колонке С


Сообщение отредактировал sergey1978 - Среда, 18.11.2015, 11:51
 
Ответить
СообщениеKarataev
а как сделать закраску если значение ячейки в колонке D = Латиница, то закрасить в строках что ниже латиницу(до первой пустой строки) в колонке С

Автор - sergey1978
Дата добавления - 18.11.2015 в 11:50
Karataev Дата: Среда, 18.11.2015, 23:29 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 1342
Репутация: 535 ±
Замечаний: 0% ±

Excel
если значение ячейки в колонке D = Латиница

но в файле-примере (пост 1) в столбце D числа. Если у Вас изменилась структура файла, то выложите новый файл.


Сообщение отредактировал Karataev - Среда, 18.11.2015, 23:29
 
Ответить
Сообщение
если значение ячейки в колонке D = Латиница

но в файле-примере (пост 1) в столбце D числа. Если у Вас изменилась структура файла, то выложите новый файл.

Автор - Karataev
Дата добавления - 18.11.2015 в 23:29
sergey1978 Дата: Четверг, 19.11.2015, 10:01 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 21
Репутация: 0 ±
Замечаний: 100% ±

Excel 2010
файл тотже. поиск латиници нужно осущиствить на Листе2(primer.xls) т.е на листе с результатом. Нужно найти в колонке D запись "Латиница",
затем найти первую не пустую строчку и начать закраску латиници в колонке C до первой пустой строчки
 
Ответить
Сообщениефайл тотже. поиск латиници нужно осущиствить на Листе2(primer.xls) т.е на листе с результатом. Нужно найти в колонке D запись "Латиница",
затем найти первую не пустую строчку и начать закраску латиници в колонке C до первой пустой строчки

Автор - sergey1978
Дата добавления - 19.11.2015 в 10:01
SLAVICK Дата: Четверг, 19.11.2015, 13:25 | Сообщение № 8
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Сделал такую функцию - она работает так:
пишете как обычную формулу в отдельную ячейку, и указываете ячейку на которую смотреть, например:
Код
=ColorPattern(C5)


В ячейке С5 - выделятся цветом все Лат. символы, а в ячейке с формулой - эти символы появятся :D
Вот сама функция:
К сообщению приложен файл: primer-2-2015-1.xls (43.5 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Четверг, 19.11.2015, 13:26
 
Ответить
СообщениеСделал такую функцию - она работает так:
пишете как обычную формулу в отдельную ячейку, и указываете ячейку на которую смотреть, например:
Код
=ColorPattern(C5)


В ячейке С5 - выделятся цветом все Лат. символы, а в ячейке с формулой - эти символы появятся :D
Вот сама функция:

Автор - SLAVICK
Дата добавления - 19.11.2015 в 13:25
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!