【Excel】【VBA】根据某列的编号顺序筛选对应的行导入相应的sheet中

ops/2025/1/16 21:38:07/

Excel VBA 数据分类导入sheet

1. 程序功能

将Excel表格数据按照PC编号分类到不同Sheet。

2. 程序流程

遍历完成
开始
获取当前工作表
关闭屏幕刷新和警告
删除已存在的PC工作表
创建新的分类工作表
复制表头到新工作表
遍历数据行
是否为PC编号?
提取PC编号
根据编号范围分类
复制数据到对应工作表
调整列宽
恢复屏幕刷新和警告
显示完成消息
结束

3. 主要子程序说明

3.1 SplitDataFaster()

主程序,控制整个数据分类流程。

  • 获取工作表信息
  • 调用其他子程序
  • 处理数据分类逻辑

3.2 DeleteExistingSheets()

删除已存在的PC工作表。

3.3 CreateNewSheets()

创建新的分类工作表。

3.4 CopyHeaders()

复制表头到新工作表。

3.5 CopyRowToSheet()

复制数据行到指定工作表。

3.6 AdjustAllSheets()

调整所有工作表的列宽。

4. VBA语法和函数说明

4.1 常用声明

Dim ws As Worksheet        ' 工作表对象声明
Dim lastRow As Long        ' 长整型变量
Dim sheetNames As Variant  ' 变体类型数组

4.2 工作表操作

Set ws = ActiveSheet                          ' 获取活动工作表
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row  ' 获取最后一行
Worksheets.Add                                ' 添加新工作表
ws.Delete                                     ' 删除工作表

4.3 字符串处理

Left(string, length)       ' 获取左侧字符
Mid(string, start, length) ' 获取中间字符
InStr(string, substring)   ' 查找子字符串位置

4.4 数据复制

sourceWs.Rows(1).Copy destination  ' 复制整行

4.5 应用程序控制

Application.ScreenUpdating = False  ' 关闭屏幕刷新
Application.DisplayAlerts = False   ' 关闭警告提示

4.6 条件判断

If condition Then          ' IF语句
Select Case value          ' Select Case语句

4.7 循环结构

For Each ... In ...        ' 集合遍历
For i = start To end       ' 数值循环

5. 使用说明

  1. 数据要求:

    • 第二列(B列)包含PC编号
    • PC编号格式:PC数字-xxx
  2. 运行步骤:

    • 确保当前工作表为需要处理的数据表
    • 运行SplitDataFaster宏
    • 等待处理完成提示
  3. 输出结果:

    • PC01_11:PC1-11的数据
    • PC12_22:PC12-22的数据
    • PC23_44:PC23-44的数据
    • PC45_67:PC45-67的数据
    • PC82:PC82的数据
    • PC83_87:PC83-87的数据
    • PC68_92:PC68-81和PC88-92的数据

6. 性能优化说明

  • 关闭屏幕刷新提高运行速度
  • 关闭警告消息避免中断
  • 使用直接复制而非数组操作
  • 统一处理工作表创建和删除
Sub SplitDataFaster()Dim ws As WorksheetDim lastRow As LongDim i As LongDim pcNum As Integer' 设置当前工作表Set ws = ActiveSheetlastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).RowApplication.ScreenUpdating = FalseApplication.DisplayAlerts = False' 删除现有的分组工作表DeleteExistingSheets' 创建新工作表CreateNewSheets' 复制标题行到每个新表CopyHeaders ws' 处理每一行数据For i = 2 To lastRowIf Left(ws.Cells(i, 2).Value, 2) = "PC" ThenpcNum = CInt(Mid(ws.Cells(i, 2).Value, 3, InStr(ws.Cells(i, 2).Value, "-") - 3))' 根据PC编号分组Select Case pcNumCase 1 To 11CopyRowToSheet ws, i, "PC01_11"Case 12 To 22CopyRowToSheet ws, i, "PC12_22"Case 23 To 44CopyRowToSheet ws, i, "PC23_44"Case 45 To 67CopyRowToSheet ws, i, "PC45_67"Case 82CopyRowToSheet ws, i, "PC82"Case 83 To 87CopyRowToSheet ws, i, "PC83_87"Case 68 To 81, 88 To 92CopyRowToSheet ws, i, "PC68_92"End SelectEnd IfNext i' 调整所有新工作表的列宽AdjustAllSheetsApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueMsgBox "数据分类完成!", vbInformation
End SubSub DeleteExistingSheets()Dim ws As WorksheetFor Each ws In ThisWorkbook.WorksheetsIf ws.Name Like "PC*" Thenws.DeleteEnd IfNext ws
End SubSub CreateNewSheets()Dim sheetNames As VariantDim i As LongsheetNames = Array("PC01_11", "PC12_22", "PC23_44", "PC45_67", "PC82", "PC83_87", "PC68_92")For i = 0 To UBound(sheetNames)Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = sheetNames(i)Next i
End SubSub CopyHeaders(sourceWs As Worksheet)Dim ws As WorksheetFor Each ws In ThisWorkbook.WorksheetsIf ws.Name Like "PC*" ThensourceWs.Rows(1).Copy ws.Rows(1)End IfNext ws
End SubSub CopyRowToSheet(sourceWs As Worksheet, rowNum As Long, targetSheet As String)Dim targetRow As Long' 获取目标工作表的下一个空行targetRow = Worksheets(targetSheet).Cells(Worksheets(targetSheet).Rows.Count, "B").End(xlUp).Row + 1' 复制整行数据sourceWs.Rows(rowNum).Copy Worksheets(targetSheet).Rows(targetRow)
End SubSub AdjustAllSheets()Dim ws As WorksheetFor Each ws In ThisWorkbook.WorksheetsIf ws.Name Like "PC*" Thenws.Columns.AutoFitEnd IfNext ws
End Sub

http://www.ppmy.cn/ops/150642.html

相关文章

网站配置https证书,nginx配置https

1.首先确认安装nginx 和 openssl 执行nginx -v 和 openssl version 生成秘钥key,运行: 创建一个生成文件的目录 cd /etc/nginx/ mkdir ssl_key然后执行密钥key openssl genrsa -des3 -out server.key 20483.创建服务器证书的申请文件server.csr,运行: 这里会需要输入一些基本…

python实战(十四)——Bert-BiLSTM-CRF命名实体识别

一、任务背景 本文进行中文命名实体识别的python实践,使用来自Kaggle的人民日报数据集《renMinRiBao》。这里,我们将构建一个Bert-BiLSTM-CRF模型,并基于该数据集对模型进行微调训练。从下图中可以看到,这个数据集总共包括四个文件…

数据结构--二叉树

目录 有序二叉树: 平衡二叉树: 234树: 红黑树 红黑树特点: 为什么红黑树是最优二叉树? 哈夫曼树和哈夫曼编码 有序二叉树: 平衡二叉树: 在有序二叉树的基础上得来的,且左右子…

lqb.key按键全套

#include "stc15.h" #define FOSC 11059200L //#define T1MS (65536-FOSC/1000) //1T模式 #define T1MS (65536-FOSC/12/1000) //12T模式typedef unsigned char u8; typedef unsigned int u16; typedef unsigned long u32;#define LY 1 //…

C# 多线程 Task TPL任务并行

先总结一下 之前发展过程的要点 1: 为了保证多线程正确顺序执行 线程同步 2: 为了节省操作系统线程资源 线程池 异步 方式管理 正常来讲 使用这俩个要点 进行使用 多线程可以满足开发使用需求 但是 新的问题产生了 那就是 多个异步操作 需要编写大量的代…

【认识油管头部频道】ep3 “PewDiePie”——游戏内容

PewDiePie(本名 Felix Kjellberg)是世界上最知名的 YouTuber 之一,以其独特的内容风格、个性魅力和对观众的深刻理解而闻名。他的成功是多方面因素共同作用的结果,以下是 PewDiePie 火爆的主要原因: 1. 游戏领域的早期…

MyBatis——XML映射文件

在MyBatis中,既可以通过注解的方式配置SQL语句,也可以通过XML映射文件的方式配置SQL语句。对于简单的SQL语句建议直接通过注解的方式配置SQL语句: Delete("delete from user where id#{id}") Integer deleteById(Integer id);但是…

40,【6】CTFHUB WEB SQL MYSQL数据库

进入靶场 12时回显异常,可知是整数型注入 order by判断字节数 使用order by 判断出字节数为3 使用union select 寻找回显点 database爆出了库名 表名有2个,news和qctclblljo,看不出来flag在哪个文件里,都看看 第2个更可疑一点,&a…