Заменить текст в столбце, если в заголовке столбца указан текст c - PullRequest
1 голос
/ 27 марта 2020

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

enter image description here

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

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

У меня есть следующее уже есть два фрагмента кода:

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

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

Есть ли способ объединить эти два, так что макрос ищет любой столбец с Солнцем в В верхнем ряду выбирается этот столбец и заменяется любой текст «*** 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 ]

2 голосов
/ 27 марта 2020

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

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 соответствует вашему макету данных. В любом случае, даже если вышеприведенное не применимо, полезно знать последний использованный столбец, чтобы предотвратить множество ненужных вызовов объекта листа =)

2 голосов
/ 27 марта 2020

Просто позвоните Replace на .EntireColumn:

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

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

Case Celll Like "*Sun*"

должно быть

Case Cell1 Like "*Sun*"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...