Цикл по столбцам, если диапазон в столбце содержит строку, примените формулу к первой ячейке в столбце - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть столбцы, которые содержат строки.Я пытаюсь написать макрос, который будет проходить через столбцы и смотреть на строки в столбце, чтобы определить, присутствует ли строка.Если строка присутствует, мне нужно применить формулу к первой ячейке в столбце.Я пробовал несколько разных методов, но не повезло.У меня нет формального обучения VBA, но мне нравится учиться, поэтому я ценю вашу помощь!

Слово, которое я ищу, обычно отображается в строках 4-15, поэтому я специально ищу эти строки, но было бы здорово расширить его.

lastCol = nWs.UsedRange.Column + nWs.UsedRange.Columns.Count - 1••••ˇˇˇˇ
columnLetter = Split(Cells(1, lastCol).Address, "$")(1)

For i = 3 To lastCol
If Range(i & "4:" & i & "15").Value = "name" Then Range(i & "1").Formula = "=1+1"
Next i

Еще одна попытка:

    Set AB = nWs.Range("D1:" & columnLetter & "16").Cells
K = 1
For Each r In AB
    If InStr(1, r.Value, "name") > 0 Then
        Range(K & "1").Formula = "=1+1"
        K = K + 1
    End If
    Next

Это интересно и объясняет проблему диапазона, но результат формулы 1 + 1 не даетпоявляются над столбцами, которые содержат слово «имя».Что происходит в верхней части самого последнего столбца, появляется слово «ложь»: Dim rng As Range

    Set rng = nWs.Range("D1:" & columnLetter & "15")
    For Each cell In rng.Cells
        nWs.Range(columnLetter & "1").Value = IIf(InStr(1, cell, "name"), "=1+1", "False")
    Next

Я считаю, что проблема в том, что я ищу диапазон?Я определенно ценю вашу помощь!

1 Ответ

0 голосов
/ 07 февраля 2019

Вам необходимо обновить имя листа ...

  1. для переменной ws (в настоящее время используется Sheet1) * Переменная 1006 *
  2. LC установлена ​​для использования номера строкиэто поможет вам определить ваш последний использованный столбец (в настоящее время используется Row 2)
  3. LR переменная, установленная для использования индекса столбца, который поможет вам определить вашу последнюю использованную строку (в настоящее время используется Column 1)
  4. текст, который вы пытаетесь найти для переменной FindMe

Каждая строка, которую необходимо обновить, помечена в коде с помощью '<-- UPDATE!


Option Explicit

Sub Col_Hunter()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1") '<-- UPDATE!
Dim LC As Long, LR As Long, i as Long, Found As Range, FindMe As String

LC = ws.Cells(2, ws.Columns.Count).End(xlToLeft).Column '<-- UPDATE!
LR = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row '<-- UPDATE!
FindMe = "name" '<-- UPDATE!

For i = 1 To LC
    Set Found = ws.Range(ws.Cells(2, i), ws.Cells(LR, i)).Find(FindMe)
        If Not Found Is Nothing Then
            ws.Cells(1, i).Formula = "=1+1"
        End If
    Set Found = Nothing
Next i

End Sub

Возможно, вы также захотите обновить некоторые из доступных опций метода Range.Find, который я использую.Вы можете узнать, как это можно настроить в соответствии с вашими потребностями здесь

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