在多個工作表中查找用戶需求的某個給定值

2020-12-19 VBA語言專家

大家好,我們今日講解「如何在多個工作表中查找某個給定值」,這節內容是「VBA信息獲取與處理」教程中第四個專題「EXCEL工作表數據的讀取、回填和查找」的第六節。

第六節 如何在多個工作表中查找某個給定值

大家好,我們今天講這個專題的最後一講,如何在多個工作表中查找某個給定值,當然要求這個給定的值在一個工作表中要是單一的值,如果是多個值我們可以稍微改一下代碼即可,我們不再做詳細講解。

1 在多個工作表中查找給定值要首先求出每個工作表的名稱

求出每個工作表的名稱,我們只需用ThisWorkbook.Worksheets.Item(i).Name即可以完成,我們看下面的代碼:

Dim WSArray()

n = ThisWorkbook.Worksheets.Count

ReDim WSArray(1 To n)

For i = 1 To n

WSArray(i) = ThisWorkbook.Worksheets.Item(i).Name

Next

代碼解讀:

上述代碼首先建立了一個動態數組WSArray(),這個動態數組將用來存儲各個工作表的名稱。變量n指的是當前工作薄所有工作表的數量,取得這個數量後,我們重讀這個動態數組,然後給數組賦值。

2 利用單值查找的程序完成餘下的工作

當我們取得後每個工作表的名稱後,我們就可以在每個工作表中進行查找,並將結果放到Cells(i, "i")單元格中,我們看下面的代碼:

Sheets("Sheet7").Select

Range("i2 : I3000").ClearContents

i = 2

Do While Cells(i, "h") <> ""

UU = Cells(i, "h")

For t = 1 To n

Set FJX = Sheets(WSArray(t)).Columns("A").Find(UU, lookat:=xlWhole)

If Not FJX Is Nothing Then

Cells(i, "i") = Cells(i, "i") & " " & Sheets(WSArray(t)).Cells(FJX.Row, 2).Value

End If

Next

Set FJX = Nothing

i = i + 1

Loop

代碼講解:Cells(i, "i") = Cells(i, "i") & " " & Sheets(WSArray(t)).Cells(FJX.Row, 2).Value 這句代碼中Sheets(WSArray(t))就是正在執行查找的工作表的名稱。這個名稱由數組的值確定,對於每個工作表都執行類似的操作後,指定單元格中就得到了最後的查詢結果。另外需要注意的是我這裡給出的是一個完全匹配查找,大家在實際利用的時候可以進行換成不完全匹配查找。

3 多工作表查詢的總代碼

最後我給出整個過程的代碼:

Sub MYNZK() '多工作表,每個工作表為唯一查詢

Dim WSArray()

Dim FJX As Variant

n = ThisWorkbook.Worksheets.Count

ReDim WSArray(1 To n)

For i = 1 To n

WSArray(i) = ThisWorkbook.Worksheets.Item(i).Name

Next

Sheets("Sheet7").Select

Range("i2 : I3000").ClearContents

i = 2

Do While Cells(i, "h") <> ""

UU = Cells(i, "h")

For t = 1 To n

Set FJX = Sheets(WSArray(t)).Columns("A").Find(UU, lookat:=xlWhole)

If Not FJX Is Nothing Then

Cells(i, "i") = Cells(i, "i") & " " & Sheets(WSArray(t)).Cells(FJX.Row, 2).Value

End If

Next

Set FJX = Nothing

i = i + 1

Loop

MsgBox ("OK")

End Sub

代碼截圖:

代碼的注意點:工作表名稱的利用要注意是當前正在查詢工作表,被查詢的數據位於Sheets("Sheet7")的H列,結果返回到I列。

由於代碼比較簡單,這裡就不再過多的講解了,下面看返回的結果:

最後我再給出幾個問題的引申:

1)如果要查詢的工作表是給定的呢?該如何處理?

2)如果每個工作表中的數據不是唯一的值,該如何處理?

本節知識點回向:如何實現多工作表中的查詢?實現過程中的關鍵點是什麼?

本專題參考程序文件:004工作表.XLSM

VBA是利用Office實現自己小型辦公自動化的有效手段,這是我對VBA的應用界定。在取代OFFICE新的辦公軟體沒有到來之前,誰能在數據處理方面做到極致,誰就是王者。其中登峰至極的技能非VBA莫屬!學習VBA是個過程,也需要經歷一種枯燥的感覺,如太白詩云:眾鳥高飛盡,孤雲獨去閒。相看兩不厭,只有敬亭山。

「水善利萬物而不爭」,綿綿密密,微則無聲,巨則洶湧。學習亦如此,知道什麼是自己所需要的,不要蜷縮在一小塊自認為天堂的世界裡,待到暮年時再去做自欺欺人的言論。要努力提高自己,用一顆充滿生機的心靈,把握現在,這才是進取。越是有意義的事情,困難會越多。願力決定始終,智慧決定成敗。不管遇到什麼,都是風景。看淡紛爭,看輕得失。茶,滿也好,少也好,不要計較;濃也好,淡也好,其中自有值得品的味道。去感悟真實的時間,靜下心,多學習,積累福報。而不是天天混日子,也不是天天熬日子。在後疫情更加嚴峻的存量殘殺世界中,為自己的生存進行知識的儲備,特別是新知識的儲備。學習時微而無聲,利用時則巨則洶湧。

我記得20年前自己初學VBA時,那時的資料甚少,只能看源碼自己琢磨,真的很難。20年過去了,為了不讓學習VBA的朋友重複我之前的經歷,我根據自己多年VBA實際利用經驗,推出了六部VBA專門教程。

第一套:VBA代碼解決方案是VBA中各個知識點的講解,覆蓋絕大多數的VBA知識點,初學必備;

第二套:VBA資料庫解決方案資料庫是數據處理的專業利器,教程中詳細介紹了利用ADO連接ACCDB和EXCEL的方法和實例操作,適合中級人員的學習。

第三套:VBA數組與字典解決方案數組和字典是VBA的精華,字典是VBA代碼水平提高的有效手段,值得深入的學習,是初級及中級人員代碼精進的手段。

第四套:VBA代碼解決方案之視頻是專門面向初學者的視頻講解,可以快速入門,更快的掌握這門技能。

第五套:VBA中類的解讀和利用是一部高級教程,講解類的虛無與肉身的度化,類的利用雖然較少,但仔細的學習可以促進自己VBA理論的提高。

第六套教程:《VBA信息獲取與處理》是一部高級教程,涉及範圍更廣,實用性更強,面向中高級人員。教程共二十個專題,包括:跨應用程式信息獲得、隨機信息的利用、電子郵件的發送、VBA網際網路數據抓取、VBA延時操作,剪切板應用、Split函數擴展、工作表信息與其他應用交互,FSO對象的利用、工作表及文件夾信息的獲取、圖形信息的獲取以及定製工作表信息函數等等內容。如需要可以可以WeChat: NZ9668

學習的過程也是修心的過程,修一個平靜的心。在代碼的世界中,心平靜了,心情好了,身體自然而然就好。心靜則正,內心裡沒有那麼多邪知邪見,也就沒有那麼多妄想。利人就是利己。這些教程也是為幫助大家起航,助上我自己之力,我的上述教程是我多的經驗的傳遞,大家可以根據以上資料1,3,2,6,5或者是4,3,2,6,5的順序逐漸深入的逐漸學習。

每一分收穫都是成長的記錄,怎無憑,正是這種執著,成就了朝霞的燦爛。最後將一闕詞送給致力於VBA學習的朋友,讓大家感受一下學習過程的枯燥與執著:

浮雲掠過,暗語無聲,

唯有清風,驚了夢中啼鶯。

望星,疏移北鬥,

奈將往事雁同行。

阡陌人,昏燈明暗,

忍顧長亭。

多少VBA人,

暗夜中,悄聲尋夢,盼卻天明。

怎無憑!

分享成果,隨喜正能量

相關焦點

  • Excel工作表中最常用的9類21個函數,動圖演示,中文解讀!
    二、Excel工作表函數:判斷類。(一)If。功能:判斷是否滿足某個條件,如果滿足返回一個值,如果不滿足則返回另一個值。功能:判斷是否滿足一個或多個條件並返回與第一個TRUE條件對應的值。語法結構:=Ifs(條件1,返回值1,條件2,返回值2……)。
  • 辦公室必備的Excel工作表函數應用技巧解讀!
    Excel工作表中的函數是非常繁多的,如果要全部掌握,還是有一定困難的的,但是對於一些辦公室必備的函數公式,我們一定要掌握,並能靈活的加以應用!一、Excel工作表函數:IF。功能:判斷是否滿足某個條件,如果滿足條件返回一個值,不滿足則返回另外一個值。語法結構:=If(判斷條件,條件成立時的返回值,條件不成立時的返回值)。
  • 辦公軟體操作技巧53:如何在excel中對比兩個工作表數據的異同
    在日常工作中,我們有時需要對兩個excel工作表中的數據進行匹配,找出兩個相似度很高的工作表中數據的相同或者不同之處,今天就來給大家分享幾種查找對比的方法。首先,需要把兩個工作表複製到同一個工作簿中,如下圖把需要對比的兩個工作表「表一」和「表二」複製到同一個工作簿「統計表」中;
  • Excel函數簡單入門 用於查找某個值位置的MATCH函數
    MATCH函數是EXCEL主要的查找函數之一,可以用來返回指定數值在數組區域中的位置(是位置,位置,重要的事情講三次),在和其他函數相互進行嵌套的時候,往往能顯示出其功能的強大;MATCH函數是通常有以下幾方面用途:(1)確定列表中某個值的位置(有這個值的情況下); (2)對某個輸入值進行檢驗
  • VBA代碼解決方案第58講:在VBA中查找指定工作表的實用方法
    大家好,我們今日繼續講解VBA代碼解決方案的第58講內容:在VBA中查找指定工作表的方法。在上一個例子中,我們通過一個自定義函數解決了刪除工作表的方法。在完成某項目的也是如此,如果不是用自定義函數,只是用遍歷工作表的方法也可以實現的。今天的例子也是如此。所以有的朋友自認為自己有更好的方法,其實,有些時你是對的,或者說是對的,但對於做程序的人來說不一定會採用你認為好的方法,就這麼簡單。今天我們講查找某個工作表的方法,在實際的應用中往往要先查到某個工作表,然後再進行操作控制。
  • 必學Excel查找與引用函數,將表格變成智能資料庫(下)
    1.使用INDEX函數在引用中查找值INDEX函數用於返回指定的行與列交叉處的單元格引用。如果引用由不連續的選定區域組成,可以選擇某一選定區域。函數語法:= INDEX(reference, row_num, [column_num], [area_num])。
  • Excel工作表中最常用的10個函數,中文解讀,動圖演示,易學易用
    Excel工作表中的函數是非常的繁多的,如果要全部掌握,幾乎是不可能的,也沒有這個必要,不用行業,不同部門對函數需求都不同,所以,只需要掌握自己常用的部分函數即可,但是,下文中的10個函數是部分行業和部門的,所有的從業人員必須100%全部掌握!
  • Excel小技巧:vlookup函數合併多個工作表
    有時候會經常從同事那裡收集的工作表需要匯總在同一張工作表中,使用vlookup函數教你快速合併:首先如果我們先要查詢1月的利潤表在F5中輸入1月的公式=VLOOKUP($E5,'2019年1月'!A:B,2,0)從此可以看出變化的就是工作表的名稱,我們就使用一個indirect函數來構造出來就行了因此F5中的公式就變為=VLOOKUP($E5,INDIRECT(F$4&"!
  • Excel中多個工作表不同位置數據,如何進行求和?
    最近收到一個典型案例,Excel中多個工作表不同位置數據,如何進行求和。 具體如下: 一個Excel文件中,有多個sheet工作表,「一月」,「二月」,「三月」。
  • 查找c++
    查找(Searching)就是根據給定的某個值,在查找表中確定一個其關鍵字等於給定值的數據元素。關鍵字是數據元素中某個數據項的值,又稱鍵值。查詢某個「特定的」數據元素是否在查找表中。檢索某個「特定的」數據元素和各種屬性。
  • Excel中怎麼查找小於某個值的所有數且標記顏色
    如果想在一個數據較多的Excel表格中找到所有小於某個值的數,並且把找到的數據都標記出來,我們可以考慮使用兩種方法,一種是利用Excel的查找功能來實現,另一種是利用Excel的「條件格式」來實現,下面介紹一下這兩種方法如何操作,以供參考。
  • 使用VBA,一鍵查找出多個工作簿下所有工作表內的值
    前幾天寫了一個一鍵合併多個EXCEL工作簿的代碼之後,有網友提出能不能寫一個一鍵查找多個工作簿下所有工作表內的值,並將這些值自動標紅的代碼。我覺得這是個非常實用的技能,於是花了點心思研究出來了,並稍稍將代碼優化了下,以便適應於更多場景。
  • Excel 2016中使用查找替換功能應用技巧
    下面說下在Excel2016中查找和替換功能的使用。一、打開方式快捷鍵:ctrl+F或ctrl+H二、查找範圍1.局部查找:首先確定查找範圍,如:想查找A行,則選中A行,再打開「查找替換」功能。2.全部查找:當查找範圍為工作表或工作簿(工作簿包括多個工作表),隨意單擊任意單元格查找。
  • excel查找重複內容或不同的內容,利用條件格式輕鬆快速查找
    工作中,我們需要對excel工作表中的重複值進行核對,利用excel條件格式功能,可輕鬆快速解決這類問題。在工具欄開始—條件格式菜單下,下拉列表中有這個功能。1、在同一個工作表中查找重複值我們要查找同一個工作表中的重複值,選中表格,點擊條件格式—突出顯示單元格規則—重複值。確定後重複的值會指定的顏色的填充單元格。除了查找重複,還可以找不相同不重複的,在對話框中選擇唯一,就選定了唯一的值。並且對於填充的顏色也可以根據自己的喜好設置。
  • 利用VBA代碼實現多重查找、模糊查找、清除值的方案
    大家好,今日內容仍是和大家分享VBA編程中常用的簡單「積木」過程代碼,第NO.111-NO.113則,內容是:利用FindNext完成多重查找、利用ClearContents完成清除值的操作、利用FIND完成模糊查找等內容。
  • C++語言編程技巧:給定一個數,如何在數組中查找與之相鄰的數值
    在編寫測試測量類的儀器軟體時,一些需要用戶輸入的參數,這些參數可能只能取一些離散的數值,如頻譜儀軟體中設置解析度帶寬時,可能只能取{1、2、5、10、20、50、100}裡面的數值,這時需要將用戶輸入的1-100之內的任意數值要規整為這個數組裡面的值。
  • 怎麼搜索Excel中的全部工作表(sheet)
    使用Excel時,經常需要在表格中查找指定的數據或者文字等內容。當然,查找的操作比較簡單,但Excel中默認只是在當前的工作表(Sheet)中進行查找。如果一個Excel工作簿(或者說是一個Excel文檔)中有很多工作表,那麼要想在所有的工作表中查找指定內容,默認設置下就需要逐個打開各個工作表,再逐個進行查找操作。這種情況時我們可以在查找時特別設置一下,讓Excel在當前工作簿的所有工作表中進行查找,從而提高工作效率。下面以Excel2007為例介紹如何設置,以供參考。
  • 如何才能讓 Excel 工作表中的 0 和錯誤值都不顯示?
    當一張數據表中有很多公式時,有時會出現錯誤值,比如被除數為 0、查找的值不存在等,如何不顯示錯誤值?這個相信很多同學都已經會了,我在以往的推文中多次教過大家使用 iferror 或 iserror 函數去除錯誤值。
  • 如何按需求拆分到多個工作表
    工作中我們經常會遇到這種情況,所有的數據都整合在一個表格裡面了,現在想按需求分別拆分成多個工作表,有什麼好辦法嗎?利用透視表,我們就可以輕鬆解決。如下圖所示,從銷售一部到銷售七部的所有業績,全部都在一個表裡面,現在我們將表格中數據拆分到7個工作表中,並自動命名。
  • Excel快速製作目錄,輕鬆管理多個工作表!
    如下所示:如果我們的工作表太多,找到每個工作表,左右點擊很多次,很麻煩!當然有一個技巧是我們將滑鼠放在下面圖片中圈中的位置,右鍵,便可以彈出當前工作簿中所有的工作表,然後選中某個工作表這可以進行跳轉。如果我們希望在首頁自動建立一個目錄的話,新建一個目錄工作表,然後在公式菜單,找到定義名稱在彈出的編輯名稱窗口中,定義一個名稱為:製作目錄,引用的位置,手動輸入:=GET.WORKBOOK(1)然後在A列輸入公式:=INDEX(製作目錄,ROW()),並且向下填充,直到出現錯誤:這樣我們把所有的表名都列出來了,這個表名的命名方式是