我有以下情况:
A B
19260218 234 77 ok
3
ok
19310328 174 46 2
当 B 列中的值为数字时,我有一个条件格式,即整行都为红色。如果可能的话,我需要在 vba 中进行以下操作:
如果 B 列中的值为数字且 A 列(在同一行)中的单元格为空,则将之前遇到的值从 A 列复制到目标行。在这种情况下(不计算标题):B2 = 数字且 A2 = 空,因此将 A1 复制到 A2
B4 也是数字,但由于 A4 不为空,因此不需要复制任何内容。
对于行数发生变化的整个工作表,这种情况可能发生吗?如果可以,怎么做?
感谢您的帮助。如果我需要进一步解释,请随时询问。
答案1
将此 VBA 代码放入工作表中:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wks As Worksheet
Set wks = ActiveSheet
cellempty = False
i = 1
'Check the max. number of rows
While cellempty = False
a = Cells(i, 2)
If a = "" Then
finalrow = i - 1
cellempty = True
End If
i = i + 1
Wend
'Going row by row
For i = 1 To finalrow
If IsNumeric(Cells(i, 2)) Then 'check if cell in column B is numeric
If Cells(i, 1) = "" Then 'check if cell in column A is empty
'goes upward on column A to find a non-empty value
For j = i To 1 Step -1
If Cells(j, 1) <> "" Then
Cells(i, 1) = Cells(j, 1) 'copy value to cell
j = 1
End If
Next j
End If
End If
Next i
End Sub
这是非常基本的东西,您可以对其进行改进以更好地适应您的需求。它假设数据在 A 列和 B 列中,并且只要工作表发生更改就会执行。
答案2
您可以在单元格 C2 中输入以下内容:
=IF(ISNUMBER(B2),IF(A2="",A1,A2),IF(A2="","",A2))
并将公式复制到 C3、C4、C5...
现在 C 列将按您想要的方式显示信息
对于单元格 C1 输入:
=IF(A1="","",A1)