在Excel中使用VBAsearch多个值

我不知道是否有可能在VBA中实现这个问题,或者必须用VB来完成。 净使用Visual Studio。

问题:Excel有它的searchfunction,如果有很多值可用,或者你必须find一个远离A列的值,那就很痛苦。

在这里输入图像说明

我想有这样的事情

在这里输入图像说明

我可以通过它的标题名称来指定要显示的列。 以我想要的方式重新排列列,并能够复制和粘贴。 像Visual Basic中的数据网格? 可能吗?

我在下面给出了这两种方法 – VBA和VB.net(请select):)

使用VB.NET

将一个DataGridView放在你的VB.net窗体上,并放置一个button。 将此代码放在button中

Public Class Form1 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim masterTable As New DataTable Dim cnnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=""Excel 12.0 Xml;HDR=NO"";Data Source=""{0}"";" Using da As New OleDb.OleDbDataAdapter("select * from [Sheet1$] Where F1 = 'Test1'", String.Format(cnnStr, "C:\Book1.xlsx")) da.Fill (masterTable) End Using DataGridView1.DataSource = masterTable End Sub End Class 

你完成了:)

快照

我正在使用有限的数据。

在这里输入图像说明

您也可以将您的string"select * from [Sheet1$] Where F1 = 'Test1'"更改为"select F1 as Name,F2 as PN, F3 as [Inventory Loc] from [Sheet1$] Where F1 = 'Test1'"显示标题如下

在这里输入图像说明

编辑

如果你想知道如何在VBA中做到这一点

使用VBA

将一个列表框和一个命令button放在窗体上,然后使用此代码。

 Option Explicit Private Sub CommandButton1_Click() Dim ws As Worksheet, ws1 As Worksheet Dim rng As Range Dim lastRow As Long Dim Ar As Variant Set ws = Sheets("Sheet1") lastRow = ws.Cells.Find(What:="*", After:=ws.Range("A1"), _ Lookat:=xlPart, LookIn:=xlFormulas, _ SearchOrder:=xlByRows, SearchDirection:=xlPrevious, _ MatchCase:=False).Row Set rng = ws.Range("A1:C" & lastRow) Set ws1 = Sheets.Add With rng ws.AutoFilterMode = False .AutoFilter Field:=1, Criteria1:="Test1" .SpecialCells(xlCellTypeVisible).Copy ws1.Range("A1") ws.AutoFilterMode = False lastRow = ws1.Cells.Find(What:="*", After:=ws1.Range("A1"), _ Lookat:=xlPart, LookIn:=xlFormulas, SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, MatchCase:=False).Row Ar = ws1.Range("A1:C" & lastRow) Application.DisplayAlerts = False ws1.Delete Application.DisplayAlerts = True End With With Me.ListBox1 .Clear .ColumnHeads = False .ColumnCount = 3 .List = Ar .ColumnWidths = "50;50;50" .TopIndex = 0 End With End Sub 

快照

在这里输入图像描述

更多后续

嗨Siddharth,非常感谢你的代码。 对于VB。 networking是美好的。 对于Exel中的VBA,有没有什么办法可以复制(使用Ctrl + C)来复制数据 – 单行将罚款,虽然复制多行是比较理想的。 我能够replace“Test1”与文本框i49.tinypic.com/2ceq3yf.jpg – user1370854 5小时前

是的,可以将单个选定或多个选定的项目从列表框复制到cliboard。 为了使listobx多选,在devise模式下,将列表框的属性设置为fmMultiSelectMulti1 。 下一步添加一个命令button并粘贴这个代码。

此代码再次基于我上面使用的数据,因此将其修改为适用。 当您按下Copybutton时,数据被复制到剪贴板,然后您可以简单地使用CTL V将数据粘贴到任何您想要的位置; 例如在记事本中。

 Private Sub CommandButton2_Click() Dim MyData As DataObject Dim i As Long Dim strCopiedText As String Set MyData = New DataObject With Me.ListBox1 For i = 1 To .ListCount If .Selected(i - 1) Then strCopiedText = strCopiedText & _ .List(i - 1, 0) & vbTab & _ .List(i - 1, 1) & vbTab & _ .List(i - 1, 2) & vbCrLf End If Next i If Len(strCopiedText) > 0 Then MyData.Clear MyData.SetText strCopiedText MyData.PutInClipboard MsgBox "Data copied to clipboard" End If End With End Sub 

在这里输入图像说明