Как разместить формулу в первой пустой ячейке столбца F? - PullRequest
0 голосов
/ 25 сентября 2019

Как разместить формулу в первой пустой ячейке столбца F?

F3 - пустая ячейка.Потребность в этой пустой ячейке должна быть =F2

Примечание. Я ищу код для поиска первой пустой ячейки F, и мне нужно иметь возможность вставить в первую пустую ячейку =F3.

Sample Data

В настоящее время работает со следующим кодом , скопированным отсюда

Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
Dim currentRowValue As String

sourceCol = 6   'column F has a value of 6
rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row

'for every row, find the first blank cell and select it
For currentRow = 1 To rowCount
    currentRowValue = Cells(currentRow, sourceCol).Value
    If IsEmpty(currentRowValue) Or currentRowValue = "" Then
        Cells(currentRow, sourceCol).Select
        Exit For 'This is missing...
    End If
Next

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Ваш существующий код подразумевает, что вы действительно хотите учитывать пустые ячейки и ячейки, которые содержат пустую строку (или формулу, которая возвращает пустую строку) Примечание 1 .(Учитывая, что вы просто скопировали этот код из другого места, это может быть не так)

Вы можете использовать End(xlDown), чтобы найти первую действительно пустую ячейку, или Match, чтобы найти первую «пустую» ячейку вдиапазон (либо просто пустая строка, либо пустые строки, либо пустые ячейки в разных формах)

Если вы хотите найти первую действительно пустую ячейку, ячейку или , содержащую пустую строку:

Function FindFirstEmptyOrBlankCell(StartingAt As Range) As Range
    Dim rng As Range

    'Set search range
    With StartingAt.Worksheet
        Set rng = .Range(StartingAt, .Cells(.Rows.Count, StartingAt.Column).End(xlUp).Offset(1, 0))
    End With

    ' Find first empty or blank cell
    Set FindFirstEmptyOrBlankCell = rng.Cells(StartingAt.Worksheet.Evaluate("Match(True, " & rng.Address & "=""""" & ", 0)"), 1)
End Function

Если вы хотите найти первую действительно пустую ячейку и игнорировать ячейки, содержащие пустую строку:

Function FindFirstEmptyCell(StartingAt As Range) As Range
    Dim rng As Range

    'Set search range
    With StartingAt.Worksheet
        Set rng = .Range(StartingAt, .Cells(.Rows.Count, StartingAt.Column).End(xlUp).Offset(1, 0))
    End With

    ' Find first empty cell
    If IsEmpty(StartingAt.Cells(1, 1)) Then
        Set FindFirstEmptyCell = rng.Cells(1, 1)
    ElseIf IsEmpty(StartingAt.Cells(2, 1)) Then
        Set FindFirstEmptyCell = rng.Cells(2, 1)
    Else
        Set FindFirstEmptyCell = rng.End(xlDown).Cells(2, 1)
    End If
End Function

И для полноты, если вы хотите найти первую ячейку, содержащуюпустая строка и полностью игнорируйте пустые ячейки:

Function FindFirstBlankCell(StartingAt As Range) As Range
    Dim rng As Range
    Dim idx As Variant
    'Set search range
    With StartingAt.Worksheet
        Set rng = .Range(StartingAt, .Cells(.Rows.Count, StartingAt.Column).End(xlUp).Offset(1, 0))
    End With

    ' Find first blank cell
    idx = Application.Match(vbNullString, rng, 0)
    If IsError(idx) Then
        'There are no Blank cells in the range. Add to end instead
        Set FindFirstBlankCell = rng.Cells(rng.Rows.Count, 1)
    Else
        Set FindFirstBlankCell = rng.Cells(idx, 1)
    End If
End Function

Во всех случаях вызывайте так:

Sub Demo()
    Dim ws As Worksheet
    Dim r As Range

    Set ws = ActiveSheet '<~~~ or specify required sheet
    Set r = FindFirstEmptyOrBlankCell(ws.Range("F3"))
    'or
    'Set r = FindFirstEmptyCell(ws.Range("F3"))
    'or
    'Set r = FindFirstBlankCell(ws.Range("F3"))

    ' literally what was asked for
    'r.Formula = "=F3"

    ' possibly what was actually wanted
    r.Formula = "=" & r.Offset(-1, 0).Address(0, 0)

End Sub

Примечание 1 If IsEmpty(currentRowValue) Or currentRowValue = "" Then фактически избыточно.Любое значение, которое возвращает TRUE для IsEmpty(currentRowValue), будет , а также возвращает TRUE currentRowValue = "" (обратное не применяется)

0 голосов
/ 25 сентября 2019

Вам нужно будет изменить rowCount, так, как у вас есть, цикл остановится перед первой пустой строкой.Я полагаю, что вы должны просто установить использование .Formula для пустой ячейки.Надеюсь, это поможет:

Sub EmptyCellFillFormula()

    Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer
    Dim currentRowValue As String

    sourceCol = 6   'column F has a value of 6
    rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row + 1

    For currentRow = 1 To rowCount
        currentRowValue = Cells(currentRow, sourceCol).Value
        If IsEmpty(currentRowValue) Or currentRowValue = "" Then
            Cells(currentRow, sourceCol).Formula = "=F3"
        End If
    Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...