我在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
答案 0 :(得分:0)
我假设您的输入工作表名为Input
,并且它具有按照示例顺序排列的属性,第一列是名称,第二列是值。
1.在工作簿中创建一个新工作表,并在第一行填写名称(POS
,ART NO
...)。
2.将此公式放在A2
。
=INDEX(Input!$B$1:$B$9,(ROW()-1)*3-3+COLUMN(),1)
不多解释:使用行位置在值列中每3个值中的第1个,第2个和第3个。将输入数组的长度从9修改为您的需要。如果输入的顺序不是常数,那么它也可以完成,但它会更长一些。