日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

VBA基礎(chǔ)16--單元格查找

 L羅樂(lè) 2017-05-24

Option Explicit

'1 使用循環(huán)查找 (在單元格中查找效率太低)

'2 調(diào)用工作表函數(shù)

    Sub c1()         '判斷是否存在,并查找所在行數(shù)
      Dim hao As Integer
      Dim icount As Integer
      icount = Application.WorksheetFunction.CountIf(Sheets('庫(kù)存明細(xì)表').[b:b], [g3])      '調(diào)用 Excel 程序的工作表函數(shù) CountIf 統(tǒng)計(jì) B 列中 與G3單元格值相同的單元格的數(shù)量
      If icount > 0 Then   '如果數(shù)量大于0
       MsgBox '該入庫(kù)單號(hào)碼已經(jīng)存在,請(qǐng)不要重復(fù)錄入'     '彈窗提示
       MsgBox Application.WorksheetFunction.Match([g3], Sheets('庫(kù)存明細(xì)表').[b:b], 0)           '調(diào)用 工作表函數(shù) Match 函數(shù),要匹配的值是 g3 單元格的值,查找的范圍是 B 列,匹配方式是 0,即找到第一個(gè)匹配的值
      End If
    End Sub

***********************************************

'3 使用Find方法(上一節(jié)有 Find 語(yǔ)法的說(shuō)明資料)

    Sub c2()
      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(Range('G3'), Lookat:=xlWhole).Row    
        '查找號(hào)碼第一次出現(xiàn)的位置,Lookat 參數(shù)指的是匹配方式,xlWhole是完全匹配,xlPart 是部分匹配,這里顯示說(shuō)明了參數(shù) Lookat 及參數(shù)值,與下面的方式不同,下面的方式是通過(guò)位置去匹配的。
       r1 = Sheets('庫(kù)存明細(xì)表').[b:b].Find([g3], , , , , xlPrevious).Row 
       '可以參考前一節(jié) find 函數(shù)的語(yǔ)法,find 共有9個(gè)參數(shù),除了第1個(gè),后面的都是可選參數(shù),但如此例要使用第6個(gè)參數(shù)時(shí),前面不指定的參數(shù)要用逗號(hào)表示以匹配參數(shù)的位置,后面的則可以省略。
       MsgBox r & ':' & r1
      End If
    End Sub

**********************************************

   Sub c3()      '返回最下一行非空行的行數(shù)

      MsgBox Sheets('庫(kù)存明細(xì)表').Cells.Find('*', , , , , xlPrevious).Row   
         '彈窗信息,在 “庫(kù)存明細(xì)表”里的單元格集合中搜索最一個(gè)非空單元格,第1參數(shù)是 星號(hào),表示有任意內(nèi)容的單元格,xlPrevious 是搜索方向向前找,即向下,xlNext向后,即向上

   End Sub


==============================
入庫(kù)單實(shí)例圖及代碼

圖1

圖2

Option Explicit
Sub 輸入()   '此過(guò)程實(shí)現(xiàn)入庫(kù)單的錄入操作
  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ì)表')       '注意:當(dāng)前操作的表是 入庫(kù)單 這個(gè)表,即 上圖1 ,這里有個(gè) With 的使用,即使用 庫(kù)存表的屬性
    c = Application.CountIf(.[b:b], Range('g3'))   '在 圖2 這個(gè)庫(kù)存表中的 b 列查找 與 圖1 入庫(kù)單 的 G3 單元格 即單號(hào) 相匹配的 行數(shù)有多少,也就是查找當(dāng)前單號(hào)下有幾個(gè)商品
    If c > 0 Then    '如果商品數(shù)量大于0
       MsgBox '該單據(jù)號(hào)碼已經(jīng)存在!,請(qǐng)不要重復(fù)錄入' 
       Exit Sub
    Else    '否則,即如果不存在這個(gè)單號(hào)的話(huà)
       r = Application.CountIf(Range('b6:b10'), '<>')   '獲取 B6:B10區(qū)域中,非真空即單元格內(nèi)容不為空的單元格個(gè)數(shù),或著當(dāng)前單據(jù)里有商品多少個(gè)
       cr = .[b65536].End(xlUp).Row 1             '只要用到庫(kù)存表,因?yàn)榍耙呀?jīng)使用了 with,這里可以省略為 點(diǎn),表示庫(kù)存表中 B 列最后一個(gè)有效單元格的行號(hào)再加 1,即定位到 這個(gè)單元格的下方單元格
         '如上圖2示,即定位到 B8 單元格的行號(hào)


      圖3 圖4
       參考上圖看下面代碼
       .Cells(cr, 1).Resize(r, 1) = Range('e3')    '將入庫(kù)單(圖3)里的日期 寫(xiě)入 到庫(kù)存表(圖4)里
       .Cells(cr, 2).Resize(r, 1) = Range('g3')   '將入庫(kù)單的單號(hào)寫(xiě)入到庫(kù)存表
       .Cells(cr, 3).Resize(r, 1) = Range('c3')    '將入庫(kù)單的供貨公司名寫(xiě)入到庫(kù)存表
       .Cells(cr, 4).Resize(r, 6) = Cells(6, 2).Resize(r, 6).Value   '最后將入庫(kù)單里的 3 個(gè)商品 寫(xiě)入到庫(kù)存表里去
       MsgBox '輸入已完成'
    End If
End With
End Sub

*******************************************************
Sub 查找()   '實(shí)現(xiàn)入庫(kù)單查尋功能
  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], Range('g3'))   '同樣是先到庫(kù)存表里 根據(jù)單號(hào)去查尋此入庫(kù)單里有幾個(gè)商品
    If c = 0 Then '如果結(jié)果是0,表示不存在這個(gè)入庫(kù)單
       MsgBox '該單據(jù)號(hào)碼不存在!'
       Exit Sub
    Else   '否則就把獲取到的單據(jù)商品信息給調(diào)到入庫(kù)單里去
        r = .[b:b].Find(Range('g3'), , , , , xlNext).Row    '使用 Find 函數(shù),在庫(kù)存表里向上查找最頂端的與當(dāng)前單號(hào)匹配的行的行號(hào)
        Range('c3') = .Cells(r, 3)     '從庫(kù)存表中提取公司名到入庫(kù)對(duì)應(yīng) 單頭的 單位位置,即入庫(kù)單的 C3 單元格
        Range('e3') = .Cells(r, 1)    '提取日期
        Cells(6, 2).Resize(c, 5) = .Cells(r, 4).Resize(c, 5).Value   '然后就是此單號(hào)下的所有商品
       MsgBox '查詢(xún)已完成'
    End If
End With
End Sub

************************************************

Sub 刪除()     '刪除 指定 入庫(kù)單的操作
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], Range('g3'))     '在庫(kù)存表里的 B 列查尋當(dāng)前單號(hào)下商品的數(shù)量
    If c = 0 Then
       MsgBox '該單據(jù)號(hào)碼不存在!'
       Exit Sub
    Else
        r = .[b:b].Find(Range('g3'), , , , , xlNext).Row    '庫(kù)存表中  找到第 1 個(gè)商品,并定位它的行號(hào)
        .Range(r & ':' & c r - 1).Delete   '根據(jù)定位的行號(hào)和商品數(shù)量,將它從庫(kù)存表中刪除。
       MsgBox '刪除已完成'
    End If
End With
*********************************************
'由于這不同于 真正的 ERP 系統(tǒng),在 EXCEL 表中,要修改一個(gè)單據(jù)信息,只需要先查尋,再刪除,然后修改后重新錄入一下就好,
'因?yàn)檫@里的刪除,只在庫(kù)存表清除了數(shù)據(jù),但入庫(kù)單里的信息還在,作個(gè)修改再錄入即可實(shí)現(xiàn)修改。
End Sub
Sub 修改()    
  Call 刪除
  Call 輸入
End Sub

=========================
Excel中MATCH函數(shù)是一個(gè)很強(qiáng)大的輔助函數(shù),

MATCH函數(shù)語(yǔ)法為:MATCH(lookup_value,lookuparray,match-type)

lookup_value:表示查詢(xún)的指定內(nèi)容;

lookuparray:表示查詢(xún)的指定區(qū)域;

match-type:表示查詢(xún)的指定方式,用數(shù)字-1、0或者1表示,具體如圖:

=============================
關(guān)于CountIF 的使用

許多EXCEL問(wèn)題都涉及數(shù)據(jù)計(jì)數(shù),對(duì)于一些簡(jiǎn)單的計(jì)數(shù),通常使用COUNT函數(shù)或COUNTA函數(shù)就可以解決。然而,在實(shí)際的業(yè)務(wù)處理當(dāng)中,往往存在諸多條件的限制,僅僅使用簡(jiǎn)單的統(tǒng)計(jì)函數(shù)是無(wú)法滿(mǎn)足人們的實(shí)際需求的,例如多條件計(jì)數(shù)、統(tǒng)計(jì)不重復(fù)個(gè)數(shù)等。

例如,在一個(gè)EXCEL表格中,D列是考生的數(shù)學(xué)考試成績(jī),我們想統(tǒng)計(jì)數(shù)學(xué)成績(jī)及格的人數(shù)??梢允褂谩?COUNTIF(D,'>=60')”來(lái)實(shí)現(xiàn)。

本例中,COUNTIF函數(shù)可以對(duì)區(qū)域中滿(mǎn)足單個(gè)條件的單元格區(qū)域進(jìn)行計(jì)數(shù)。語(yǔ)法如下:

COUNTIF(參數(shù)一,參數(shù)二),其中
    參數(shù)一為需要計(jì)算其中滿(mǎn)足條件的單元格數(shù)目的單元格區(qū)域,
    參數(shù)二是用于定義將對(duì)哪些單元格進(jìn)行計(jì)數(shù)的數(shù)字、表達(dá)式、單元格引用或文本字符串。

COUNTIF函數(shù)的常見(jiàn)用法如下:(假如數(shù)據(jù)所在單元格區(qū)域命名為“ Data ”)
公 式 說(shuō) 明
=COUNTIF(Data,'=') 返回真空單元格個(gè)數(shù)(真空單元格是指什么都沒(méi)有的單元格,空的單元格)

=COUNTIF(Data,'') 返回真空 假真空單元格個(gè)數(shù)(假真空是指0字符的空文本) 

=COUNTIF(Data,'<>') 返回非真空單元格個(gè)數(shù) 

=COUNTIF(Data,'*') 返回文本型單元格個(gè)數(shù)

=COUNTIF(Data,'<9.99E 307') 返回?cái)?shù)值型單元格個(gè)數(shù)

=COUNTIF(Data,'<>''') 返回區(qū)域內(nèi)所有單元格個(gè)數(shù)

=COUNTIF(Data,'<0') 返回偶包含負(fù)值的單元格個(gè)數(shù)

=COUNTIF(Data,'<>0') 返回真不等于零的單元格個(gè)個(gè)數(shù)

=COUNTIF(Data,60) 返回值等于60的單元格個(gè)數(shù)

=COUNTIF(Data,'>60') 返回值大于60的單元格個(gè)數(shù)

=COUNTIF(Data,'<60') 返回值小于60的單元格個(gè)數(shù)

=COUNTIF(Data,'>=60') 返回值大于等于60的單元格個(gè)數(shù)

=COUNTIF(Data,'<=60') 返回值小于等于60的單元格個(gè)數(shù)

=COUNTIF(Data,A1) 返回值與A1單元格內(nèi)容相同的單元格個(gè)數(shù)

=COUNTIF(Data,'>'&A1) 返回值大于A1單元格內(nèi)容的單元格個(gè)數(shù)

=COUNTIF(Data,'<'&A1) 返回值小于A1單元格內(nèi)容的單元格個(gè)數(shù)

=COUNTIF(Data,'???') 返回字符等于3的單元格個(gè)數(shù)

=COUNTIF(Data,'YDL') 返回值等于YDL的單元格個(gè)數(shù)

=COUNTIF(Data,'YDL?') 返回以字母YDL開(kāi)頭且字符數(shù)等于4的單元格個(gè)數(shù)

=COUNTIF(Data,'YDL*') 返回以字母YDL開(kāi)頭的文本單元格的個(gè)數(shù)

=COUNTIF(Data,'?YDL*') 返回第2,3,4字符為YDL的單元格個(gè)數(shù)

=COUNTIF(Data,'*YDL*') 返回含的YDL字符的單元格個(gè)數(shù)

=COUNTIF(Data,'*'&A1&'*') 返回包含A1單元格內(nèi)容的文本單元格個(gè)數(shù)

=COUNTIF(Data,TODAY()) 返回值等于當(dāng)前日期的單元格個(gè)數(shù)

=COUNTIF(Data,'>'&AVERAGE(Data)) 返回大于均值的單元格個(gè)數(shù)

=SUM(COUNTIF(Data,'>'&{10,15})*{1,-1}返回大于10小于等于15的單元格個(gè)數(shù)

=SUM(COUNTIF(Data,{TRUE,FALSE})) 返回包含邏輯值的單元格個(gè)數(shù)

特別指出的是,在EXCEL2010中,新增了一個(gè)多條件計(jì)數(shù)函數(shù),那就是“COUNTIFS” ,假如在一個(gè)EXCEL表格中,D350單元格的內(nèi)容是職工的年齡,E3:E50單元格的內(nèi)容是是否有房,F(xiàn)3:F50單元格的內(nèi)容是是否有車(chē),那么統(tǒng)計(jì)職工中35歲以上有房有車(chē)的人數(shù)應(yīng)該用如下公式:

COUNTIFS(D350,'>35',E3:E50,'是',F3:F50,'是')



    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多