我将尝试尽可能多地理解这一点,我现在已经在VBA工作了整整3天,这是我实习期间的一个项目的一部分。 / p>
简而言之,我有一组数字,如果这个数字超出12-70范围,那么这是一个不好的数据点,不应该包含在其他链接的计算中。但是,数字需要保留在那里,我不能直接更改其他链接的公式。
所以,我的想法是将单元格更改为“N / A”,但将该单元格的显示返回到原始编号(如果可能的话)。这是我的代码(功能齐全):
'This will take all questionable data and remove it from calculation
Dim i As Variant
Dim j As Variant
For Each j In Array(6, 7, 10)
For i = 3 To 500
If Cells(i,j) = "N/A" Or Cells(i,j) = "" Then
ElseIf Cells(i,j) < 12 Or Cells(i,j) > 70 Then
Cells(i, 11) = Cells(i,j)
Cells(i,j).NumberFormat = "0;0;0;[Red]""Bad Data"""
Cells(i,j) = "N/A"
End If
Next i
Next j
因此,截至目前,这将原始数字重写到原始位置旁边的第11列,将值更改为N / A,然后显示为“错误数据”。
有没有办法改变“坏数据”显示以显示原始数字,同时将N / A维持为实际单元格值?
答案 0 :(得分:1)
在这里!请参阅注释以获得解释希望有所帮助!
Sub set_Cell_Variable()
'This will take all questionable data and remove it from calculation
Dim i As Variant
Dim j As Variant
' Two new variables
Dim strTemp As String
Const QUOTE = """"
For Each j In Array(6, 7, 10)
For i = 3 To 500
If Cells(i, j) = "N/A" Or Cells(i, j) = "" Then
ElseIf Cells(i, j) < 12 Or Cells(i, j) > 70 Then
Cells(i, 11) = Cells(i, j)
' Store the cell value as String.
' That way it can go into NumberFormat
strTemp = CStr(Cells(i, j).Value)
' Add it to NumberFormat dynamically
Cells(i, j).NumberFormat = "0;0;0;[Red]" & QUOTE & strTemp & QUOTE
Cells(i, j) = "N/A"
End If
Next i
Next j
End Sub