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

2021-01-09 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 如何實現工作表的插入?

相關焦點

  • 利用VBA進行數據分類處理
    Sub mynzsz_77() '第77講 根據數據分類不同,利用數組分別提取填入不同的工作表中Sheets("77").SelectDim mybrr()myarr = Range("a1").CurrentRegion.ValuemyTable = Array("WG001", "WG002", "WG003", "WG004
  • 提取剪貼板中所有數據格式到工作表
    大家好,我們今日講解「VBA信息獲取與處理」教程中第十二個專題「VBA中剪貼板(Clipboard)的應用」的第五節「提取剪貼板中所有數據格式到工作表」,這個專題是非常有用的知識點,希望大家能掌握利用。
  • 利用字典和數組,提取C列相同B列不相同數據,並按行回填
    大家好,今日我們繼續講解VBA數組與字典解決方案,今日講解第54講內容:利用字典和數組,提取C列相同但B列不相同的數據,回填時按行分開。其實字典本身就是一個數組,一個看視很簡單的數組,有兩個元素KEYS和ITEMS,在講字典時經常會用到它自身的一個特性:用exists非常方便的判斷出一個值是否在字典中存在,也給我們的實際工作處理帶來了很多遐想的空間。
  • 記錄集賦值給數組後,利用轉置函數處理多維數組的方法
    大家好,今日繼續講解VBA資料庫解決方案,今日講解的是第76講,內容是:記錄集賦值給數組後,利用轉置函數處理多維數組的方法。我在第一冊的第43講中,我講了將記錄集存入數組的方案,並通過一個Index函數在工作表中恢復數組數據的方法。今日講的是利用轉置函數來完成同樣的功能。
  • 利用VBA將數組的數據輸出到工作表,主管看了直呼大神
    :48 來源: 愛玲說愛情 舉報   今天,給各位來嘮一嘮用VBA怎麼將數組的數據輸出到工作表
  • 利用ADO連接EXCEL,提取固定位置(行或者單元格)的數據
    大家好,我們繼續VBA資料庫解決方案的學習,今天講解第33講:利用ADO連接EXCEL,提取固定位置(行或者單元格)的數據。在上一講中我們學習了ADO連接EXCEL後,實現提取列數據的方法,但很多的時候,必要的數據並不是在整列中的,也有可能在行或者某單元格的固定位置,這個時候要如何處理呢?這個內容就是我今天要講解的內容。
  • Excel中多個工作表不同位置數據,如何進行求和?
    最近收到一個典型案例,Excel中多個工作表不同位置數據,如何進行求和。 具體如下: 一個Excel文件中,有多個sheet工作表,「一月」,「二月」,「三月」。
  • VBA代碼判斷工作簿中是否存在指定工作表及用數組保存數據的方法...
    NO.176-NO.177內容是:NO. 176:使用自定義MyExistSh函數判斷工作簿中是否存在指定名稱的工作表NO. 177:使用Array函數創建一個數組用來保存數據並將其寫入到工作表的單元格區域VBA過程代碼176:使用自定義MyExistSh函數判斷工作簿中是否存在指定名稱的工作表Sub mynz()Dim Sh As
  • 一個公式搞定數據信息按類別拆分到不同工作表
    在Excel表格中說起數據信息按類別拆分,很多朋友都會想到利用數據透視表顯示報表篩選頁的功能或者使用VBA代碼。這篇文章為朋友們分享一種使用函數實現數據拆分的方法。一.實例要求:把下圖所示的名稱為「信息表」的工作表中的內容按班級拆分到不同的工作表裡。
  • 利用ADO,實現同一文件夾下多個EXCEL工作表的數據匯總
    大家好,今天繼續講解《VBA資料庫解決方案》,今日講解的是第37講,利用ADO,實現同一文件夾下多個EXCEL工作表的數據匯總。最近的內容實用性比較強,如今日的內容,只把需要匯總的EXCEL文件放在同一個文件夾下,而且格式一致,那麼利用ADO匯總這幾個文件的數據是非常快的,這講的內容和第32講的內容是類似的,不過第32講的內容是要事先知道文件的名稱,然後建立一個數組來分別對應每個文件,通過循環來實現從每個文件中提取數據的目的,本講的內容是事先不知道每個文件的名稱。
  • Excel如何批量提取全部工作表名稱公式
    在使用公式查詢或匯總多工作表數據時經常需要用到整個工作簿所有工作表的名稱,下面介紹如何用宏表函數GET.WORKBOOK來提取工作表名稱。 INDEX函數使用說明:  INDEX(數組,第二參數)表示從數組中提取第幾個元素。
  • 利用VBA,把數據按工作表進行歸類匯總
    $]").GetRows上述代碼把供應商的名稱排重手計入變體變量ARR,需要注意的是,這個ARR是個二維數組;strSQL = "Select 型號,數量,生產廠,單價 From [數據備份$] Where 供應商='" & Arr(0, k) & "'" & " order by 型號";上述代碼實現了按供應商的名稱提取數據。
  • 遍歷工作薄和工作表(For Each循環的利用)
    今日的內容是「VBA之EXCEL應用」的第三章「工作簿(Workbook)和工作表(Worksheet)對象(Object)」中第三節「遍歷工作薄和工作表(For Each循環的利用)」。「VBA之EXCEL應用」這套教程從簡單的錄製宏的講解,一直到窗體的搭建,內容豐富,案例眾多。
  • VBA利用QueryTables提取在售理財項目網頁數據
    大家好,我們今日講解&34;教程中第十個專題&34;的第二節&34;,這個專題是非常有用的知識點,希望大家掌握。第二節 利用QueryTables提取在售理財項目網頁數據大家好,這講講解的是利用QueryTables實現抓取網頁數據的具體應用,有了上一講的基礎講解,我們就直接利用這些方法就可以達到我們的目的。
  • 利用VBA實現個人小型辦公自動化過程中的數據批處理
    今日分享的是NO.225-NO.226,內容是:NO. 225:數組的賦值和回填工作表NO. 226:將數組的值批量回填給工作表的辦法 VBA過程代碼225:數組的賦值和回填工作表Sub Mynz ()
  • VBA利用QueryTables提取某隻股票歷史交易信息數據
    大家好,我們今日講解「VBA信息獲取與處理」教程中第十個專題「利用QueryTables抓取網絡數據」的第三節「利用QueryTables提取某支股票歷史交易信息數據」,這個專題是非常有用的知識點,希望大家掌握。
  • VBA數組聲明及賦值後的回填方法
    但是這裡要注意的是對於這種寫入時數組的聲明只能是:Dim arr as Variant這時,聲明一個變量,不能聲明其他數據類型。第二種:通常用於一個固定數組的聲明,同時給出了數組的上下界。這種聲明要注意的是不能一次性的裝入單元格的數據,要靠循環第三種,是一個動態數組的聲明,也就是說,我們在命名數組時還不知道數組的大小,要靠後期的再次定義第四種 是再次聲明arr的大小,以正好盛下k數量的值。
  • 利用QueryTables提取網頁數據的基礎
    對於網抓數據,在這套教程中一共介紹了三種方法,第一是利用XMLHTTP完成網抓數據,第二是利用利用IE完成網抓數據,第三就是本專題的利用QueryTables抓取網絡數據。這三種方法大家可以有所選擇的利用。有一點和大家聲明,對於利用VBA達到抓取網絡數據,我一直認為這不是VBA的所長,但可以完成,並藉助於excel來處理數據。
  • VBA中數組的利用及對「過程」的理解(VBA學習方案之五)
    2.1.6 在教程的講解中,我接著講解了數組的初步知識,在VBA中,數組是一處必須理解的知識點,我一直將數組作為變量的一種來看待。關於對於數組的講解,我會利用我的第三套教程進行專門講解,在教程中我是將數組和字典的知識點是一起來講解的。
  • excel拆分合併技巧:將工作表合併成總表的方法
    在上篇文章中我們給大家介紹了4種拆分工作表的方法,分別是函數、透視表、高級篩選、VBA,不知道小夥伴們學習得咋樣了?今天我們將學習合併工作表的三種方法,趕緊來看看吧!同樣的,在日常工作中,合併各個分表到總表,也是經常會遇到的。一、各個分表合併到總表——函數流既然在「拆分」工作表的時候,我們使用了函數的方式,那麼就來再感受一下「合併」工作表的函數方式吧!依然使用之前的分表作為我們合併工作表的數據源。步驟1:利用名稱管理器把工作表名稱建立為內存數組。