相关文章推荐
性感的小蝌蚪  ·  easyPOI ...·  2 小时前    · 
含蓄的酸菜鱼  ·  linux lib64目录下载 - ...·  1 年前    · 
成熟的火柴  ·  Delphi之Virtual ...·  1 年前    · 

这两天接触到excel比较多,才发现使用excel不仅仅是简单的复制粘贴。
excel vb代码是非常强大,学会使用一些常用的功能,可以大大减少工作量。
废话不多少,来看
如下表格学生成绩表
在这里插入图片描述

如果我们要把这个表按照班级拆分为三个表,可能一般我们都是通过筛选后复制粘贴。但这是最土的办法,并且如果分类很多,数据量又大的话,非常浪费时间。
来看使用excel宏轻松搞定。excel宏代码如下:

Option Explicit
Option Base 1
Sub 按指定列分组拆分数据()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Dim self As Worksheet
    Set self = ActiveSheet
    Dim nLastRowNum As Long
    Dim nLastColumnNum As Long
    Dim i As Long
    ' 删除其他的sheet
    For i = Sheets.Count To 1 Step -1
        If Sheets(i).Name <> self.Name Then
            Sheets(i).Delete
        End If
    Next i 
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True   
    '获取全部数据范围
    nLastRowNum = Cells(Rows.Count, 1).End(xlUp).Row
    nLastColumnNum = Cells(nLastRowNum, Columns.Count).End(xlToLeft).Column
    '获取标题
    Dim titleRange As Range
    Set titleRange = Application.InputBox(prompt:="请选择标题区域:将要当做标题行的每一个单元格", Type:=8)
    ' 有效数据开始行
    Dim nRowValidData As Long
    nRowValidData = titleRange.Row + titleRange.Rows.Count
    ' 获取拆分列的信息,只需要列号
    Dim splitColumnRange As Range
    Set splitColumnRange = Application.InputBox(prompt:="请选择拆分的列:选择任何一个该列的单元格即可", Type:=8)
    Dim columnNumToSplit As Long
    columnNumToSplit = splitColumnRange.Column
    ' 需要拆分的值字典
    Dim splitValueDict As Object
    ' 辅助字典用来保证顺序
    Dim splitValueDictReverse As Object
    Dim indexArray() As Long
    Set splitValueDict = CreateObject("Scripting.Dictionary")
    Set splitValueDictReverse = CreateObject("Scripting.Dictionary")
    Dim cellValue As String
    Dim ws As Worksheet
    For i = nRowValidData To nLastRowNum Step 1
        cellValue = Cells(i, columnNumToSplit).Text
        '1. 创建新的sheet;
        '2. 拷贝标题信息到新的sheet
        If Not splitValueDict.Exists(cellValue) Then
            splitValueDict(cellValue) = i
            splitValueDictReverse(i) = cellValue
            Set ws = Sheets.Add(After:=Worksheets(Worksheets.Count))
            ws.Name = cellValue
            self.Activate
            titleRange.Copy _
                ws.Range(ws.Cells(titleRange.Row, titleRange.Column), ws.Cells(nRowValidData - 1, titleRange.Column))
        End If
        ' 拷贝其他内容
        Range(Cells(i, 1), Cells(i, nLastColumnNum)).Copy _
            GetLastPasteRangeBySheetName(cellValue, nLastColumnNum)
    Next i
End Sub
Public Function GetLastPasteRangeBySheetName(ByRef SheetName As String, columnNum As Long) As Variant
    Dim wks As Worksheet
    Dim nLastRowNum As Long
    Set wks = ActiveWorkbook.Worksheets(SheetName)
    nLastRowNum = wks.Cells(wks.Rows.Count, 1).End(xlUp).Row
    Set GetLastPasteRangeBySheetName = wks.Range(wks.Cells(nLastRowNum + 1, 1), wks.Cells(nLastRowNum + 1, columnNum))
End Function

step 1 进入excel vba编程界面

在excel工作表中标签处右键查看代码
在这里插入图片描述

进入如下界面
在这里插入图片描述

step 2 粘贴代码

然后把代码粘贴窗口中如下图:
在这里插入图片描述

step 3 运行代码

点击下图中红框按钮
在这里插入图片描述
出现下面弹框
在这里插入图片描述
选择需要拆分标题区域。只需要用鼠标拖动选择区域即可
在这里插入图片描述
确定后再选择拆分的单元格,即按照班级拆分,选择班级
在这里插入图片描述
确定,结果如下
在这里插入图片描述

step 4 删除宏代码

如果为了保存方便,我们需要把宏代码删掉,不然保存需要保存为支持宏的格式。
运行成功后删除宏
找到工具 选择宏。
在这里插入图片描述
删除刚刚的宏即可,然后关闭代码,保存即可
在这里插入图片描述

前言step 1 进入excel vba编程界面step 2 粘贴代码step 3 运行代码step 4 删除宏代码前言这两天接触到excel比较多,才发现使用excel不仅仅是简单的复制粘贴。excel vb代码是非常强大,学会使用一些常用的功能,可以大大减少工作量。废话不多少,来看如下表格学生成绩表如果我们要把这个表按照班级拆分为三个表,可能一般我们都是通过筛选后复制粘贴。但这... 特点: 1.速度快:导入100图片只需要2秒钟 2.位置准:每张图片都导入到名称后面的单元格中,且刚好和单元格一样大,不会让多张图片重叠 3.大小灵活:导入的图片可以随心所欲定义其大小,且所有图片都占用相同的大小空间。但却保持图片导入前的比例,不会变形。 4.名称灵活:可以使用近似匹配。例如有两张名为“诺基亚8310”、“诺基亚7600”的图片,只需要在单元格输入“诺基亚”就行了,导入图片时可以将“诺基亚”开头的图片全部导入。 5.数量灵活:对于多个图片符合同一单元格名称的状况,可以将所有图片全部导入到其右边的单元格。 6.附件功能:图片导入到工作后,将Excel默认的图片名“图片1”、“图片2”还原为图片本来的名称。 工具: 【隔行插入行】 功能: 对工作隔行插入行,或者隔插入 特点: 1.可以每隔M行插入N行,其中N和M可以自己指定 2.可以每隔M插入N,其中N和M可以自己指定 3.起始行或结束行或者起始、结束也可以自己指定 工具: 【区域定位工具】 功能: 可以基于用户指定的条件选择相应的单元格,弥补Excel的不足 特点: 1.对于数值,可以使用所有比较运算符查找数据,Excel本身的定位不能定位于大于、小于某值的区域。 2.对于文本,可以定位于指定的字符,也可以定位于指定字符以外的所有字符。且支持通配符。 3.定位于可以指定区域,包括“选择区域”、“已用区域”和“可见区域”。这比Excel本身的查找更全面。 4.支持双条件查找,例如定位于从60到100的所有数据区域。或者不包括60到100的所有区域。 工具: 【根据工资计算钞票面额张数】 功能: 根据工资计算需要发工资时需要多少张100元、50元、20元、10元等等面额的钞票数量 特点: 1.可以选择一个区域进行操作,批量计算。 2.钞票的面额可以自己定义。 3.不仅计算每个人员需要的钞票张数,还对所有面额钞票汇总。 工具: 【建立工作目录】 功能: 将当前工用簿中所有工作建立目录,且产生链接 特点: 1.一键生成工作目录。 2.单击目录中任意名可以跳转至该工作。 工具: 【建立文件目录】 功能: 将指定目录下所有文件建立目录于工作中 特点: 1.可自由定义目标文件的路径。 2.允许选择目录是否产生链接。 3.可以对子目录中的文件建立目录,不管文件夹中有多少个子文件夹。 4.可以多次执行工具,从而将建立不同文件夹中的文件目录。程序自动将其分置于不同的中。 工具: 【工作簿拆分】 功能: 将指定工作簿的每个工作拆分成单独的工作簿 特点: 1.自由选定存放路径。 2.提是拆分后是否保留公式的选项。 3.可以自由定义参与拆分工作名 工具: 【工作拆分】 功能: 将当前工作的数据按条件拆分多个工作 特点: 1.可以自由选择条件所有。 2.可以设定标题行数,标题不参与拆分。 3.可以自由定义折分条件。 4.可以选择折分成多工作后是否保留原有公式。 工具: 【合并工作簿】 功能: 将多个具有相同格式的工作簿中所有工作合并为一个工作簿的多工作中,也可以将一个工作簿的所有工作合并到一个工作 特点: 1.多工作簿合并时,可以自由指定待合并工作簿的目录路径。 2.可以选择将多工作簿合并到同工作还是同工作簿。 3.对于多个工作簿中具有同名工作时,可以选择是否合并工作。 4.进以定义参与合并的工作簿名。即所选文件夹中存在多工作簿,可以对部分执行合并。 5.如果仅对一个工作簿中的工作进行合并,那么选择“多工作合并”。 6.对工作合并时,允许选择参与合并的工作名。即既可全部参与合并也可以部分工作参与合并。 7.合并前需要将当前工作簿保存。 工具: 【选区背景着色】 功能: 将选择区域或者选区所在行、用醒目的颜色标识,便于查看 特点: 1.着色的对象有“选区”、“行”、“”以及“行”可选。 2.可选颜色包括6种。 3.可以随时启用、禁用着色功能。 4.程序具有记忆功能。即保存上次的设置。 工具: 【小写转大写】 功能: 将阿拉伯数字转换成人民币大写形式 特点: 1.可以批量操作。 2.可以同时选择多个区域再执行工具。 3.几百个单元格数据瞬间完成转换。 工具: 【大写转小写】 功能: 将人民币大写转换成阿拉伯数字 特点: 1.可以批量操作。 2.可以同时选择多个区域再执行工具。 3.几百个单元格数据瞬间完成转换。 工具: 【批量新建或复制工作】 功能: 批量新建或者工作 特点: 1.操作灵活:可以选择新建或者复制。 2.批量操作:可以一次性建立或者复制1到255个。 3.高速操作:建立或者复制255个工作三秒钟不到即可完成。 4.方向自由:可以定义新在当前之前或者之后。 5.命名灵活:对于名有规律的创建或者复制新,可以选择“从单元格创建”。 工具: 【批量加解密】 功能: 对当前工作簿中所有工作或者指定的部分工作进行加、解密 特点: 1.可以灵活的指定加、解密工作名。 2.对100个工作加密或者解密不超过3秒钟。 3.本工个适用于多工作使用相同密码保护,否则请手工操作。 4.其中解密是知道密码的前提下进行批量解密,而非绿色。 工具: 【生成工资条】 功能: 高效的工资条设计工具 特点: 1.瞬间将工资明细生成工资条,方便打印并裁剪。 2.生成的工资与工资条之间有一个空行,供剪裁用。可以自定义其高度。 3.可以自己定义工资条头的行数,不同公司可能有不需要标题行。 4.只要类似工资条的信息都可以用本工具生成,例社保资料、成绩通知条等等。 工具: 【删除工资条】 功能: 删除前一工具生成的工资条头 特点: 1.可以由用户指定标题行数,使其适用面更广。 2.瞬间删除工资条标题信息,还原为明细。 工具: 【反向选择】 功能: 对当前数据区域进行反向选择,即定位于未选择的区域 特点: 1.可以由用户指定标题行数,使其适用面更广。 2.瞬间删除工资条标题信息,还原为明细。 备注:工具通用于Excel 2003和 EXCEL 2007 工具安装: 必须先解压,然后双击“安装.EXE" 如果需要删除工具,则双击“删除.EXE”
按指定的和行,拆分。 例如:一个综合性的excel,第1行C是省份,而且此综合性报多个sheet要拆分,想要实现拆分所有sheet,并按省份合并成一个excel,比如所有辽宁省的数据合并成一个excel文件以不同的sheet体现。用此脚本即可实现。 1、标题行唯一,不能跨行; 2、以某列为的数据为标准值进行拆分,该不能有合并单元格; 3、每个sheet单独执行脚本拆分; 4、最后多个sheet是否能够按拆分数据标准合并成一个excel文件,主要看每次拆分时的给新文件起的名称是否一致,文件存在则新增sheet,不存在则创建文件。 另有附带小工具函数: 获取数量号的英文字母、判断字符是否是英文、替换非汉字\数字\字母的字符、判断文件是否存在。
对应之前文章《Excel·VBA按拆分工作》,对Excel表格数据按照固定行数,将工作拆分 工作按行拆分工作 Sub 工作按行拆分工作() '当前工作(worksheet)按固定行数拆分多个工作,保存在当前工作簿(workbook) Set ws = Application.ActiveSheet '当前工作即为待拆分工作 title_row = 1 '头行数,每个拆分后的sheet都保留 num_row = 100 '拆分数据行数,按多少
excel-将指定的SHEET按规则分拆并生成新的文件 原始需求是:将录入的脐橙订单自动分拆生成京东物流单导入格式文件 1. 每一行的包裹数量为1 (20斤), 例如订单为10件,自动分拆成10行 2. 将同一个地址的2个10斤计算为一个包裹 3. 将批复复制分拆的内容自动保存为新的文件
Sub NewSheets() Dim d As Object, sht As Worksheet, arr, brr, r, kr, i&, j&, k&, x& Dim Rng As Range, Rg As Range, tRow&, tCol&, aCol&, pd& Application.ScreenUpdating = False Application.DisplayAlerts = False Set d = CreateOb
Windows.Item(TextEdit1.Text).Activate(); let cel = Range("A1"); let coNum = SpinButton2.Value;//输入需要处理的数 rowNu = Application.ActiveSheet.UsedRange.Rows.Count;//区域中使用的有效行数 let nummb = 0;
Excel工作拆分多个Excel文件是一项实用的任务,特别是在处理大量数据时。这里介绍一种小工具来轻松完成这个任务。 首先,需要使用VBA编写(Macro)来实现按拆分Excel工作。代码如下: Sub SplitColumnsToFiles() Dim path As String Dim book As Workbook Dim sheet As Worksheet Dim col As Range Dim lastRow As Long Dim lastCol As Long Dim fileName As String path = Application.ActiveWorkbook.Path & "\" Set book = Application.ActiveWorkbook Set sheet = ActiveSheet lastCol = sheet.Cells(1, Columns.Count).End(xlToLeft).Column For Each col In sheet.Rows(1).Cells If col.Column <= lastCol Then fileName = path & col.Value & ".xlsx" Set newBook = Workbooks.Add With newBook .Sheets(1).Cells(1, 1).Value = "This is " & col.Value & " column." lastRow = sheet.Cells(Rows.Count, col.Column).End(xlUp).Row sheet.Range(sheet.Cells(1, col.Column), sheet.Cells(lastRow, col.Column)).Copy .Sheets(1).Cells(2, 1) .SaveAs fileName .Close End With End If Next col End Sub 运行此后,Excel将按照每个的标题进行拆分,并将每个文件命名为该的标题。每个文件中包含两行数据:第一行是该的标题,第二行是该的数据。 使用此小工具,您可以轻松将一个大的Excel工作拆分多个Excel文件。同时,您还可以基于此代码进行调整,以实现您个人的需求。