Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Динохромный


Contributor


Сообщения: 712
Благодарности: 322

Профиль | Отправить PM | Цитировать


Цитата blackeangel:
Если нет совпадения, но есть совпадение, то надо чтоб добавлял текст в ячейку и красил её в красный. »
Школьный учитель физики утверждала, что "грамотно записанные условия задачи и чертеж - это ровно половина от решения задачи". Неоднократно убеждался, что это верное утверждение.
Цитата blackeangel:
Ncolumn1 = Columns(1) »
Вы скопировали в переменную типа Variant значения ячеек всего столбца (то есть 1048576 штук, в основном - пустые). И пытаетесь потом использовать эту переменную в конструкции Cells(i, Ncolumn1) - у меня она закономерно выдает ошибку (т.к. Ncolumn1 должно быть целым числом, а не полупустым массивом текста). Неужели у вас это работает?
Цитата blackeangel:
надо чтоб добавлял текст в ячейку и красил её в красный. »
Если добавлять текст к существующей ячейке, то теряется форматирование цвета символов (то что уже выкрашено зеленым за предыдущие проходы). Можно конечно запоминать это форматирование и затем восстанавливать. Проще вставить между вашими столбцами еще один пустой столбец и записывать красный текст в него в отдельную ячейку.

Интуитивно мне кажется, что вам нужен код по мотивам кода ниже. Перелопачивать весь ваш код смысла не вижу, ибо конечный результат не ясен. Подправил в объеме, достаточном для того чтобы не выбрасывал ошибок.
Код: Выделить весь код
Sub cehout_2()
    'Application.ScreenUpdating = False
    massceh = Sheets("коды").Cells(1, 1).CurrentRegion.Value
    ActiveSheet.Columns(2).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    'arrlist = Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(1, 1).End(xlDown))
    
    '    Ncolumn1 = Columns(1)
    '    Ncolumn2 = Columns(2)
    For i = 1 To Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(1, 1).End(xlDown)).Rows.Count
        For j = LBound(massceh) To UBound(massceh)
            If InStr(1, Cells(i, 3), massceh(j, 1)) > 0 Then
                If InStr(Cells(i, 1), massceh(j, 2)) > 0 Then
                    intFoundPosition = InStr(1, Cells(i, 1), massceh(j, 2))
                    Do While intFoundPosition > 0
                        Cells(i, 1).Characters(intFoundPosition, Len(massceh(j, 2))).Font.Color = -11489280 'зелёный
                        intFoundPosition = InStr(intFoundPosition + 1, Cells(i, 1), massceh(j, 2), vbTextCompare)
                    Loop
                Else
                    Cells(i, 2).Value = Cells(i, 2).Value & "-" & massceh(j, 2)
                    Cells(i, 2).Font.ColorIndex = 3
                End If
            End If
        Next j
    Next i
    'Application.ScreenUpdating = True
End Sub

Отправлено: 16:27, 02-02-2018 | #2