我不知道在VBA中是否可以實現此問題,或者它必須使用VB完成。使用Visual Studio的網絡。在Excel中使用VBA搜索多個值
問題: Excel有它的搜索功能,這是一個痛苦,如果有許多可用的價值,或者你必須找到一個值,遠離A列
我想有什麼這樣
在這我可以指定我想通過自己的頭名,以顯示哪些列。以我想要的方式重新排列列,並且可以複製和粘貼。像Visual Basic中的datagrid一樣? 這可能嗎?
我不知道在VBA中是否可以實現此問題,或者它必須使用VB完成。使用Visual Studio的網絡。在Excel中使用VBA搜索多個值
問題: Excel有它的搜索功能,這是一個痛苦,如果有許多可用的價值,或者你必須找到一個值,遠離A列
我想有什麼這樣
在這我可以指定我想通過自己的頭名,以顯示哪些列。以我想要的方式重新排列列,並且可以複製和粘貼。像Visual Basic中的datagrid一樣? 這可能嗎?
我已經給下面兩種方法 - VBA和VB.net(隨你挑):)
使用VB.NET
將一個DataGridView您VB.net表上,也發生一個按鈕。將此代碼放置在按鈕
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
和你做:)
快照
我使用的數據有限。
你也可以改變你的字符串"select * from [Sheet1$] Where F1 = 'Test1'"
到"select F1 as Name,F2 as PN, F3 as [Inventory Loc] from [Sheet1$] Where F1 = 'Test1'"
如下
編輯
如果顯示標題你想知道如何做到這一點的VBA
使用VBA
在窗體上放置一個列表框和一個命令按鈕,然後使用此代碼。
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。網絡是美好的。對於Exel中的VBA,有沒有什麼方法可以複製(使用Ctrl + C)來複制數據 - 雖然複製多行是更可取的,但單行將會很好。我可以用文本框i49.tinypic.com/2ceq3yf替換「Test1」。jpg - user1370854 5小時前
是的,可以將單選或多選項從列表框複製到cliboard。要設計listobx多選,請在設計模式下將列表框的屬性設置爲fmMultiSelectMulti1
。下一步添加一個命令按鈕並粘貼此代碼。
此代碼再次基於我上面使用的數據,因此將其修改爲適用。當您按下Copy
按鈕時,數據將被複制到剪貼板,然後您可以簡單地使用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
它可以同時在VBA和VB.Net來完成。你想要哪一個? –
如果可以在VB中完成。作爲一個選項卡網絡(插件)http://i47.tinypic.com/tsoj.png - 這是最好的 – NCC