入庫單的輸入浓恶,查找,刪除與修改
一 查找功能
在VBA中查找主要有三種方法,第一是使用循環(huán)查找(在單元格中查找效率太低)第二種是調(diào)用工作表函數(shù),第三是使用find函數(shù)粪小。
1.1 調(diào)用工作表函數(shù)查找
Sub haa1()
Dim hao As Integer
Dim icount As Integer
icount = Application.WorksheetFunction.CountIf(Sheets("庫存明細(xì)表").[b:b], [g3])
If icount > 0 Then??? ‘1.涉及到查找單據(jù)號碼在庫存明細(xì)表中是否存在
MsgBox "該入庫單已存在,請不要重復(fù)錄入"
MsgBox Application.WorksheetFunction.Match([g3], Sheets("庫存明細(xì)表").[b:b], 0)??????? ’2.在庫存明細(xì)表中查找單據(jù)號碼第一次出現(xiàn)的位置
End If
End Sub
涉及到match函數(shù)
以下信息選自https://zhidao.baidu.com/question/514555586.html
MATCH函數(shù)語法:MATCH(lookup_value, lookup_array, match_type)
lookup_value:需要在數(shù)據(jù)表(lookup_array)中查找的值抡句√讲玻可以為數(shù)值(數(shù)字、文本或邏輯值)或?qū)?shù)字待榔、文本或邏輯值的單元格引用逞壁。可以包含通配符锐锣、星號 (*) 和問號 (?)腌闯。星號可以匹配任何字符序列;問號可以匹配單個字符雕憔。
lookup_array:可能包含有所要查找數(shù)值的連續(xù)的單元格區(qū)域姿骏,區(qū)域必須是某一行或某一列,即必須為一維數(shù)據(jù)斤彼,引用的查找區(qū)域是一維數(shù)組分瘦。
match_type:表示查詢的指定方式,用數(shù)字-1琉苇、0或者1表示嘲玫。
為1時(shí),查找小于或等于lookup_value的最大數(shù)值在lookup_array中的位置并扇,lookup_array必須按升序排列:
為0時(shí)趁冈,查找等于lookup_value的第一個數(shù)值,lookup_array按任意順序排列:
為-1時(shí),查找大于或等于lookup_value的最小數(shù)值在lookup_array中的位置渗勘,lookup_array必須按降序排列沐绒。利用MATCH函數(shù)查找功能時(shí),當(dāng)查找條件存在時(shí)旺坠,MATCH函數(shù)結(jié)果為具體位置(數(shù)值)乔遮,否則顯示#N/A錯誤。
MATCH函數(shù):匹配函數(shù),指返回指定數(shù)值在指定數(shù)組區(qū)域中的位置取刃。MATCH函數(shù)是EXCEL主要的查找函數(shù)之一蹋肮,該函數(shù)通常有以下幾方面用途:
(1)確定列表中某個值的位置;
(2)對某個輸入值進(jìn)行檢驗(yàn)璧疗,確定這個值是否存在某個列表中坯辩;
(3)判斷某列表中是否存在重復(fù)數(shù)據(jù);
(4)定位某一列表中最后一個非空單元格的位置崩侠。
1.2? 使用find函數(shù)查找
Sub haa2()
Dim r As Integer, r1 As Integer
Dim icount As Integer
icount = Application.WorksheetFunction.CountIf(Sheets("庫存明細(xì)表").[b:b], [g3])
If icount > 0 Then
r = Sheets("庫存明細(xì)表").[b:b].Find([g3], lookat:=xlWhole).Row
r1 = Sheets("庫存明細(xì)表").[b:b].Find([g3], searchdirection:=xlPrevious).Row
'在庫存明細(xì)表中查找單據(jù)號碼最后一個的位置漆魔。
MsgBox r & ":" & r1
End If
End Sub
如何返回最下一行非空行的行數(shù)
Sub haa3()
MsgBox Sheets("庫存明細(xì)表").Cells.Find("*", searchdirection:=xlPrevious).Row
End Sub
涉及到find函數(shù)。
以下信息摘選自http://www.excelpx.com/thread-156406-1-1.html
有關(guān)在 Visual Basic 中使用 Find 工作表函數(shù)的詳細(xì)信息却音,請參閱F1幫助中在 Visual Basic 中使用工作表函數(shù)改抡。
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)
expression? ?? ?必需。該表達(dá)式返回一個 Range 對象系瓢。
What? ?? ?Variant 類型阿纤,必需。要搜索的數(shù)據(jù)夷陋∏肥埃可為字符串或任意 Microsoft Excel 數(shù)據(jù)類型。
After? ?? ?Variant 類型骗绕,可選藐窄。表示搜索過程將從其之后開始進(jìn)行的單元格。此單元格對應(yīng)于從用戶界面搜索時(shí)的活動單元格位置爹谭。值得注意的是枷邪,After 必須是區(qū)域中的單個單元格榛搔。請記住搜索是從該單元格之后? ?開始的诺凡;直到本方法繞回到指定的單元格時(shí),才對其進(jìn)行搜索践惑。如果未指定本參數(shù)腹泌,搜索將從區(qū)域的左上角單元格之后開始。
LookIn? ?? ?Variant 類型尔觉,可選凉袱。信息類型。
LookAt? ?? ?Variant 類型,可選专甩≈油遥可為以下 XlLookAt 常量之一:xlWhole 或 xlPart。
SearchOrder? ?? ?Variant 類型涤躲,可選棺耍。可為以下 XlSearchOrder 常量之一:xlByRows 或 xlByColumns种樱。
SearchDirection? ?? ?XlSearchDirection 類型蒙袍,可選。搜索的方向嫩挤。
XlSearchDirection 可為以下 XlSearchDirection 常量之一害幅。
xlNext 默認(rèn)值
xlPrevious
MatchCase? ?? ?Variant 類型,可選岂昭。若為 True以现,則進(jìn)行區(qū)分大小寫的查找。默認(rèn)值為 False佩抹。
MatchByte? ?? ?Variant 類型叼风,可選。僅在選擇或安裝了雙字節(jié)語言支持時(shí)使用棍苹。若為 True无宿,則雙字節(jié)字符僅匹配雙字節(jié)字符。若為 False枢里,則雙字節(jié)字符可匹配其等價(jià)的單字節(jié)字符孽鸡。
SearchFormat? ?? ?Variant 類型,可選栏豺。搜索的格式彬碱。
說明每次使用本方法后,參數(shù) LookIn奥洼、LookAt巷疼、SearchOrder 和 MatchByte 的設(shè)置將保存。如果下次調(diào)用本方法時(shí)不指定這些參數(shù)的值灵奖,就使用保存的值嚼沿。設(shè)置這些參數(shù)將更改“查找和替換”對話框中的設(shè)置,如果您忽略參數(shù)瓷患,更改“查找和替換”對話框中的設(shè)置將更改使用的保存值骡尽。若要避免這種問題的出現(xiàn),每次使用該方法時(shí)請明確設(shè)置這些參數(shù)擅编。
可以使用 FindNext和 FindPrevious方法重復(fù)搜索攀细。
當(dāng)搜索到指定的搜索區(qū)域的末尾時(shí)箫踩,本方法將繞回到區(qū)域的開始繼續(xù)搜索。發(fā)生繞轉(zhuǎn)后谭贪,若要停止搜索境钟,請保存第一個找到的單元格地址,然后依據(jù)該保存地址測試每個后續(xù)查找到的單元格地址俭识。
若要進(jìn)行更為復(fù)雜的模式匹配查找吱韭,請用 For Each...Next 語句和 Like 運(yùn)算符。例如鱼的,下列代碼在單元格區(qū)域 A1:C5 中搜索字體名稱以“Cour”開始的單元格理盆。當(dāng) Microsoft Excel 找到匹配單元格以后,就將其字體改為“Times New Roman”凑阶。
For Each c In [A1:C5]
If c.Font.Name Like "Cour*" Then
c.Font.Name = "Times New Roman"
End If
Next
--------------------------------------------------------
下面是幾個蘭色版主以前的教學(xué)示例代碼:
Sub Find1() '在某列查找
Dim k
k = Range("A:A").Find("A").Row
MsgBox k
End Sub
Sub Find11() '在多列查找
Dim k
k = Range("A:B").Find("BCD").Row
MsgBox k
End Sub
Sub Find2() '查找的起始位置
Dim k
k = Range("A:B").Find("A", AFTER:=Range("A5")).Row
MsgBox k
End Sub
Sub Find3() '在值中查找
Dim k
k = Range("B:B").Find("SE", LookIn:=xlValues).Row
MsgBox k
End Sub
Sub Find31() '在公式中查找
Dim k
k = Range("B:B").Find("C2", LookIn:=xlFormulas).Address
MsgBox k
End Sub
Sub Find32() '在備注中查找
Dim k
k = Range("B:C").Find("AB", LookIn:=xlComments).Address
MsgBox k
End Sub
Sub Find41() '按模糊查找
Dim k
k = Range("B:C").Find("A", LookIn:=xlValues, LOOKAT:=xlPart).Address
MsgBox k
End Sub
Sub Find42() '匹配查找
Dim k
k = Range("B:C").Find("A", LookIn:=xlValues, LOOKAT:=xlWhole).Address
MsgBox k
End Sub
Sub Find5() '按先行后列的方式查找
Dim k
k = Range("A:B").Find("AB", LookIn:=xlValues, LOOKAT:=xlWhole, SEARCHORDER:=xlByRows).Address
MsgBox k
End Sub
Sub Find51() '按先列后行的方式查找
Dim k
k = Range("A:B").Find("AB", LookIn:=xlValues, LOOKAT:=xlWhole, SEARCHORDER:=xlByColumns).Address
MsgBox k
End Sub
Sub Find6() '查找方向(從后向前)
Dim k
k = Range("A:A").Find("A", , xlValues, xlWhole, xlByColumns, xlPrevious).Address
MsgBox k
End Sub
Sub Find61() '查找方向(從前向后)
Dim k
k = Range("A:A").Find("A", , xlValues, xlWhole, xlByColumns, xlNext).Address
MsgBox k
End Sub
Sub Find7() '字母大小寫
Dim k
k = Range("a:b").Find("a", , xlValues, xlWhole, xlByColumns, xlNext, False).Address
MsgBox k
End Sub
Sub f7() '查找不到的情況
Dim MRG As Range
Set MRG = Range("A:A").Find("D")
If MRG Is Nothing Then
MsgBox "查找不到字母D"
Else
MsgBox "查找成功,單元格地址為:" & MRG.Address
End If
End Sub
Sub f8() '二次查找
Dim MRG As Range
Set MRG = Range("A:A").Find("A")
Set mrg1 = Range("A:A").FindNext(MRG)
MsgBox mrg1.Address
End Sub
Sub F9() '區(qū)域查找
Dim MRG As Range, AAA As String
Set MRG = Range("A1:F16").Find("A")
AAA = MRG.Address
Do
Set MRG = Range("A1:F16").FindNext(MRG)
MsgBox MRG.Address
Loop Until MRG.Address = AAAEnd Sub
二 入庫單的輸入功能
Sub haa4()
Dim c As Integer '號碼在庫存表中的個數(shù)
Dim r As Integer '入庫單的數(shù)據(jù)行數(shù)
Dim cr As Integer ' 庫存明細(xì)表中第一個空行的行數(shù)
With Sheets("庫存明細(xì)表")
c = Application.CountIf(.[b:b], [g3])
If c > 0 Then
MsgBox "已存在猿规,不要重復(fù)錄入"
Exit Sub
Else
r = Application.CountIf([b6:b10], "<>")??? ‘計(jì)算b6到b10之間的非空單元格個數(shù)
cr = .[b65536].End(xlUp).Row + 1
.Cells(cr, 1).Resize(r, 1) = [e3]
.Cells(cr, 2).Resize(r, 1) = [g3]
.Cells(cr, 3).Resize(r, 1) = [c3]
.Cells(cr, 4).Resize(r, 6) = Cells(6, 2).Resize(r, 6).Value
.Range("a:a").NumberFormat = "yyyy-m-d"
.Range("a1:k10000").HorizontalAlignment = xlCenter
MsgBox "輸入完成"
End If
End With
End Sub
三 查找功能
Sub 查找()
Dim x As Integer '單據(jù)號碼在庫存表中的個數(shù)
Dim r As Integer '入庫單的數(shù)據(jù)行數(shù)
With Sheets("庫存明細(xì)表")
x = Application.CountIf(.[b:b], [g3])
If x = 0 Then
Exit Sub
Else
r = .[b:b].Find([g3], searchdirection:=xlNext).Row
Cells(3, 3) = .Cells(r, 3)
Cells(3, 5) = .Cells(r, 1)
Cells(6, 2).Resize(x, 5) = .Cells(r, 4).Resize(x, 5).Value
MsgBox "查找已經(jīng)完成"
End If
End With
End Sub
四 刪除功能
Sub 刪除()
Dim c As Integer '號碼在庫存表中的個數(shù)
Dim r As Integer? ' 入庫單的數(shù)據(jù)行數(shù)
With Sheets("庫存明細(xì)表")
c = Application.CountIf(.[b:b], [g3])
If c = 0 Then
MsgBox "不存在 不用刪除"
Exit Sub
Else
r = .[b:b].Find([g3], searchdirection:=xlNext).Row
.Range(r & ":" & r + c - 1).Delete
End If
End With
End Sub
五 修改功能
Sub 修改()
Call 刪除
Call haa4
End Sub