【问题标题】:Create Excel array based on search function基于搜索功能创建 Excel 数组
【发布时间】:2016-06-28 09:57:46
【问题描述】:

我在 Excel 中有一个列表,其中显示 A 列中的标题和 B 列中的值,如下所示:

ARTICLE_POSNO       1
ARTICLE_ARTNO       111123  
ARTICLE_DESCRIPTION black pens
ARTICLE_POSNO       2
ARTICLE_ARTNO       280708  
ARTICLE_DESCRIPTION yellow paper
ARTICLE_POSNO       3
ARTICLE_ARTNO       999912      
ARTICLE_DESCRIPTION blue scissors

我要做的是构建一个 VB 函数,该函数创建一个包含值的数组,因此我可以像这样打印它:

POS ART NO  DESCRIPTION
1   111123  black pens
2   280708  yellow paper
3   999912  blue scissors

下面是我当前的脚本,它搜索标题 -> 获取它们旁边的值,最后发送一个值的 Msgbox。对于这个列表,这意味着 9 个 Msgbox。 理想情况下,它只会显示一个包含所有文章信息的消息框。

有什么想法吗?

非常感谢!

Sub FindArticles()
    Dim FirstAddress As String
    Dim MySearch As Variant
    Dim Rng As Range
    Dim I As Long

    MySearch = Array("ARTICLE_POSNO", "ARTICLE_ARTNO", "ARTICLE_DESCRIPTION")

    With Sheets("Sheet1").Range("A1:A1000")
        For I = LBound(MySearch) To UBound(MySearch)
            Set Rng = .Find(What:=MySearch(I), _
                            After:=.Cells(.Cells.Count), _
                            LookIn:=xlFormulas, _
                            LookAt:=xlWhole, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlNext, _
                            MatchCase:=False)

            If Not Rng Is Nothing Then
                FirstAddress = Rng.Address
                Do
                    ArtValue = Rng.Offset(0, 1) 'Gather the value to the right
                    MsgBox ArtValue 
                    Set Rng = .FindNext(Rng)
                Loop While Not Rng Is Nothing And Rng.Address <> FirstAddress
            End If
        Next I
    End With
End Sub

【问题讨论】:

    标签: vb.net excel


    【解决方案1】:

    我假设您的输入工作表名为Input,并且它具有与您的示例一样的顺序属性,第一列是名称,第二列是值。
    1. 在您的工作簿中创建一个新工作表,并在第一行填写名称(POSART NO...)。
    2.把这个公式放到A2.

    =INDEX(Input!$B$1:$B$9,(ROW()-1)*3-3+COLUMN(),1)
    
    1. 复制此单元格并粘贴到最终数组中。

    没什么好解释的:它使用行位置在值列中每 3 个值中取第 1、第 2 和第 3 个值。将输入数组的长度从 9 修改为您的需要。如果你输入的顺序不是固定的,也可以完成,但是会长一些。

    【讨论】:

    • 谢谢,但是我更喜欢将它放在宏中,因为还有很多其他行包含附加信息,我将使用 Outlook.Application 输出其中的一些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    • 2016-12-25
    • 2017-08-26
    • 2013-06-08
    • 2012-10-13
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多