利用數組分別提取數據填入不同的工作表中

2020-12-25 VBA語言專家

大家好,今日我們繼續講解VBA數組與字典解決方案,今日講解第77講內容:根據數據分類不同,利用數組分別提取填入不同的工作表中。

數據處理中有一塊內容是數據的分類,數據的分類一般來講也可以用兩種辦法來實現,一是數組方法,一是字典方案,在77和78講中我將就這兩種方案詳細講解,今日講解的是數組方案。利用數組進行分類,這講中我介紹的是固定分類,就是事先知道這些數據該如何分類,然後按照分類的要求,新建不同的工作表,把這些數據填到各自工作表中。

實例,如下為部分數據截圖,我們將按照編號的不同分別建立不同的工作表,放進這些數據。

如第一個數據是WG002放到WG002的工作表中,第13個數據是WG001放到WG001的工作表中,如何實現呢?

思路分析:這裡涉及到幾個知識點,其一是新工作表建立,其二是如何在源數據中提取數據,所以思路就這樣建立,在源數據中建立循環,先按要求提取數據,然後,建立工作表填入數據後,之後再開始下一次循環。

下面看我給出的代碼:

Sub mynzsz_77() '第77講 根據數據分類不同,利用數組分別提取填入不同的工作表中

Sheets("77").Select

'定義一個動態數組存放結果

Dim mybrr()

'將數據放到數組中

myarr = Range("a1").CurrentRegion.Value

'定義新增工作表的表名稱

myTable = Array("WG001", "WG002", "WG003", "WG004")

'在數組中按新增工作表的名稱提取不同的值

For i = 0 To UBound(myTable)

For j = 2 To UBound(myarr)

If myarr(j, 2) = myTable(i) Then

t = t + 1

ReDim Preserve mybrr(1 To 4, 1 To t)

mybrr(1, t) = myarr(j, 1)

mybrr(2, t) = myarr(j, 2)

mybrr(3, t) = myarr(j, 3)

mybrr(4, t) = myarr(j, 4)

End If

Next j

'新增工作表

Set uu = Worksheets.Add(after:=Sheets("77"))

uu.Name = myTable(i)

'回填數據,設置格式

With uu

.Range("a1:d1") = Array("序號", "編號", "日期", "金額")

.Range("a2").Resize(t, 4) = _

WorksheetFunction.Transpose(mybrr)

.UsedRange.Borders.LineStyle = xlContinuous

End With

'清空數組

Erase mybrr()

t = 0

Next i

End Sub

代碼的截圖:

代碼分析:

1 上述代碼實現了在源數據中按要求提取數據,然後新建一個工作表,把這些數據回填進去。在此,我們要把源數據存到數組myarr中,然後我們建立一個數組myTable,用於存放新增的工作表 Array("WG001", "WG002", "WG003", "WG004"),在工作表中建立循環時按照上述的特徵提取數據。

2 '將數據放到數組中

myarr = Range("a1").CurrentRegion.Value

上述代碼將源數據存放到數組myarr中。

3 '定義新增工作表的表名稱

myTable = Array("WG001", "WG002", "WG003", "WG004")

上述代碼是把提取數據的特徵作為工作表的名稱來對應。

4 '新增工作表

Set uu = Worksheets.Add(after:=Sheets("77"))

uu.Name = myTable(i)

上面的代碼是新增工作表,工作表名稱即是數據分類的要求。

5 '回填數據,設置格式

With uu

.Range("a1:d1") = Array("序號", "編號", "日期", "金額")

.Range("a2").Resize(t, 4) = _

WorksheetFunction.Transpose(mybrr)

.UsedRange.Borders.LineStyle = xlContinuous

End With

上述代碼是回填數據,回填數據時用了轉置處理。

6 '清空數組

Erase mybrr()

上述代碼清空數組。

下面看代碼的運行:

分類後,把源數據按照分類要求分類,然後分工作表回填。

今日內容回向:

1 如何按照數據的特徵分類填入工作表?

2 如何實現工作表的插入?

相關焦點

  • 利用ADO連接EXCEL,提取固定位置(行或者單元格)的數據
    大家好,我們繼續VBA資料庫解決方案的學習,今天講解第33講:利用ADO連接EXCEL,提取固定位置(行或者單元格)的數據。在上一講中我們學習了ADO連接EXCEL後,實現提取列數據的方法,但很多的時候,必要的數據並不是在整列中的,也有可能在行或者某單元格的固定位置,這個時候要如何處理呢?這個內容就是我今天要講解的內容。
  • 記錄集賦值給數組後,利用轉置函數處理多維數組的方法
    大家好,今日繼續講解VBA資料庫解決方案,今日講解的是第76講,內容是:記錄集賦值給數組後,利用轉置函數處理多維數組的方法。我在第一冊的第43講中,我講了將記錄集存入數組的方案,並通過一個Index函數在工作表中恢復數組數據的方法。今日講的是利用轉置函數來完成同樣的功能。
  • 利用字典判斷數組的值是否重複,並提取出不重複的值
    大家好,我們今天繼續講解VBA數組與字典解決方案,今日的內容是第44講,利用字典來判斷數組的值是否重複,並提取出不重複的值。對於字典的應用,排重是很普遍的應用之一。對於數組的排重,如果單用數組的內容,在我之前數組的講解中,是相當費勁的,如果利用字典,排重幾乎是不費力的就可以完成。
  • 利用ADO,實現同一文件夾下多個EXCEL工作表的數據匯總
    大家好,今天繼續講解《VBA資料庫解決方案》,今日講解的是第37講,利用ADO,實現同一文件夾下多個EXCEL工作表的數據匯總。最近的內容實用性比較強,如今日的內容,只把需要匯總的EXCEL文件放在同一個文件夾下,而且格式一致,那麼利用ADO匯總這幾個文件的數據是非常快的,這講的內容和第32講的內容是類似的,不過第32講的內容是要事先知道文件的名稱,然後建立一個數組來分別對應每個文件,通過循環來實現從每個文件中提取數據的目的,本講的內容是事先不知道每個文件的名稱。
  • Excel中多個工作表不同位置數據,如何進行求和?
    最近收到一個典型案例,Excel中多個工作表不同位置數據,如何進行求和。 具體如下: 一個Excel文件中,有多個sheet工作表,「一月」,「二月」,「三月」。
  • 提取剪貼板中所有數據格式到工作表
    大家好,我們今日講解&34;教程中第十二個專題&34;的第五節&34;,這個專題是非常有用的知識點,希望大家能掌握利用。第五節 提取剪貼板中所有數據格式到工作表在上面的幾節中主要講了理論上的一些必要的知識點,這講就利用這些知識點完成一些必要的操作,講解如何把剪貼板上的數據格式分析提取到工作表之中。
  • 利用VBA,把數據按工作表進行歸類匯總
    $]").GetRows上述代碼把供應商的名稱排重手計入變體變量ARR,需要注意的是,這個ARR是個二維數組;strSQL = "Select 型號,數量,生產廠,單價 From [數據備份$] Where 供應商='" & Arr(0, k) & "'" & " order by 型號";上述代碼實現了按供應商的名稱提取數據。
  • 利用工作表函數,對字典鍵進行排序並給出對應重複個數
    大家好,今日我們繼續講解VBA數組與字典解決方案,今日的內容是第58講,利用工作表函數,對字典的鍵進行排序,並給出對應的重複個數。對於排序,大家並不陌生,在之前的講解中,我也講了利用sort進行排序的方法。
  • 遍歷工作薄和工作表(For Each循環的利用)
    今日的內容是「VBA之EXCEL應用」的第三章「工作簿(Workbook)和工作表(Worksheet)對象(Object)」中第三節「遍歷工作薄和工作表(For Each循環的利用)」。「VBA之EXCEL應用」這套教程從簡單的錄製宏的講解,一直到窗體的搭建,內容豐富,案例眾多。
  • 【小工具】提取兩組數據相同項與不同項
    昨天交流群有群友問《Excel易用寶插件》中,對比兩組數據獲取相同項與不同項這個小功能的實現代碼。·判斷數組是否包含某個元素下面的自定義函數,可以用來判斷數組中是否包含某個值。遍歷整個數組元素,逐個對比。
  • Excel應用實踐08:從主表中將滿足條件的數據分別複製到其他多個工作表中
    如下圖1所示的工作表,在主工作表MASTER中存放著從資料庫下載的全部數據。現在,要根據列E中的數據將前12列的數據分別複製到其他工作表中,其中,列E中數據開頭兩位數字是61的單元格所在行前12列數據複製到工作表61中,開頭數字是62的單元格所在行前12列數據複製到工作表62中,同樣,開頭數字是63的複製到工作表63中,開頭數字是64或65的複製到工作表64_65中,開頭數字是68的複製到工作表68中。
  • VBA利用QueryTables提取某隻股票歷史交易信息數據
    大家好,我們今日講解「VBA信息獲取與處理」教程中第十個專題「利用QueryTables抓取網絡數據」的第三節「利用QueryTables提取某支股票歷史交易信息數據」,這個專題是非常有用的知識點,希望大家掌握。
  • 利用VBA代碼在數組中進行排重的方法
    Sheets("22")中A1單元格的文本去除重複值後寫入到工作表Sheets("22")中的A列單元格。代碼中利用數組Splarr用來保存Sheets("22")中A1單元格的文本。用數組Arr用來保存去除重複值後的文本。用於數組Temp用來判斷文本是否重複。用變量r用來保存去除重複值後的文本數量。代碼使用Split 函數以Sheets("22")中A1單元格的文本創建一個下標從零開始的一維數組。
  • 利用字典和動態數組,找出多列數據中重複的值
    大家好,今日我們繼續講解VBA數組與字典解決方案,今日講解第68講內容:利用字典和動態數組,找出多列數據中重複的值。利用字典求多列間的重複數據,我們在工作時也會遇到類似的問題,對於這種問題的解決如果不用VBA往往是很難處理的,特別是多列間的重複數據,處理起來更麻煩,但利用了VBA往往會很快解決。
  • 利用數組與字典,實現單個條件匯總求和
    大家好,我們今天繼續講解VBA數組與字典解決方案,今日的內容是第38講,利用數組與字典,實現單個條件的數據匯總求和。在VBA解決方案的叢書中,這套VBA數組與字典解決方案是專門講解數組和字典的。這套書的開始先講了EXCEL數組的利用,然後又講了VBA數組,從上一講開始,我們開始講字典。
  • VBA數組聲明及賦值後的回填方法
    但是這裡要注意的是對於這種寫入時數組的聲明只能是:Dim arr as Variant這時,聲明一個變量,不能聲明其他數據類型。第二種:通常用於一個固定數組的聲明,同時給出了數組的上下界。這種聲明要注意的是不能一次性的裝入單元格的數據,要靠循環第三種,是一個動態數組的聲明,也就是說,我們在命名數組時還不知道數組的大小,要靠後期的再次定義第四種 是再次聲明arr的大小,以正好盛下k數量的值。
  • 將工作表數據寫入VBA數組
    第二節 將工作表數據寫入VBA數組在上一節中我們講了實現工作表數據與VBA代碼間傳輸的幾種方法,這講我將我們將著重講解如何將工作表的數據寫入數組。1 讀取工作表上的範圍並將其放入數組在VBA中,可以直接讀取工作表上的範圍並將其放入數組,這種方法非常簡單。
  • 應用技巧二十二:數組的兩種運算
    對於運算數組進行運算是,Excel有如下限制。要點1對於相同維度(方向)的一位數組運算,要求數組的尺寸必須一致,否則運算結果的部分數據返回#N/A錯誤。I4單元格數組公式如下:{=INDEX(E2:E11,MATCH(I2I3,B2:B11C2:C11,0))}公式中主要利用了將兩個一維區域引用進行連接運算,如B2:B11C2:C11,最終生成同尺寸的一維數組,再利用
  • 按照要求提取工作表中的大數據資料,並顯示結果
    大家好今日繼續講解資料庫解決方案的第46講,內容是打開記錄集提取數據,按照固定的要求顯示提取結果。要求我們首先打開一個記錄集,然後按我們的要求來顯示結果,什麼固定要求呢?就是欄位的排序,及顯示多少個結果。今日的內容並不難,我要講解的是ADO連接EXCEL工作表後完成上述的內容。
  • excel拆分合併技巧:將工作表合併成總表的方法
    在上篇文章中我們給大家介紹了4種拆分工作表的方法,分別是函數、透視表、高級篩選、VBA,不知道小夥伴們學習得咋樣了?今天我們將學習合併工作表的三種方法,趕緊來看看吧!>GET.WORKBOOK(1)&T(NOW()) 利用宏表函數「GET.WORKBOOK(1)」,得到工作薄內所有工作表名稱,並形成一個內存數組,把這個內存數組命名為「SHNAME