1. 程式人生 > >VBA程式碼例項---一個工作表拆分為N個工作表

VBA程式碼例項---一個工作表拆分為N個工作表

這是一個常用而且經典的例子:根據內容,把一個工作表中的內容,拆分到N個工作表中,並根據內容命名新建的工作表。

¤主要知識點¤

1、影響程式碼執行閃屏以及提示框的處理:

Application.ScreenUpdating = False
Application.DisplayAlerts = False
Application.DisplayAlerts = True
Application.ScreenUpdating = True

2、工作表的新建,命名,刪除操作;

3、單元格區域的內容複製方式;

4、IF分支語句和For迴圈語句的使用;

 ¤例項¤

新建工作表,把員工資訊複製到對應的以部門命名的工作表中。


¤實現程式碼¤ 

Option Explicit

Sub 拆分工作表()

    Application.DisplayAlerts = False  '不顯示錯誤提示框
    Application.ScreenUpdating = False  '不閃屏
    
    Dim i As Integer   '輔助工作表變數
    Dim sh As Worksheet
    
    '刪除多餘的工作表
    If Sheets.Count > 1 Then
        For i = Worksheets.Count To 2 Step -1
            Worksheets(i).Delete
        Next i
    End If
    
    '對資訊表中資料按照部門排序,之後按照部門拆分進新的工作表
    Dim irow As Integer '定義一共需要處理的行號
    Dim istart As Integer  '定位起始行數變數
    
    irow = Range("A" & Rows.Count).End(xlUp).Row  '計算一共需要處理的行號
    If irow > 2 Then
    
        Range("a3:H" & irow).Sort Range("f2"), xlAscending  '對資訊區域進行排序,不能含標題
        istart = 3
        For i = 3 To irow
            With Worksheets("員工資訊表")  '指定活動工作表
            
            If .Range("f" & i).Value <> .Range("f" & i + 1).Value Then   '判斷是否為同一部門
            
                Worksheets.Add after:=Worksheets(Sheets.Count)  '新建工作表
                Set sh = Worksheets(Worksheets.Count) '指定工作表給變數
                sh.Name = .Range("f" & i).Value  '以部門命名工作表
                .Range("a1:h2").Copy sh.Range("a1:h2") '複製標題到新建工作表中
                .Range("a" & istart & ":h" & i).Copy sh.Range("a3") '複製內容到工作表中
                sh.Columns.AutoFit  '設定自動列寬
                
                istart = i + 1
            End If
            End With
        Next i
    
    End If
    
    Worksheets("員工資訊表").Select  '回到第一個工作表
    
    Application.ScreenUpdating = True  '恢復閃屏預設設定
    Application.DisplayAlerts = True   '恢復提示框預設設定

End Sub

Option Explicit

Sub 拆分工作表2()

    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Dim i As Integer
    
    If Worksheets.Count > 1 Then
        For i = Worksheets.Count To 2 Step -1
            Worksheets(i).Delete
        Next i
    End If
    
    Dim irow As Integer
    Dim k As Integer
    Dim sDep As String
    Dim sh As Worksheet
    
    irow = Range("A" & Rows.Count).End(xlUp).Row
    For i = 3 To irow
        
        sDep = Worksheets(1).Range("F" & i).Value
        On Error Resume Next             '遇到錯誤繼續,這裡錯誤主要是未定義的工作表
        Set sh = Worksheets(sDep)      '這一行如果遇到工作表不存在,就會報錯,返回值為err.number <> 0
        If Err.Number <> 0 Then           '工作表不存在,那麼新建工作表,並把標題複製到新建的工作表
            Set sh = Worksheets.Add(, Worksheets(1))
            sh.Name = sDep
            Worksheets(1).Range("A1:h2").Copy sh.Range("A1")
        End If
        
        k = sh.Range("A1").CurrentRegion.Rows.Count + 1   '依次複製內容到工作表的行號
        'sh.Range("A" & k).Resize(1, 7).Value = Worksheets(1).Range("A" & i).Resize(1, 7).Value   '賦值方法
        
        Worksheets(1).Range("A" & i & ":h" & i).Copy sh.Range("A" & k)    '複製方法
        sh.Columns.AutoFit                                '列寬自動調整
        
    Next i
    
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True

End Sub


相關推薦

VBA程式碼例項---一個工作分為N工作

這是一個常用而且經典的例子:根據內容,把一個工作表中的內容,拆分到N個工作表中,並根據內容命名新建的工作表。 ¤主要知識點¤ 1、影響程式碼執行閃屏以及提示框的處理: Application.ScreenUpdating = False Application.Displ

把多Excel文件合並到一個Excel文件的多工作(Sheet)裏

ger xlsx eww 右擊 對話 如果 work excel 對話框 實現的功能是把多個Excel文件的第一個工作表(Sheet)合並到一個Excel文件的多個工作表裏,並且新工作表的名稱等於原Excel文件的文件名。開發環境Excel2007,但是Excel

C 將一個單鏈成3迴圈連結串列,其中一個是純數字,一個純字母,一個其他字元

前面相關操作在這呢,這個函式依託於此 //結構體 typedef struct Node { ElementType data; struct Node * next; } LNode, * LinkNode; //將一個單鏈表拆成3個迴圈連結串列,其中一個是純數字

OGG進程拆分(單成多進程)

byte utf 主機 al32utf8 spa pup epo 同時 edi OGG進程拆分(單表拆成多個進程) 概要: 《OGG進程拆分》介紹了如何將一個入庫進程中的多個表拆分到其他進程中。本篇將著重介紹如何使用多個進程同時入庫一張表。 適用條件: 1)入庫進程只同

VBA二次學習筆記(2)——兩Excel內容比較

integer then 控制 圖片 amp 員工 工作 表格 獲取 說明(2018-9-3 22:38:58): 1. 就是之前問同事要來的作業,有兩個格式一樣的Excel文件,一個是正確答案,一個是員工作答的。通過代碼將兩個文件進行比對,把不同之處列出來。 正文: S

27、輸入兩單調遞增的鏈,輸出兩合成後的鏈,當然我們需要合成後的鏈滿足單調不減規則。

-s st2 image code solution 兩個 cnblogs 思路 div 輸入兩個單調遞增的鏈表,輸出兩個鏈表合成後的鏈表,當然我們需要合成後的鏈表滿足單調不減規則。 思路:同歸並算法 本題: 1 public class Solution {

lintcode166 鏈倒數第n節點

next ntc cti rst 數量 solution nbsp cnblogs color 鏈表倒數第n個節點 找到單鏈表倒數第n個節點,保證鏈表中節點的最少數量為n。 思路:設置兩個指針first,second指向head,first指針先向前走n,然後

LintCode之鏈倒數第n節點

first bsp urn val ram tco .cn cnblogs 1-1 題目描述: 我的代碼: 1 /** 2 * Definition for ListNode. 3 * public class ListNode { 4 * i

166 鏈倒數第n結點

rip href problem 思路 不為 代碼 ++ tle TE 原題網址:https://www.lintcode.com/problem/nth-to-last-node-in-list/description 描述 找到單鏈表倒數第n個節點,保證鏈表中

[遞迴] 排列組合 - 從一個字串中任意選取N元素構成的所有排列組合 - C語言

排列組合 【題目】求從字串中"ABCD"中任取3個元素構成的所有排列組合 A

LeetCode 19. Remove Nth Node From End of List(刪除單鏈倒數第N結點)

題目描述:    Given a linked list, remove the nth node from the end of list and return its head.例子: Give

Remove Nth Node From End of List(刪除從最後一個結點起的第n結點)

Given a linked list, remove the nth node from the end of list and return its head.For example, Given linked list: 1->2->3->4-&g

一個字串迴圈左移n字元

原始碼均在XP系統,VS2008下編譯並執行 附上原始碼 #include "stdafx.h" #include <string.h> /***************************************************

LintCode 找到單鏈倒數第n節點

給出連結串列 3->2->1->5->null和n = 2,返回倒數第二個節點的值1. 第一種方法:單鏈表只有頭指標,所以只能從頭部開始尋找,先遍歷一遍連結串列,確定連結串

刪除鏈倒數第n節點

val lin nod clas next pre def end list 題目: 給定一個鏈表,刪除鏈表的倒數第 n 個節點,並且返回鏈表的頭結點。 示例: 給定一個鏈表: 1->2->3->4->5, 和 n = 2. 當刪除了倒數

PHP實現一個hash(拉鍊法解決hash衝突)程式碼例項

<?php header('Content-type:text/html;charset=utf-8'); class HashTable{ private $buckets; private $size = 10; public function __const

VBA異常--執行時錯誤1004(將一個工作簿拆分多工作

概述: 打算將工作簿拆分多個工作表,丟擲異常 原因是這個工作簿中有隱藏的工作表,對於Copy操作,它是不能複製隱藏的工作表的,但是Worksheets是所有工作表的集合(自然有隱藏工作表) 最後的解

excel中使用vba一個駝峰工具,用來將資料中的欄位改為程式碼中的欄位

寫之前在網上沒有找到自己想要的效果,就想著自己寫一下,感覺還挺簡單 因為以前從來沒有接觸過vba,所以查了一些資料。想把過程記錄一下 下面就是最終想要的效果圖 把程式碼也貼下吧 Sub tuoFeng()     Dim preValue, finValue As Str

[VBA]匯總多工作簿的指定工作到同一個工作簿的指定工作

速度慢 excel trre books for each loop 表格 columns ive sub 匯總多個工作簿() Application.ScreenUpdating = False Dim wb As Workbook, f As String, l As