Добрый день! Есть массив данных на одном листе (3 столбца - RAWDATA) и массив данных на другом листе (1 столбец - LIST). Берем значение в первой ячейке на листе LIST и ищем его на листе RAWDATA, если находим - то красим зеленым, нет - красным и т.д. Написала код, но он отрабатывает только по первой ячейке, помогите, пожалуйста, разобраться.
[vba]
Код
Dim r As Range Dim l As Range
Set r = ThisWorkbook.Sheets("RawData").UsedRange Set l = ThisWorkbook.Sheets("LIST").UsedRange
For j = 1 To r.Rows.Count For i = 1 To l.Rows.Count If l.Cells(i, 1).Value = r.Cells(j, 1).Value Then l.Cells(i, 1).Interior.Color = RGB(190, 245, 116) Else: l(i, 1).Cells.Interior.Color = RGB(227, 38, 54) End If Next i Next j
[/vba]
Добрый день! Есть массив данных на одном листе (3 столбца - RAWDATA) и массив данных на другом листе (1 столбец - LIST). Берем значение в первой ячейке на листе LIST и ищем его на листе RAWDATA, если находим - то красим зеленым, нет - красным и т.д. Написала код, но он отрабатывает только по первой ячейке, помогите, пожалуйста, разобраться.
[vba]
Код
Dim r As Range Dim l As Range
Set r = ThisWorkbook.Sheets("RawData").UsedRange Set l = ThisWorkbook.Sheets("LIST").UsedRange
For j = 1 To r.Rows.Count For i = 1 To l.Rows.Count If l.Cells(i, 1).Value = r.Cells(j, 1).Value Then l.Cells(i, 1).Interior.Color = RGB(190, 245, 116) Else: l(i, 1).Cells.Interior.Color = RGB(227, 38, 54) End If Next i Next j
Надо на листе LIST: 1) Берем первую ячейку на листе LIST и ищем есть ли такое значение на листе RAWDATA, если нет, то красим первую ячейку в красный, если находим, то в зеленый. 2) Берем вторую ячейку на листе LIST..........и т.д.
Надо на листе LIST: 1) Берем первую ячейку на листе LIST и ищем есть ли такое значение на листе RAWDATA, если нет, то красим первую ячейку в красный, если находим, то в зеленый. 2) Берем вторую ячейку на листе LIST..........и т.д.Diana
KuklP, надо на листе LIST: 1) Берем первую ячейку на листе LIST и ищем есть ли такое значение на листе RAWDATA, если нет, то красим первую ячейку в красный, если находим, то в зеленый. 2) Берем вторую ячейку на листе LIST..........и т.д. (извиняюсь за повтор)
KuklP, надо на листе LIST: 1) Берем первую ячейку на листе LIST и ищем есть ли такое значение на листе RAWDATA, если нет, то красим первую ячейку в красный, если находим, то в зеленый. 2) Берем вторую ячейку на листе LIST..........и т.д. (извиняюсь за повтор)Diana987
Словари-массивы нужны в общем случае... особенно если данных много. Массив в котором ищем циклом (одним) заносим в словарь, массив который проверяем циклом (одним) проверяем по словарю. Ну а покраску можно организовать разными способами, в зависимости от количества данных. Если не спешим - можно сразу и красить по одной ячейке, это просто. Но долго.
Файл не смотрел - с работы туда ходу нет.
Да, по примеру - поудаляйте всё лишнее и разместите тут на форуме, если файл больше 100к. И не забывайте, что ещё есть архиваторы. Если в рабочем файле десятки тысяч строк - это не лишне упомянуть в описании задачи, будет влиять на алгоритм решения задачи.
Если файл не появится - придётся тему закрыть...
Словари-массивы нужны в общем случае... особенно если данных много. Массив в котором ищем циклом (одним) заносим в словарь, массив который проверяем циклом (одним) проверяем по словарю. Ну а покраску можно организовать разными способами, в зависимости от количества данных. Если не спешим - можно сразу и красить по одной ячейке, это просто. Но долго.
Файл не смотрел - с работы туда ходу нет.
Да, по примеру - поудаляйте всё лишнее и разместите тут на форуме, если файл больше 100к. И не забывайте, что ещё есть архиваторы. Если в рабочем файле десятки тысяч строк - это не лишне упомянуть в описании задачи, будет влиять на алгоритм решения задачи.
Если файл не появится - придётся тему закрыть...Hugo
У меня на Ваш файлообменник антивирус благим матом орет. [vba]
Код
Public Sub www() Dim r As Range Dim l As Range, i&, j& Set r = ThisWorkbook.Sheets("RawData").UsedRange Set l = ThisWorkbook.Sheets("LIST").UsedRange For j = 2 To r.Rows.Count For i = 1 To l.Rows.Count If l.Cells(i, 1).Value = CLng(r.Cells(j, 1).Value) Then l.Cells(i, 1).Interior.Color = RGB(190, 245, 116) Else If l.Cells(i, 1).Interior.Color = xlNone Then l(i, 1).Cells.Interior.Color = RGB(227, 38, 54) End If End If Next i Next j End Sub
[/vba]
У меня на Ваш файлообменник антивирус благим матом орет. [vba]
Код
Public Sub www() Dim r As Range Dim l As Range, i&, j& Set r = ThisWorkbook.Sheets("RawData").UsedRange Set l = ThisWorkbook.Sheets("LIST").UsedRange For j = 2 To r.Rows.Count For i = 1 To l.Rows.Count If l.Cells(i, 1).Value = CLng(r.Cells(j, 1).Value) Then l.Cells(i, 1).Interior.Color = RGB(190, 245, 116) Else If l.Cells(i, 1).Interior.Color = xlNone Then l(i, 1).Cells.Interior.Color = RGB(227, 38, 54) End If End If Next i Next j End Sub
With CreateObject("Scripting.Dictionary"): .comparemode = 1 a = ThisWorkbook.Sheets("RawData").UsedRange.Value For Each el In a: .Item(el) = 0&: Next a = ThisWorkbook.Sheets("LIST").UsedRange.Columns(1).Value For i = 1 To UBound(a) If .exists(a(i, 1)) Then ThisWorkbook.Sheets("LIST").Cells(i, 1).Interior.Color = RGB(190, 245, 116) Else ThisWorkbook.Sheets("LIST").Cells(i, 1).Interior.Color = RGB(227, 38, 54) End If Next End With
End Sub
[/vba] Как видите после запуска - usedrange не лучший выбор, кроме того влияют форматы чисел. Но это всё решаемо, если нужно решать. Может не нужно?
Смотрю пример.
[vba]
Код
Sub tt() Dim a(), el, i&
With CreateObject("Scripting.Dictionary"): .comparemode = 1 a = ThisWorkbook.Sheets("RawData").UsedRange.Value For Each el In a: .Item(el) = 0&: Next a = ThisWorkbook.Sheets("LIST").UsedRange.Columns(1).Value For i = 1 To UBound(a) If .exists(a(i, 1)) Then ThisWorkbook.Sheets("LIST").Cells(i, 1).Interior.Color = RGB(190, 245, 116) Else ThisWorkbook.Sheets("LIST").Cells(i, 1).Interior.Color = RGB(227, 38, 54) End If Next End With
End Sub
[/vba] Как видите после запуска - usedrange не лучший выбор, кроме того влияют форматы чисел. Но это всё решаемо, если нужно решать. Может не нужно?Hugo
Чего ж сразу не сказали, что надо по всем столбцам? Тогда гораздо лучше использовать метод find. За один проход цикла все раскрасит. Пробуйте, если не получится пишите в тему.
Чего ж сразу не сказали, что надо по всем столбцам? Тогда гораздо лучше использовать метод find. За один проход цикла все раскрасит. Пробуйте, если не получится пишите в тему.KuklP
Ну с НДС и мы чего-то стoим! kuklp60@gmail.com WM Z206653985942, R334086032478, U238399322728
Помогите пожалуйста!!!!!!!!!!!!! мне нужен программный код для для макросов excel. Дана таблица поставок материалов. вписано уже 6 материалов и их значения и даты поставки. Мне нужен код для кнопки "Добавить материал" т.е. чтобы я на нее нажала ввела в открывающее окно данные и они отобразились в таблице.
Если не можете так помочь,то подскажите,есть ли в просторах интернета файл, где перечислены все команды и их значение для программирования в эксель,мне их не найти(( [moder]Читайте Правила форума, создавайте свою тему, прикладывайте файл в Excel Эта тема закрыта
Помогите пожалуйста!!!!!!!!!!!!! мне нужен программный код для для макросов excel. Дана таблица поставок материалов. вписано уже 6 материалов и их значения и даты поставки. Мне нужен код для кнопки "Добавить материал" т.е. чтобы я на нее нажала ввела в открывающее окно данные и они отобразились в таблице.
Если не можете так помочь,то подскажите,есть ли в просторах интернета файл, где перечислены все команды и их значение для программирования в эксель,мне их не найти(( [moder]Читайте Правила форума, создавайте свою тему, прикладывайте файл в Excel Эта тема закрытаКатерина