根据相邻单元格中的值填充单元格

Posted

技术标签:

【中文标题】根据相邻单元格中的值填充单元格【英文标题】:Fill cells based on value in adjacent cell 【发布时间】:2019-11-15 19:59:50 【问题描述】:

我有这个工作宏按钮,可以将 B2:B15 范围内的“所有状态”“重置为默认提示,让我的同事指示工作状态:

Private Sub CommandButton1_Click()

    Sheets("Sheet1").Range("B2:B15").Value = "please enter status"

End Sub

如果相邻的 A 列中没有值,我希望此宏停止在 B 列中填充值“请输入状态”。查看屏幕截图,它将使 B6:B15 为空。 A 列的值是 vlookup 结果。如果没有结果,vlookup 会返回零(当前在条件格式的帮助下隐藏在白色字体中)

感谢您的帮助!

【问题讨论】:

自从我接触 vba 以来已经很长时间了,但是您需要遍历 A2:A15 之间的所有内容,并确定镜像 B 单元格是否应该获得值。 您是否宁愿返回"" 而不是 0 以避免混淆格式?条件格式是不稳定的。 【参考方案1】:

可能是这样的:

Private Sub CommandButton1_Click()
    Dim rng as Range
    Set rng = Sheets("Sheet1").Range("A2:A15")

    If Application.CountA(rng) > 0 Then
        rng.SpecialCells(xlCellTypeConstants).Offset(,1).Value = "please enter status"
    End If
End Sub

编辑

如果列中的单元格是公式,则将xlCellTypeConstants 更改为xlCellTypeFormulas

编辑 2

这是一个简单的方法来做你正在寻找的东西:

Private Sub CommandButton1_Click()
    Dim rng As Range
    Set rng = Sheets("Sheet1").Range("B2:B15")

    rng.Formula = "=IF(A2<>0,""please enter status"", """")"
    rng.Value = rng.Value
End Sub

或者Evaluate:

Private Sub CommandButton1_Click()
    Dim ws As Worksheet
    Set ws = Sheets("Sheet1")

    Dim rng As Range
    Set rng = ws.Range("B2:B15")

    rng.Value = ws.Evaluate("IF(A2:A15<>0,""please enter status"", """")")
End Sub

编辑 3:(第三次是魅力?)

如果没有找到工作编号,另一种选择是让 Vlookup 返回一个空白字符串 "" 而不是 0

然后你可以利用Range.SpecialCells 的第二个参数,像这样(由@JvdV 提出):

Private Sub CommandButton1_Click()
    Dim rng As Range
    Set rng = Sheets("Sheet1").Range("A2:A15")

    rng.SpecialCells(xlCellTypeFormulas, xlNumbers).Offset(, 1).Value = "please enter status"
End Sub

编辑 4

你也可以使用AutoFilter:

Private Sub CommandButton1_Click()
    With Sheets("Sheet1").Range("A1:B15")
        .AutoFilter 1, ">0"
            If .Cells.SpecialCells(12).Count > 2 Then .Offset(1).Resize(14, 2).Columns(2).Value = "Please enter status"
        .AutoFilter
    End With
End Sub

【讨论】:

实际上,如果我将此代码用于包含公式而不是值的单元格,则会返回错误。出于这个问题的目的,我简化了这个例子。事实上,我的A列包含vlookup结果 xlCellTypeConstants 更改为 xlCellTypeFormulas。您只有该列中的公式吗?如果混合了公式/文本,那么您需要一种稍微不同的方法,我很乐意展示,请告诉我。 正在工作,但忽略了相邻单元格中的空 vlookup 值。如果相邻单元格等于零(没有 vlookup 结果),我希望这个宏停止。谢谢 可能会添加几个隐藏的“服务”列,宏将响应这些列,这些列与 vlookup 结果相关联。只是在这里集思广益...... @JvdV 现在看看,虽然我不确定我今天能不能给出一个答案。

以上是关于根据相邻单元格中的值填充单元格的主要内容,如果未能解决你的问题,请参考以下文章

根据另一个单元格中的值自动填充 x 行的代码

VBA 代码填充 7 个相邻单元格中的索引匹配函数

从相邻下拉列表的单元格中输入数据时,如何删除填充颜色?

根据 Excel 中的另一个单元格自动填充单元格数据

使用第一个空白上方单元格中的值填充非连续空白单元格

根据数据框中单元格中的值将颜色应用于单元格