十六講 單元格的查找

入庫單的輸入浓恶,查找,刪除與修改

一 查找功能

在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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宙橱,隨后出現(xiàn)的幾起案子姨俩,更是在濱河造成了極大的恐慌,老刑警劉巖师郑,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件环葵,死亡現(xiàn)場離奇詭異,居然都是意外死亡宝冕,警方通過查閱死者的電腦和手機(jī)张遭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來地梨,“玉大人菊卷,你說我怎么就攤上這事”ζ剩” “怎么了洁闰?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長万细。 經(jīng)常有香客問我扑眉,道長,這世上最難降的妖魔是什么赖钞? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任腰素,我火速辦了婚禮,結(jié)果婚禮上仁烹,老公的妹妹穿的比我還像新娘耸弄。我一直安慰自己咧虎,他們只是感情好卓缰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般征唬。 火紅的嫁衣襯著肌膚如雪捌显。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天总寒,我揣著相機(jī)與錄音扶歪,去河邊找鬼。 笑死摄闸,一個胖子當(dāng)著我的面吹牛善镰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播年枕,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼炫欺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了熏兄?” 一聲冷哼從身側(cè)響起品洛,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摩桶,沒想到半個月后桥状,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡硝清,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年辅斟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芦拿。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡砾肺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出防嗡,到底是詐尸還是另有隱情变汪,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布蚁趁,位于F島的核電站裙盾,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏他嫡。R本人自食惡果不足惜番官,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钢属。 院中可真熱鬧徘熔,春花似錦、人聲如沸淆党。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至山孔,卻和暖如春懂讯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背台颠。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工褐望, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人串前。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓瘫里,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荡碾。 傳聞我的和親對象是個殘疾皇子减宣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容