十六講 單元格的查找

入庫(kù)單的輸入,查找,刪除與修改

一 查找功能

在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("庫(kù)存明細(xì)表").[b:b], [g3])

If icount > 0 Then??? ‘1.涉及到查找單據(jù)號(hào)碼在庫(kù)存明細(xì)表中是否存在

MsgBox "該入庫(kù)單已存在,請(qǐng)不要重復(fù)錄入"

MsgBox Application.WorksheetFunction.Match([g3], Sheets("庫(kù)存明細(xì)表").[b:b], 0)??????? ’2.在庫(kù)存明細(xì)表中查找單據(jù)號(hào)碼第一次出現(xiàn)的位置

End If

End Sub

涉及到match函數(shù)

以下信息選自https://zhidao.baidu.com/question/514555586.html

MATCH函數(shù)語(yǔ)法:MATCH(lookup_value, lookup_array, match_type)

lookup_value:需要在數(shù)據(jù)表(lookup_array)中查找的值。可以為數(shù)值(數(shù)字、文本或邏輯值)或?qū)?shù)字、文本或邏輯值的單元格引用??梢园ㄅ浞⑿翘?hào) (*) 和問(wèn)號(hào) (?)。星號(hào)可以匹配任何字符序列;問(wèn)號(hào)可以匹配單個(gè)字符。

lookup_array:可能包含有所要查找數(shù)值的連續(xù)的單元格區(qū)域,區(qū)域必須是某一行或某一列,即必須為一維數(shù)據(jù),引用的查找區(qū)域是一維數(shù)組。

match_type:表示查詢(xún)的指定方式,用數(shù)字-1、0或者1表示。

為1時(shí),查找小于或等于lookup_value的最大數(shù)值在lookup_array中的位置,lookup_array必須按升序排列:

為0時(shí),查找等于lookup_value的第一個(gè)數(shù)值,lookup_array按任意順序排列:

為-1時(shí),查找大于或等于lookup_value的最小數(shù)值在lookup_array中的位置,lookup_array必須按降序排列。利用MATCH函數(shù)查找功能時(shí),當(dāng)查找條件存在時(shí),MATCH函數(shù)結(jié)果為具體位置(數(shù)值),否則顯示#N/A錯(cuò)誤。

MATCH函數(shù):匹配函數(shù),指返回指定數(shù)值在指定數(shù)組區(qū)域中的位置。MATCH函數(shù)是EXCEL主要的查找函數(shù)之一,該函數(shù)通常有以下幾方面用途:

(1)確定列表中某個(gè)值的位置;

(2)對(duì)某個(gè)輸入值進(jìn)行檢驗(yàn),確定這個(gè)值是否存在某個(gè)列表中;

(3)判斷某列表中是否存在重復(fù)數(shù)據(jù);

(4)定位某一列表中最后一個(gè)非空單元格的位置。

1.2? 使用find函數(shù)查找

Sub haa2()

Dim r As Integer, r1 As Integer

Dim icount As Integer

icount = Application.WorksheetFunction.CountIf(Sheets("庫(kù)存明細(xì)表").[b:b], [g3])

If icount > 0 Then

r = Sheets("庫(kù)存明細(xì)表").[b:b].Find([g3], lookat:=xlWhole).Row

r1 = Sheets("庫(kù)存明細(xì)表").[b:b].Find([g3], searchdirection:=xlPrevious).Row

'在庫(kù)存明細(xì)表中查找單據(jù)號(hào)碼最后一個(gè)的位置。

MsgBox r & ":" & r1

End If

End Sub


如何返回最下一行非空行的行數(shù)

Sub haa3()

MsgBox Sheets("庫(kù)存明細(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ì)信息,請(qǐng)參閱F1幫助中在 Visual Basic 中使用工作表函數(shù)。

expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SerchFormat)

expression? ?? ?必需。該表達(dá)式返回一個(gè) Range 對(duì)象。

What? ?? ?Variant 類(lèi)型,必需。要搜索的數(shù)據(jù)。可為字符串或任意 Microsoft Excel 數(shù)據(jù)類(lèi)型。

After? ?? ?Variant 類(lèi)型,可選。表示搜索過(guò)程將從其之后開(kāi)始進(jìn)行的單元格。此單元格對(duì)應(yīng)于從用戶(hù)界面搜索時(shí)的活動(dòng)單元格位置。值得注意的是,After 必須是區(qū)域中的單個(gè)單元格。請(qǐng)記住搜索是從該單元格之后? ?開(kāi)始的;直到本方法繞回到指定的單元格時(shí),才對(duì)其進(jìn)行搜索。如果未指定本參數(shù),搜索將從區(qū)域的左上角單元格之后開(kāi)始。

LookIn? ?? ?Variant 類(lèi)型,可選。信息類(lèi)型。

LookAt? ?? ?Variant 類(lèi)型,可選??蔀橐韵?XlLookAt 常量之一:xlWhole 或 xlPart。

SearchOrder? ?? ?Variant 類(lèi)型,可選。可為以下 XlSearchOrder 常量之一:xlByRows 或 xlByColumns。

SearchDirection? ?? ?XlSearchDirection 類(lèi)型,可選。搜索的方向。

XlSearchDirection 可為以下 XlSearchDirection 常量之一。

xlNext 默認(rèn)值

xlPrevious

MatchCase? ?? ?Variant 類(lèi)型,可選。若為 True,則進(jìn)行區(qū)分大小寫(xiě)的查找。默認(rèn)值為 False。

MatchByte? ?? ?Variant 類(lèi)型,可選。僅在選擇或安裝了雙字節(jié)語(yǔ)言支持時(shí)使用。若為 True,則雙字節(jié)字符僅匹配雙字節(jié)字符。若為 False,則雙字節(jié)字符可匹配其等價(jià)的單字節(jié)字符。

SearchFormat? ?? ?Variant 類(lèi)型,可選。搜索的格式。

說(shuō)明每次使用本方法后,參數(shù) LookIn、LookAt、SearchOrder 和 MatchByte 的設(shè)置將保存。如果下次調(diào)用本方法時(shí)不指定這些參數(shù)的值,就使用保存的值。設(shè)置這些參數(shù)將更改“查找和替換”對(duì)話框中的設(shè)置,如果您忽略參數(shù),更改“查找和替換”對(duì)話框中的設(shè)置將更改使用的保存值。若要避免這種問(wèn)題的出現(xiàn),每次使用該方法時(shí)請(qǐng)明確設(shè)置這些參數(shù)。

可以使用 FindNext和 FindPrevious方法重復(fù)搜索。

當(dāng)搜索到指定的搜索區(qū)域的末尾時(shí),本方法將繞回到區(qū)域的開(kāi)始繼續(xù)搜索。發(fā)生繞轉(zhuǎn)后,若要停止搜索,請(qǐng)保存第一個(gè)找到的單元格地址,然后依據(jù)該保存地址測(cè)試每個(gè)后續(xù)查找到的單元格地址。

若要進(jìn)行更為復(fù)雜的模式匹配查找,請(qǐng)用 For Each...Next 語(yǔ)句和 Like 運(yùn)算符。例如,下列代碼在單元格區(qū)域 A1:C5 中搜索字體名稱(chēng)以“Cour”開(kāi)始的單元格。當(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

--------------------------------------------------------

下面是幾個(gè)蘭色版主以前的教學(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() '字母大小寫(xiě)

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


二 入庫(kù)單的輸入功能

Sub haa4()

Dim c As Integer '號(hào)碼在庫(kù)存表中的個(gè)數(shù)

Dim r As Integer '入庫(kù)單的數(shù)據(jù)行數(shù)

Dim cr As Integer ' 庫(kù)存明細(xì)表中第一個(gè)空行的行數(shù)

With Sheets("庫(kù)存明細(xì)表")

c = Application.CountIf(.[b:b], [g3])

If c > 0 Then

MsgBox "已存在,不要重復(fù)錄入"

Exit Sub

Else

r = Application.CountIf([b6:b10], "<>")??? ‘計(jì)算b6到b10之間的非空單元格個(gè)數(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ù)號(hào)碼在庫(kù)存表中的個(gè)數(shù)

Dim r As Integer '入庫(kù)單的數(shù)據(jù)行數(shù)

With Sheets("庫(kù)存明細(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 '號(hào)碼在庫(kù)存表中的個(gè)數(shù)

Dim r As Integer? ' 入庫(kù)單的數(shù)據(jù)行數(shù)

With Sheets("庫(kù)存明細(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容