使用SearchDirection标识垂直单元格

时间:2015-09-11 16:46:27

标签: excel vba excel-vba

我需要确定Ledger帐户中的股息收入行。以下是从GROUP BY开始的数据:

Column A Cell A1

最终我想在一个数组中放入股息收入行中的相邻数据(即偏移1,2,3个单元格等)。

这就是我所拥有的 - 如何在确定合适的列(Ledger Account)后修改向下搜索的方向,并将值存储在数组中的第5行(Dividend Income行)中?

Ledger Account
Prior Shares Outstanding
Current Shares Outstanding
Current Share Activity
Dividend Income

2 个答案:

答案 0 :(得分:1)

这是你在尝试什么?我已对代码进行了评论,因此您无法理解它。但如果你仍然这样做,那么就问:)

Sub Sample()
    Dim ws As Worksheet
    Dim MyAr As Variant
    Dim SearchString As String
    Dim aCell As Range
    Dim i As Long

    SearchString = "Ledger Account"

    '~~> Change this as applicable
    Set ws = ThisWorkbook.Sheets("Sheet1")

    With ws
        Set aCell = .Columns(1).Find(What:=SearchString, LookIn:=xlValues, _
                    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                    MatchCase:=False, SearchFormat:=False)

        If Not aCell Is Nothing Then
            '~~> 5 Denotes the 5th column i.e Column "E"
            '~~> Amend as applicable
            '~~> Store the values From say Col B to E in the array
            MyAr = Application.Transpose( _
                                         .Range(.Cells(aCell.Row, 2), _
                                                .Cells(aCell.Row, 5) _
                                                ).Value _
                                        )

            '~~> Check what is in the array
            For i = LBound(MyAr) To UBound(MyAr)
                Debug.Print MyAr(i, 1)
            Next i
        End If
    End With
End Sub

答案 1 :(得分:0)

这就是将Dividend Income行中的值变为数组所需的全部内容:

v

通过上述内容,v(1, 1)成为一个二维数组,其中包含该行的所有值。例如,v(1, 2)包含'股息收入'并且Public Sub Sample() Dim v On Error Resume Next v = [index(a:a,match("dividend income",a:a,))].EntireRow If Err Then MsgBox "No match." End Sub 包含紧邻右侧的值,依此类推。

这是一种有效的方法。一个变量(这是你想要的数组),只有一个调用跨越Excel和VBA之间的边界。

以上主要关注如何获取数组。当然,在实践中,应该考虑到找不到搜索文本的情况,因此这个版本会这样做:

{{1}}