基于搜索功能创建Excel数组

时间:2016-06-28 09:57:46

标签: vb.net excel

我在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

1 个答案:

答案 0 :(得分:0)

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

=INDEX(Input!$B$1:$B$9,(ROW()-1)*3-3+COLUMN(),1)
  1. 复制此单元格并粘贴到最终数组中。
  2. 不多解释:使用行位置在值列中每3个值中的第1个,第2个和第3个。将输入数组的长度从9修改为您的需要。如果输入的顺序不是常数,那么它也可以完成,但它会更长一些。