如何获取连续的最后一个非空单元格的值?

时间:2012-01-26 17:03:53

标签: excel vba excel-vba excel-2010

以下是电子表格示例

Sample table

我想选择一个范围(例如:A2:E2)并获取值1。如果我选择A4:E4,我将获得值1;等等。有没有办法用宏来实现这个目标?

我需要的另一件事是相应列第一行的值。例如:

如果我选择A2:E2我想获得n(因为1在E列中),如果我选择A4:E4我想获得v(因为1是在C)栏中。

2 个答案:

答案 0 :(得分:2)

以下代码应该做你想要的。注意:我没有选择任何东西,因为这会使事情变慢,没有任何优势。

Dim ColLast as Long
Dim ValueColLast as String
Dim HeadColLast as String

With Sheets(xxxxx)

  ColLast = .Cells(2,Columns.Count).End(xlToLeft).Column
  ValueColLast = .Cells(2, ColLast).Value
  HeadColLast = .Cells(1,ColLast).Value 

End With

Cells(Row, Column)处理活动工作表中由行和列标识的单元格。行必须是数字。列可以是数字(例如1或104)或列标识符(例如“A”或“CZ”)

.Cells(Row, Column)解决在With语句中标识的工作表中由行和列标识的单元格。注意前导点。

.Cells(2,Columns.Count)解决了自Columns.Count以来第2行中最后一个单元格给出当前版本Excel的每个工作表的列数。 `Rows.Count对行执行相同的操作。

假设.Cells(2,Columns.Count)为空,.Cells(2,Columns.Count).End(xlToLeft)使用值查找指定方向的下一个单元格。这是VBA等同于Ctrl + LeftArrow。 xlToRightxlUpxlDown允许您向其他方向移动。 .Cells(Rows.Count,"A").End(xlUp)给出了A列中最后一次使用的行。

.Cells(2,Columns.Count).End(xlToLeft).Column给出第2行中最后一次使用的列的编号。

ValueColLast = .Cells(2, ColLast).Value将ValueColLast设置为第2行中最后一个单元格的值。我已将ValueColLast定义为String,因为如果我认为它是一个数字并将其定义为Long,那么我会得到一个错误不是。

HeadColLast = .Cells(1,ColLast).Value将HeadColLast设置为第1行中的值。

希望这一切都有意义。

答案 1 :(得分:1)

好的,这是一个可以在工作簿中用作公式的函数。它还解决了两个您的问题。 :)

将以下代码粘贴到模块中。

<强>语法/ USAGE

= MyFunc(细胞范围,Arg)

小区范围 :(必填)范围如A2:E2

Arg :(必填)可以取值“H”或“R”。 “H”将为您提供列标题,“R”将为您提供行值

示例

= MyFunc(A1:E2,“H”)会给你“n”AND

= MyFunc(A1:E2,“R”)会给你“1”

Option Explicit

Function MyFunc(rng As Range, stype As String) As Variant
    Dim MyArray() As String
    Dim sCol As Long

    If stype = "" Or (UCase(stype) <> "H" And _
    UCase(stype) <> "R") Then Exit Function

    With rng
        MyArray = Split(.Address, "$")

        sCol = Cells(Val(MyArray(UBound(MyArray))), _
        Columns.Count).End(xlToLeft).Column

        If UCase(stype) = "H" Then
            MyFunc = Cells(1, sCol)
        ElseIf UCase(stype) = "R" Then
            MyFunc = Range(MyArray(UBound(MyArray) - 1) & _
            MyArray(UBound(MyArray))).Value
        End If
    End With
End Function

注意:这只是一个通用代码,向您展示它是如何工作的,目前它不处理任何错误。