Заменить текст в столбце, если заголовок столбца является конкретным текстом

У меня есть отчет, который отображает доступность места проведения против дат (см. Схему ниже)

введите описание изображения здесь

Информация поступает в формате «Полный день / Утро / Послеобеденное время» и, если используется, скажет «Зарезервировано».

Ни одно из мест не используется по воскресеньям, кроме как для настройки. Тем не менее, эти данные все еще поступают в виде данных о доступности в течение целого дня, что мешает вычислениям, используемым для представления отчетов позднее (может показаться, что объекты предложили больше возможностей, чем на самом деле).

У меня уже есть следующие две части кода:

Sub Find_replace()
Range("A:AAA").Select
Selection.Replace What:="Fullday", Replacement:="***Full", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False
End Sub

При этом выполняется поиск ячеек с «Fullday» и заменяется на «*** Full» по всей таблице.

Sub Sunday_widths()
Dim Range1 As Range
Dim Cell1 As Range
Set Range1 = Range("O1:AAA1")
    For Each Cell1 In Range1
        Select Case True
            Case Celll Like "*Sun*"
                Cell1.ColumnWidth = 7.5
        End Select
    Next Cell1
End Sub

Это ищет любой столбец с «Солнцем» в строке 1 и устанавливает ширину столбца на основе этого.

Есть ли способ объединить эти два, так что макрос ищет любой столбец с Sun в верхней строке, выбирает этот столбец и заменяет любой текст «*** Full» на «Set up»?

Большое спасибо заранее!

РЕДАКТИРОВАТЬ:

Sub Sunday_avails()

Dim Range1 As Range
Dim Cell1 As Range
Set Range1 = Range("O1:AAA1")
    For Each Cell1 In Range1
        Select Case True
            Case Celll Like "*Sun*"
                Cell1.EntireColumn.Replace What:="***Full", Replacement:="*Set up", LookAt:=xlPart, _
                SearchOrder:=xlByRows, MatchCase:=False
        End Select
    Next Cell1
End Sub

Всего 2 ответа


Упрощенная альтернатива обходу всех столбцов:

Dim cl1 As Long, cl2 As Long, x As Long

With Sheet1 'Specify your sheet's codename
    cl1 = .Range("1:1").Find("Sun").Column
    cl2 = .Cells(1, .Columns.Count).End(xlToLeft).Column
    For x = cl1 To cl2 Step 7
        .Columns(x).Replace What:="***Full", Replacement:="*Set up"
    Next
End With

Это было бы полезно, если бы вы могли подтвердить, что шаг 7 соответствует вашему макету данных. В любом случае, даже если вышеприведенное не применимо, полезно знать последний использованный столбец, чтобы предотвратить множество ненужных вызовов объекта листа =)


Просто вызовите Replace для .EntireColumn :

Cell1.EntireColumn.Replace What:="***Full", Replacement:="*Set up"...

Добавьте Option Explicit в верхнюю часть модуля, и она поймает опечатку в вашем последнем редактировании:

Case Celll Like "*Sun*"

должно быть

Case Cell1 Like "*Sun*"

Есть идеи?

10000