Это кажется относительно простым и, насколько я понимаю, возможно. Но я не могу понять это или найти именно то, что ищу в Интернете.
У меня есть данные Excel в столбце A, и некоторые из них синие (0,0,255), некоторые красные (255,255,255), некоторые зеленые (0, 140, 0). Я хочу удалить все синие данные.
Мне сказали, что:
Sub test2()
Range("A2").DisplayFormat.Font.Color
End Sub
Дает мне цвета ... но когда я запускаю, он говорит о недопустимом использовании свойства и выделяет .color
Вместо этого я нажал на: Раскрывающийся список цветов шрифта потом больше цветов затем пользовательские цвета то я вижу, что данные, выделенные синим цветом, находятся в (0,0,255)
Итак, я попробовал:
Sub test()
Dim wbk As Workbook
Dim ws As Worksheet
Dim i As Integer
Set wbk = ThisWorkbook
Set ws = wbk.Sheets(1)
Dim cell As Range
With ws
For Each cell In ws.Range("A:A").Cells
'cell.Value = "'" & cell.Value
For i = 1 To Len(cell)
If cell.Characters(i, 1).Font.Color = RGB(0, 0, 255) Then
If Len(cell) > 0 Then
cell.Characters(i, 1).Delete
End If
If Len(cell) > 0 Then
i = i - 1
End If
End If
Next i
Next cell
End With
End Sub
Я нашел это в Интернете как решение в нескольких местах, но когда я запускаю его, кажется, что ничего не происходит.
Это не условное форматирование, оно было скопировано и вставлено из текстового документа. И одна ячейка содержит только один цвет. Например, A1 = синий шрифт, A2 = красный шрифт, A3 = зеленый шрифт, тогда следующие 4 ячейки могут быть синими ... тогда следующие 2 могут быть зелеными ... и т. д.
Я воссоздал это вручную, и ваш макрос сработал для меня, он избавился от любых ячеек с цветом 0,0,255, вы уверены, что лист правильный?
Я думаю, вы неправильно поняли ... цвет фона ячейки белый (без цвета), но текст синий (цвет шрифта).
одинаковый ли цвет шрифта для всех символов ячейки?
@XCELLGUY, одинаковый ли цвет шрифта для всех символов ячейки?
да, это один и тот же цвет для всех символов ячейки





Что-то вроде следующего, когда все подходящие ячейки собираются вместе с помощью Union и удаляются за один раз. При удалении целых строк по отдельности вам всегда нужно выполнять цикл в обратном порядке. Удаление / очистка за один раз более эффективно.
Sub test()
Dim wbk As Workbook, ws As Worksheet
Dim i As Long, currentCell As Range, unionRng As Range
Set wbk = ThisWorkbook
Set ws = wbk.Worksheets("Sheet1")
With ws
For Each currentCell In .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row) '<==assuming actual data present
If currentCell.Font.Color = RGB(0, 0, 255) Then
If Not unionRng Is Nothing Then
Set unionRng = Union(currentCell, unionRng)
Else
Set unionRng = currentCell
End If
End If
Next
End With
If Not unionRng Is Nothing Then unionRng.Delete
End Sub

Прошло некоторое время, но я на самом деле ищу способ удалить десятки тысяч строк одновременно, и большие объединения IIRC могут быть проблематичными и медленными - просто то, что нужно учитывать.
вы можете использовать метод Range объекта Autofilter() с оператором xlFilterFontColor;
Sub test()
With ThisWorkbook.Sheets(1)
With .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
.AutoFilter Field:=1, Criteria1:=RGB(0, 0, 255), Operator:=xlFilterFontColor
If Application.WorksheetFunction.Subtotal(103, .Cells) > 0 Then .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible).ClearContents
End With
.AutoFilterMode = False
If .Range("A1").Font.Color = RGB(0, 0, 255) Then .Range("A1").ClearContents ' check first row, too (which is excluded by AutoFilter)
End With
End Sub
Я не хочу удалять строку ... только текст в ячейке
@XCELLGUY, было бы неплохо с вашей стороны дать хороший отзыв людям, пытающимся вам помочь
Это базовый вариант, если ваши ячейки с синим шрифтом не удаляются, тогда шрифт другого цвета. Измените диапазон в соответствии со своими потребностями.
For Each cel In ActiveSheet.Range("A1:A30")
If cel.Font.Color = RGB(0, 0, 255) Then cel.Delete
Next cel
Обновлено, чтобы позволить пользователю выбрать первую ячейку в столбце с цветом шрифта, получить цвет шрифта и очистить все ячейки, соответствующие цвету шрифта.
Dim rng As Range
Set rng = Application.InputBox("Select a Cell:", "Obtain Range Object", Type:=8)
With ActiveSheet
Dim lr As Long
lr = Cells(Rows.Count, 1).End(xlUp).Row
Dim x As Long
x = rng.Row
For i = lr To x Step -1
If .Cells(i, 1).Font.Color = rng.Font.Color Then .Cells(i, 1).Clear
Next i
End With
Хорошо, это работает ... Мне пришлось добавить «dim cel as range» в начале и изменить «.delete» на «.clearcontents», потому что в противном случае все сдвинулось бы вверх ... и я не хотел этого ... и я изменил диапазон на A: A, потому что я не знаю, сколько строк у меня будет, и он будет отличаться ... Он работает ... но медленно ... вероятно, по причинам, указанным ниже QHarr, но я не мог заставить его работать.
Скопируйте, просто указав базовый код, Delete использовался, потому что он был в вашем вопросе. Я рад, что вы смогли изменить его в соответствии со своими потребностями.
см. дно ... я опубликую окончательный код ... смог использовать фрагмент из предыдущей жизни, который находит последнюю строку, которая значительно быстрее, чем диапазон A: A
Option Explicit
Sub test2()
Dim cel As Range
Dim LR As Long
LR = Cells.Find(What: = "*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
For Each cel In ActiveSheet.Range("A1:A" & LR)
If cel.Font.Color = RGB(0, 0, 255) Then cel.ClearContents
Next cel
End Sub
Вы имеете в виду, что некоторые данные в данной ячейке имеют разные цвета? Кроме того, если применяется к ячейке, это условное форматирование или обычное заполнение?