Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/48: Рейтинг темы: голосов - 48, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 18
1

Удалить в Excel текст определенного цвета

06.07.2015, 15:16. Показов 9860. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите как в Excel удалить текст только определенного цвета (красный: 255). То есть в ячейке может быть целое предложение, но только одно слово будет выделено красным. И именно это слово нужно удалить. Спасибо заранее!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2015, 15:16
Ответы с готовыми решениями:

Удалить из RE символы определенного цвета
Здравствуйте!!! Существует ли возможность удалить из RichEdit'a символы, которые были выделены,...

RichTextBox. Добавить новый текст определенного цвета
Добрый день, собственно интересует такой вопрос. Запилил небольшой логгер для приложения...

Функция подсчета ячеек в диапазоне, если она определенного цвета и в ней есть определенный текст
Нужна функция счета ячеек в диапазоне если она определенного цвета и в ней есть определенный текст....

Как удалить текст до определенного символа
Доброго времени суток, друзья Подскажите как возможно решить такие задачи через VBA: Есть...

18
5613 / 1596 / 415
Регистрация: 23.12.2010
Сообщений: 2,393
Записей в блоге: 1
06.07.2015, 15:55 2
Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub Удалить_красные_буквы()
    Dim i%
    With ActiveCell
        For i = .Characters.Count To 1 Step -1
            With .Characters(Start:=i, Length:=1)
                If .Font.Color = vbRed Then .Delete
            End With
        Next i
    End With
End Sub
2
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 18
06.07.2015, 15:57  [ТС] 3
Угоо, спасибо. А как сделать так чтобы этот макрос обработал весь лист и удалил везде?
0
15151 / 6424 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
06.07.2015, 16:00 4
Лучший ответ Сообщение было отмечено oriss как решение

Решение

Работает с выделенным диапазоном. Можно выделять целые столбцы, строки, весь лист.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Oriss()
Dim i&, j&, c As Range
  For Each c In Selection.SpecialCells(xlCellTypeConstants, xlTextValues)
    For i = c.Characters.Count To 1 Step -1
      If c.Characters(i, 1).Font.Color = vbRed Then
        If j = 0 Then j = i
      ElseIf j Then
        c.Characters(i + 1, j - i).Delete
        j = 0
      End If
    Next
    If j Then c.Characters(i + 1, j - 1).Delete: j = 0
  Next
End Sub
1
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 18
06.07.2015, 16:28  [ТС] 5
Спасибо огромнейшее!!

Добавлено через 25 минут
Странно, в некоторых случаях вылетает ошибка. Приложил файлик, в котором не хочет работать.

Добавлено через 43 секунды
Вот файл.

Хмм...почему-то не выкладывается файл
0
Модератор
Эксперт MS Access
12084 / 4944 / 791
Регистрация: 07.08.2010
Сообщений: 14,521
Записей в блоге: 4
06.07.2015, 16:32 6
зазипуйте файл перед выкладыванием на форум
1
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 18
06.07.2015, 16:34  [ТС] 7
Размер был большой)
Вложения
Тип файла: xls TEST.xls (44.5 Кб, 7 просмотров)
0
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 18
06.07.2015, 16:35  [ТС] 8
Приложил ниже файлик в котором выскакивает ошибка. Если еще есть желание, посмотрите плиз)
0
Модератор
Эксперт MS Access
12084 / 4944 / 791
Регистрация: 07.08.2010
Сообщений: 14,521
Записей в блоге: 4
06.07.2015, 16:41 9
мало удалить цвет
видимо надо сохранить разметку(красным выделены теги разметки)

1. InSites Consulting is obliged to keep secret the private data of this study's participant vis-?-vis third parties, as is described in the privacy policy. This privacy policy can be read at http://www.insites-consulting.com/privacy/english.
2. E-mail addresses, contact details and/or personal information of participants in this study may not be saved and/or used without explicit consent. By accepting these participation conditions, the participant hereby expressly confirms his/her consent to the processing of the personal data that he/she communicates.
3. The participant gives to InSites Consulting all rights, intellectual property rights (incl. author rights) on ideas, information, product concepts, uploaded material (films, music) which are shared in this study, and accepts that InSites, and possibly its customers, can use these in any form, for the full legal duration of the rights, and on a global scale, without owing any kind of compensation to the participant(s). Anyone judging that his/her rights have been damaged by whatever content used in this study, can contact InSites.
4. The opinions and viewpoints shared in this study will be included in the research results concerning the product/study subject of the discussion.
5. The participant to this study agrees to keep confidential all data and information (s)he is informed of during and / or at the occasion of his/her participation in this discussion.
6. The participant explicitly guarantees that he will not publish this information or data, nor give a third party access to it, nor publish nor reproduce it or utilize it in any other way.
7. Only information which the participant might also obtain rightfully via another way than through participation in this study or which is public knowledge is not included in this confidentiality obligation.
8. The obligation is irrevocable and remains valid as long as the information should be considered to be confidential and has therefore not been made public by the people authorized to do so.
9. The participant is personally responsible for infringements on copyright or personality rights (e.g. uploading films or music which fall under the author/personality rights), even when this is done in good faith. In such a case the participant (i.e. the person who made the material available) will be held responsible for paying a compensation.
10. The participant shall not add content or material to the study community which is or could be inappropriate, illegal, harmful etc. InSites reserves the right to remove such content or material immediately and without explanation.
11. If a reward program is associated with a research study, the statements mentioned in the InSites Consulting Incentive System do apply. The reward program is only accessible for active participants. The reward program is not accessible for personnel members of InSites Consulting. InSites Consulting reserves the right to refuse persons access to this reward program. Only individuals may register. By participating in a research study of InSites Consulting, each participant accepts the InSites Consulting Incentive System statements, and any possible decision of InSites Consulting. The complete rules can be read at: http://www.insites-consulting.... ve/english.
1
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 18
06.07.2015, 16:45  [ТС] 10
Нет, разметка не нужна. нужно просто удалить все символы красного цвета
0
Модератор
Эксперт MS Access
12084 / 4944 / 791
Регистрация: 07.08.2010
Сообщений: 14,521
Записей в блоге: 4
06.07.2015, 16:56 11
тогда получите единый кусок без цифр(порядковых номеров)

InSites Consulting is obliged to keep secret the private data of this study's participant vis-?-vis third parties, as is described in the privacy policy. This privacy policy can be read at http://www.insites-consulting.com/privacy/english. E-mail addresses, contact details and/or personal information of participants in this study may not be saved and/or used without explicit consent. By accepting these participation conditions, the participant hereby expressly confirms his/her consent to the processing of the personal data that he/she communicates. The participant gives to InSites Consulting all rights, intellectual property rights (incl. author rights) on ideas, information, product concepts, uploaded material (films, music) which are shared in this study, and accepts that InSites, and possibly its customers, can use these in any form, for the full legal duration of the rights, and on a global scale, without owing any kind of compensation to the participant(s). Anyone judging that his/her rights have been damaged by whatever content used in this study, can contact InSites.
1
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 18
06.07.2015, 17:47  [ТС] 12
Да, верно. Так и нужно. Только мне нужен код для этого)

Добавлено через 49 минут
Выдает ошибку на строке c.Characters(i + 1, j - i).Delete
0
Модератор
Эксперт MS Access
12084 / 4944 / 791
Регистрация: 07.08.2010
Сообщений: 14,521
Записей в блоге: 4
06.07.2015, 18:01 13
ошибка выдается даже на c.Characters(i , 1).Delete
если длина текста более 255 символов

-
1
5613 / 1596 / 415
Регистрация: 23.12.2010
Сообщений: 2,393
Записей в блоге: 1
06.07.2015, 18:03 14
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Удалить_красные_буквы_во_всех_ячейках_активного_листа()
    Dim i%, c As Range
    For Each c In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues)
        With c
            For i = .Characters.Count To 1 Step -1
                With .Characters(Start:=i, Length:=1)
                    If .Text <> " " Then ' Не удаляем красные пробелы
                        If .Font.Color = vbRed Then .Delete
                    End If
                End With
            Next i
        End With
    Next
End Sub
Мой вариант на тесте 1 тоже не срабатывает.
Наверное слишком длинный текст.
Такие тексты надо не в Excel , а в Word обрабатывать.
1
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 18
06.07.2015, 18:15  [ТС] 15
Да тоже подумал что из-за длины текста.
0
Модератор
Эксперт MS Access
12084 / 4944 / 791
Регистрация: 07.08.2010
Сообщений: 14,521
Записей в блоге: 4
06.07.2015, 18:20 16
Лучший ответ Сообщение было отмечено oriss как решение

Решение

у меня получилось только так(для ячейки с1)

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub Oriss3()
Dim i, j, cw As Range, i1n, jc, ss
j = 0
'  For Each c In Selection.SpecialCells(xlCellTypeConstants, xlTextValues)
  Set cw = Range("c1").Cells(1, 1)
  ss = ""
    i1n = cw.Characters.Count
    Debug.Print "in="; i1n, cw.Address
       'i1n = 255
    For i = 1 To i1n
    jc = cw.Characters(i, 1).Font.Color
    
      If jc = vbRed Then
      j = j + 1
      Else
      ss = ss & cw.Characters(i, 1).Text
         
      End If
     
    Next
    Debug.Print Len(ss)
    cw.Value = ss
    cw.Font.Color = vbBlack
 '   Next
  Debug.Print i1n, j
    Debug.Print i1n, j
End Sub
1
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 18
06.07.2015, 18:52  [ТС] 17
Да, сработало. А можно как-то это сделать для всех ячеек?
0
5613 / 1596 / 415
Регистрация: 23.12.2010
Сообщений: 2,393
Записей в блоге: 1
07.07.2015, 09:35 18
Лучший ответ Сообщение было отмечено oriss как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Удалить_красные_буквы_во_всех_ячейках_активного_листа() ' >255 символов
    Dim i%, ss$, c As Range
    For Each c In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants, xlTextValues)
        With c
            ss = ""
            For i = 1 To .Characters.Count
                With .Characters(Start:=i, Length:=1)
                     If .Font.Color <> vbRed Or .Text = " " Then ss = ss & .Text
                End With
            Next i
            .Value = ss
            .Font.Color = vbBlack
        End With
    Next
End Sub
Работает медленно. В Word - в 100 раз быстрее.
1
0 / 0 / 0
Регистрация: 08.04.2014
Сообщений: 18
07.07.2015, 10:13  [ТС] 19
Спасибо большое за помощь. Да, попробовал запустить этот код на большом объеме информации и он работает уже очень долго)) Действительно будет быстрее перенести в Word. Всем спасибо, буду считать вопрос решенным.
0
07.07.2015, 10:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2015, 10:13
Помогаю со студенческими работами здесь

Удалить текст после определенного символа
Здравствуйте! Есть текст: &quot;111; 222; 333; 444; 555; 666; 777&quot; Нужно сделать так, что бы при...

Удалить текст после первого определённого символа
Добрый день! Напишите пожалуйста макрос который удаляет текст после первого определённого...

Как удалить текст с конца строки до определенного символа?
Здравствуйте, как удалить текст с конца строки до определенного символа?Заранее спасибо

Как удалить текст из textbox после определенного количества?
Здравствуйте! Имеется строка: 1234567890asd123456kkowq123455 Из неё нужно удалить всё, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru