在一个主要由空白单元格填充的列中,我需要获取最接近当前所选单元格的单元格的值,在它之前的行中,并且不是空白。
虽然"不是空白"使用 IF 和 ISBLANK 语句可以轻松实现部分,我无法弄清楚如何从当前单元格中获取第一个单元格的位置不是空白。
在此示例电子表格中,在单元格C7中,我想显示B7的值减去B4的值( = B7-B4 )。问题是这些值由不可预测的单元格数分隔,其范围可以是0到20甚至更多。需要解析包含数千行和频繁数据的电子表格,手动选择上部单元格不是一种选择。
继续我的例子,我希望C13显示 = B13-B10 ,但是我们可以说它们之间还有两个空行(第13行变成第15行),我希望它显示= B15- B10 。
可以使用 MATCH 查询获取位置,知道类型将始终为T1或T2吗?
提前谢谢。
答案 0 :(得分:1)
答案 1 :(得分:1)
通过VBA编写公式
下面是一个VBA方法,将减去公式写入C列。 BTW,通过数组搜索比循环遍历范围要快得多。
<强>代码强>
Option Explicit
Sub subtractLastValueRow()
' declare vars
Dim oSht As Worksheet ' work sheet
Dim a As Variant ' one based 2-dim data field array
Dim n As Long ' last row in column B
Dim i As Long ' item no
Dim ii As Long ' last item no
Dim j As Long
Dim s As String
' set sheet
Set oSht = ThisWorkbook.Worksheets("MySheet") ' fully qualified reference to worksheet
' get last row number of search column
n = oSht.Range("B" & oSht.Rows.Count).End(xlUp).Row
If n < 2 Then Exit Sub ' only if data avaible (row 1 = title line)
' get range (after title line) values to one based 2dim data field array
a = oSht.Range("B2:C" & n).Value ' array gets data from e.g. "A2:A100"
' loop through column B to find keyword sKey
If Len(a(1, 1) & "") > 0 Then ii = 1 + 1 ' first item in array
For i = LBound(a) + 1 To UBound(a) ' array boundaries counting from 1+1 to n -1 (one off for title line)
' value found
If Len(a(i, 1) & "") > 0 Then
For j = i + 1 To UBound(a)
If Len(a(j, 1) & "") > 0 Then
' write .Formula (alternatively use .Value, if value wanted)
oSht.Range("C" & i + 1).Formula = "=B" & i + 1 & "-B" & ii
ii = i + 1 ' note last found i
Exit For
End If
Next j
End If
Next
If Len(a(UBound(a), 1) & "") > 0 Then ' last item in array
oSht.Range("C" & UBound(a) + 1).Formula = "=B" & UBound(a) + 1 & "-B" & ii
End If
End Sub
注意强>
如果您要编写值而不是工作表公式,只需将.Formula
替换为.Value
。
答案 2 :(得分:0)
在单元格C3中加入以下公式:
=B3-LOOKUP(2,1/$B$1:B2,$B$1:B2)
根据需要在所有T2细胞中复制。