如何将公式放在 F 列的第一个空单元格中?

How can I place a formula in the first empty cell on Column F?

如何在第 F 列的第一个空单元格中放置公式?

F3 是空单元格。 该空单元格需要 =F2

注意:我正在寻找代码来寻找第一个空单元格 F,我需要能够插入第一个空单元格 =F3

目前正在使用以下代码copied from here

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

你需要改变你的 rowCount,你的方式,循环将在第一个空白行之前停止。我相信您应该能够为空单元格设置 use .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

您现有的代码意味着您要考虑真正的空单元格和包含空字符串的单元格(或 return 是空字符串的公式)注 1 . (鉴于您只是从其他地方复制了该代码,情况可能并非如此)

您可以使用 End(xlDown) 定位第一个真正的空单元格,或使用 Match 定位范围内的第一个 "Empty" 单元格(要么只是空字符串,要么是空字符串或不同形式的空单元格)

如果要查找第一个真正为空的单元格,包含空字符串的单元格:

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"))

    ' 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 实际上是多余的。 IsEmpty(currentRowValue) 的 return 为 TRUE 的任何值都将 return 为 currentRowValue = "" 的 TRUE(相反的情况不适用)

来自评论相同的函数可以重复直到最后一个空单元格吗?我想这就是你的意思是继续在使用的范围内填充空白单元格

如果是这样,试试这个

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

    Set ws = ActiveSheet '<~~~ or specify required sheet

    Set cl = ws.Range("F3")
    Do
        Set r = FindFirstEmptyOrBlankCell(cl)
        If r Is Nothing Then Exit Do
        r.Formula = "=" & r.Offset(-1, 0).Address(0, 0)
        Set cl = r.Offset(1, 0)
    Loop
End Sub

注意,我已经修改了上面的 FindFirstEmptyOrBlankCell 以允许它在需要时 return Nothing:

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
    On Error Resume Next ' Allow function to return Nothing
    Set FindFirstEmptyOrBlankCell = rng.Cells(StartingAt.Worksheet.Evaluate("Match(True, " & rng.Address & "=""""" & ", 0)"), 1)
End Function