Поиск имени столбца и вставка данных

#excel #vba

#excel #vba

Вопрос:

Я хочу вставить формулу в столбец, выполнив поиск в столбце по его имени.

Мое имя столбца Date1 . Я хочу найти Date1 в своем листе и вставить следующую формулу:

 IF(ISBLANK(B5),"""",IF(ISBLANK(O5)=TRUE,""Missing PSD"",TODAY()-O5))
  

Это должно быть вычислено до последней строки Date1 столбца.

Пожалуйста, поделитесь любыми знаниями, которые у вас есть по этому вопросу, это было бы очень полезно.

 Sub FillFormula()
 Set wb = ActiveWorkbook
 Dim sh As Worksheet, lastRow As Long
 
    Set sh = wb.Worksheets("Sheet1")
    lastRow = sh.Range("O" amp; Rows.count).End(xlUp).Row 'chosen O:O column, being involved in the formula...
    sh.Range("AC5:AC" amp; lastRow).Formula = "=IF(ISBLANK(B5),"""",IF(ISBLANK(O5)=TRUE,""Missing PSD"",TODAY()-O5))"
 
    lastRow2 = sh.Range("R" amp; Rows.count).End(xlUp).Row
    sh.Range("AD5:AD" amp; lastRow).Formula = "=IF(ISBLANK(B5),"""",IF(ISBLANK(R5)=TRUE,""Missing RSD"",TODAY()-R5))"
 
End Sub
  

Это код, который я использую в настоящее время, и он работает правильно, но мои столбцы могут измениться, поэтому я не хочу использовать символ столбца, а вместо этого имя столбца для вставки данных в правильный столбец.

Комментарии:

1. У «Date1» уже есть записи? Должен ли код перезаписывать существующие формулы? В противном случае вычисление последней строки на основе этого столбца будет неправильным…

2. Нет, Date1 пустое

3. Итак, последняя строка должна быть рассчитана в соответствии с содержимым другого столбца. Пожалуйста, проверьте код, который я опубликовал. Он вычисляет последнюю строку на основе столбца O: O, как и в моем предыдущем ответе, поскольку этот столбец участвует в формуле…

Ответ №1:

Попробуйте следующий код, пожалуйста. Он по-прежнему вычисляет последнюю строку на основе столбца O: O. Если в столбце «Date1» уже есть формулы, которые нужно перезаписать, я могу легко адаптировать код для его использования:

 Sub FillFormulaByHeader()
 Dim wb As Workbook, sh As Worksheet, lastRow As Long, celD As Range
 
    Set wb = ActiveWorkbook
    Set sh = wb.Worksheets("Sheet1")
    'Find the header ("Date1"):
    Set celD = sh.Range(sh.Range("A1"), sh.cells(, cells(1, Columns.count).End(xlToLeft).Column)).Find("Date1")
    If celD Is Nothing Then MsgBox "Nu such header could be found...": Exit Sub
    
    lastRow = sh.Range("O" amp; rows.count).End(xlUp).row 'it can be easily changed for column with Date1 header
    sh.Range(sh.cells(5, celD.Column), sh.cells(lastRow, celD.Column)).Formula = _
                "=IF(ISBLANK(B5),"""",IF(ISBLANK(O5)=TRUE,""Missing PSD"",TODAY()-O5))"
End Sub
  

Комментарии:

1. @Rohini Baburaj Разве мой код не решил вашу проблему? Вы нашли время, чтобы протестировать его?

Ответ №2:

Для простоты предположим, что у вас есть заголовки в строке 1. Теперь нам нужно выяснить, в каком столбце находится наше значение Date1. Мы можем сделать это, просто прокручивая диапазон заголовков и проверяя, равно ли значение «Date1». Теперь мы можем использовать эту информацию для построения конечного диапазона.

 Sub FindDate1()

    Dim c As Range
    Dim date1Column as integer
    Dim finalRange As Range

    For Each c In Range("A1:Z1")
        If c.Value = "Date1" Then
            date1Column = c.Column
            Exit For
        End If
    Next c

    If date1Column = 0 Then
        'in case "Date1" was not found
        Exit Sub 
    Else
        Set finalRange = Range(Cells(2, date1Column), Cells(2, date1Column).End(xlDown))
        For Each c In finalRange
            c.Formula = "=IF(ISBLANK(B" amp; c.Row amp; "),"""",IF(ISBLANK(O" amp; c.Row amp; ")=TRUE,""Missing PSD"",TODAY()-O" amp; c.Row amp; "))"
        Next c
    End If
End Sub
  

Комментарии:

1. Как мне установить формулу в этот диапазон? Новичок в VBA, поэтому я не уверен, что делать.

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