根据相邻单元格中的值填充单元格
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 现在看看,虽然我不确定我今天能不能给出一个答案。以上是关于根据相邻单元格中的值填充单元格的主要内容,如果未能解决你的问题,请参考以下文章