乾坤大挪移--将一个混乱的excel分类整理的辅助VBA代码

news2024/11/22 23:24:39

excel 乾坤大挪移

你不需要将工作表手动分类;

只需要在”已整理“的标题行增加标题列,

listbox会自动获取”已整理“sheet中的标题列,并列出来

你只需要选中同一列中的单元格,点击想移动到的列表的类别,双击或者点击移动,软件就自动将选中的单元格移动到”已整理“表的指定列的同一行中,对于有几十个列的表格,这样自动移动比手动粘贴要快得多。 

整理前: 

整理后 



'=================================================================================
Private Sub cmd_REF_listbox_Click()
'刷新列表框
UpdateColumnList
End Sub

Private Sub CommandButton1_Click()
Selection.Cut
End Sub

Private Sub CommandButton2_Click()
ActiveSheet.Paste
End Sub

Sub MoveSelectedCellsToSortedSheet()
    Dim wsSource As Worksheet
    Dim wsTarget As Worksheet
    Dim targetCol As Long
    Dim minRow As Long
    Dim minCol As Long
    Dim lastROW As Long
    Dim rngSelected As Range
    Dim cell As Range
    Dim headerRow As Range
    Dim i_not_empty As Integer
    Dim Col_Name As String, Flg_HeBing As Integer
    Dim tem_S$, tem_S1$
    
    
    Col_Name = T_ColName.Text
    Flg_HeBing = 0
    If InStr(Col_Name, "备注") > 0 Then
        Flg_HeBing = 1
    End If
    
    ' 获取当前工作表
    Set wsSource = ActiveSheet
    
    ' 检查是否存在“整理后”工作表
    On Error Resume Next
    Set wsTarget = Worksheets("整理后")
    On Error GoTo 0
    
    If wsTarget Is Nothing Then
        ' 如果不存在,则创建
        Set wsTarget = Sheets.Add(After:=Sheets(Sheets.Count))
        wsTarget.Name = "整理后"
    End If
    
    ' 获取选定的单元格
    Set rngSelected = Selection
    minRow = rngSelected.Cells(1).Row
    minCol = rngSelected.Cells(1).Column

    
    ' 在“整理后”工作表的第一行中查找用户选择的标题
    Set headerRow = wsTarget.Rows(1)
    On Error Resume Next
    targetCol = Application.WorksheetFunction.Match(Col_Name, headerRow, 0)
    
    ' 如果找不到标题则退出子程序
    If IsError(targetCol) Then
        MsgBox "未找到目标列标题 " & Col_Name & vbExclamation
        Exit Sub
    End If
    
    ' 确定目标行
    lastROW = minRow
    
    ' 遍历选定的单元格
    i_not_empty = 0
    tem_S = ""
    For Each cell In rngSelected
        ' 移动单元格数据,覆盖相同值,填写空的单元格
        tem_S1 = wsTarget.Cells(lastROW, targetCol).Value
        If Flg_HeBing = 1 Then
        '数据融合在同一个单元格中
                wsTarget.Cells(lastROW, targetCol).Value = tem_S1 & ";" & cell.Value
                lastROW = lastROW + 1
                cell.Value = ""
        Else
            If IsCellEmpty(wsTarget.Cells(lastROW, targetCol)) Or tem_S1 = cell.Value Then
                wsTarget.Cells(lastROW, targetCol).Value = cell.Value
                lastROW = lastROW + 1
                cell.Value = ""
            Else
            '不相同的数据要保留
                i_not_empty = i_not_empty + 1
                lastROW = lastROW + 1
                ' 处理目标单元格已存在的逻辑
                tem_S = tem_S & vbCrLf & "目标单元格 " & wsTarget.Cells(lastROW, targetCol).Address & " 已经有数据。"
                
            End If
        End If
    Next cell
    If i_not_empty = 0 Then
    ' 清理被移动的单元格
        rngSelected.ClearContents
    Else
        MsgBox tem_S
    End If
    tem_S = ""
End Sub

' 更新ListBox中的列标题
Sub UpdateColumnList()
    Dim wsTarget As Worksheet
    Dim headerRow As Range
    Dim i As Integer
    Dim lastROW As Integer
    ' 获取“整理后”工作表
    Set wsTarget = Worksheets("整理后")
    
    ' 获取第一行的数据作为列标题
    Set headerRow = wsTarget.Rows(1)
    
    ' 清空ListBox
    Frm_ShuXingZhengLi.lstColumns.Clear
    
    ' 将列标题添加到ListBox中
    lastROW = headerRow.Find("*", LookIn:=xlValues, lookat:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
    For i = 1 To lastROW
        Frm_ShuXingZhengLi.lstColumns.AddItem headerRow.Cells(i).Value
    Next i
End Sub

' 判断单元格是否为空
Function IsCellEmpty(targetCell As Range) As Boolean
    If IsError(targetCell.Value) Or IsEmpty(targetCell.Value) Then
        IsCellEmpty = True
    Else
        IsCellEmpty = False
    End If
End Function

Private Sub CommandButton3_Click()
If lstColumns.ListIndex > 10 Then
lstColumns.ListIndex = lstColumns.ListIndex - 10
Else
lstColumns.ListIndex = 0
End If
End Sub

Private Sub CommandButton4_Click()
If lstColumns.ListIndex + 10 < lstColumns.ListCount Then
lstColumns.ListIndex = lstColumns.ListIndex + 10
Else
lstColumns.ListIndex = lstColumns.ListCount - 1
End If
End Sub

Private Sub lstColumns_Click()

T_ColName.Text = lstColumns.Text
End Sub

Private Sub lstColumns_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'移动单元格到listbox指定的列
MoveSelectedCellsToSortedSheet
End Sub

Private Sub Move_cell_Click()
'移动单元格到listbox指定的列
MoveSelectedCellsToSortedSheet
End Sub
Sub Ref1()
 UpdateColumnList '刷新列表框
End Sub

Private Sub UserForm_Click()

End Sub

Private Sub UserForm_Initialize()
Ref1
End Sub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2076958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【云故事探索】NO.7:「越用越上瘾」,中华财险 60% 研发人员用通义灵码提效

云布道师 中华联合财产保险股份有限公司运用“云大模型”技术革新业务&#xff0c;通过阿里云的通义灵码大幅提升编码效率&#xff0c;近60%的研发人员采用&#xff0c;采纳的生成代码占比约20%&#xff0c;显著提升了团队创新能力与代码质量&#xff0c;并积极探索大模型在更多…

基于SpringBoot的智慧党建系统+uniapp移动端+LW示例参考

1.项目介绍 技术栈环境&#xff1a;SpringBootthymeleafuniappIDEA NavicatMySQL 功能介绍&#xff1a; 后端功能&#xff1a;首页管理&#xff08;轮播图、通知公告、新闻管理&#xff09;、用户管理&#xff08;用户信息、用户反馈、用户订单、用户动态&#xff09;、其他…

一文搞定MybatisPlus

Mybatis简介 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个 MyBatis 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 &#xff08;来自官网&#xff09; 体验Mybatisplus 1.创建SpringBoot工程&#xff0c;导入m…

HarmonyOS--认证服务-操作步骤

HarmonyOS–认证服务 文章目录 一、注册华为账号开通认证服务二、添加项目&#xff1a;*包名要与项目的包名保持一致三、获取需要的文件四、创建项目&#xff1a;*包名要与项目的包名保持一致五、添加json文件六、加入请求权限七、加入依赖八、修改构建配置文件&#xff1a;bui…

【UDS诊断】——0x34、0x36、0x37服务

&#x1f64b;‍♂️【UDS诊断服务介绍合集】系列&#x1f481;‍♂️点击跳转 文章目录 一、服务概述1.0x34服务——请求下载数据1.1.0x34格式 2.0x36服务——数据传输2.1.0x36格式 3.0x37服务——退出上传下载3.1.0x37格式 一、服务概述 Client端使用Routine Control服务来…

WIN32实现远程桌面监控

文章目录 完整代码API简介调试代码 后记reference 完整代码 server.cpp #include <winsock2.h> #include <Ws2tcpip.h> #include <windows.h> #include <stdio.h> #include <vector> #pragma comment(lib, "ws2_32.lib")LRESULT CAL…

什么是韦恩图,怎么制作?用这款软件在线绘制,简单又好用!

在日常工作和学习中&#xff0c;我们经常需要用图表来可视化呈现复杂的信息和关系。其中&#xff0c;韦恩图是一种简洁而强大的可视化工具&#xff0c;能够清晰地展现集合之间的关系&#xff0c;诸如包含与被包含、互斥、并列等。 不过对刚接触韦恩图的人而言&#xff0c;或多…

traceroute命令这样用,追踪主机路由没烦恼

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 晚上好&#xff0c;我的网工朋友。 网络的稳定性和可靠性对于业务连续性至关重要。当涉及到网络连接问题时&#xff0c;有一个强大的工具就是 tr…

Certum Domain Validation CA SHA2

Certum是波兰的一家数字证书厂家&#xff0c;该机构也是目前世界第四家兼容性在99%机构&#xff08;包括历史版本浏览器&#xff09;&#xff0c;目前在国内有授权提供商&#xff1a;Gworg提供签发和认证&#xff0c;拥有二级代理划分&#xff0c;适合长期做SSL证书业务或者集成…

年薪100K入职字节测试岗现在分享下我常背的软件测试面试题

800道软件测试面试真题&#xff0c;高清打印版打包带走&#xff0c;横扫软件测试面试高频问题&#xff0c;涵盖测试理论、Linux、MySQL、Web测试、接口测试、APP测试、Python、Selenium、性能测试、LordRunner、计算机网络、数据结构与算法、逻辑思维、人力资源等模块面试题&am…

Linux文件编程(系统API调用)

文章目录 Linux文件编程标注C的IO缓存类型代码示例--缓存区的存在 文件I/O系统调用标准C库关于文件的输入输出函数FILE结构体文件描述符文件描述符与文件指针的相互转换 系统调用常用函数open函数&#xff08;打开或者创建文件&#xff09;creat函数&#xff08;创建一个现有文…

JAVA-封装

目录 一、封装的概念 二、封装扩展之包 1. 包的概念 2.导入包中的类 3.自定义包 4.常见的包 三、访问限定符 在同一包中&#xff1a; 在不同包中&#xff1a;​编辑 一、封装的概念 面向对象程序三大特性&#xff1a;封装、继承、多态。而类和对象阶段&#xff0c;主…

ESP32修改分区表

修改分区表 官方参考 在工程目录文件夹新建分区表&#xff0c;参考官方的写就行&#xff0c;我这里改成了8M的FLASH&#xff0c;所以新建的分区表为名字是 default_8MB.csv &#xff0c;内容如下&#xff1a; # Name, Type, SubType, Offset, Size, Flags nvs, data, …

后端微服务与分布式系统

编写一篇关于后端微服务和分布式系统的文档&#xff0c;需要详细讨论微服务架构的核心概念、优缺点、关键技术&#xff0c;以及在分布式系统中的应用。以下是文档的大纲和内容概述&#xff1a; 后端微服务与分布式系统 1. 简介 微服务架构是一种将大型应用程序分解为一系列小…

leetCode - - - 二叉树

目录​​​​​​​ 1.前中后序遍历&#xff08;递归&#xff09; 2.前中后序遍历&#xff08;迭代&#xff09; 3.翻转二叉树&#xff08;LeetCode 226&#xff09; 4.最大二叉树&#xff08; LeetCode 654 &#xff09; 5.平衡二叉树&#xff08; LeetCode 110 &#xf…

02- javascript 高阶-构造函数(知识点)呀

目录 1.构造函数 1.1 JS构造函数的实例成员和静态成员 1.1.1实例成员 1.1.2静态成员 1.2构造函数原型prototype 1.3对象原型 1.4 constructor构造函数 1.5原型链 1.6构造函数实例和原型对象三角关系 1.7原型链和成员的查找机制 1.7.1 Object.prototype.hasOwnPropert…

WEB渗透Win提权篇-提权工具合集

提权工具合集包&#xff1a; 夸克网盘分享 往期文章 WEB渗透Win提权篇-RDP&Firewall-CSDN博客 WEB渗透Win提权篇-MSSQL-CSDN博客 WEB渗透Win提权篇-MYSQL-udf-CSDN博客 WEB渗透Win提权篇-AccountSpoofing-CSDN博客 WEB渗透Win提权篇-弱权限提权-CSDN博客 Tools合集 工…

UVa1670/LA5920 Kingdom Roadmap

UVa1670/LA5920 Kingdom Roadmap 题目链接题意分析AC 代码 题目链接 本题是2011年icpc欧洲区域赛东北欧赛区的K题 题意 输入一个n&#xff08;n≤100000&#xff09;个结点的树&#xff0c;添加尽量少的边&#xff0c;使得任意删除一条边之后图仍然连通。如下图所示&#xff0…

如果是你,你会背叛师门吗?看了凌晨一点杭州隧道里睡满的外卖员,我觉得李佳琦被骂一点也不冤——早读(逆天打工人爬取热门微信文章解读)

如果是你&#xff0c;你会背叛师门吗&#xff1f;&#xff1f; 引言Python 代码第一篇 洞见 看了凌晨一点杭州隧道里睡满的外卖员&#xff0c;我觉得李佳琦被骂一点也不冤第二篇 股市风云结尾 (先不论人品如何&#xff0c;这个问题就有点类似董宇辉跟新东方&#xff0c;大伙且看…

Java学习第一天

Java介绍&#xff1a; Java是一种高级编程语言&#xff1b;由sun公司研发&#xff0c;之后被Oracle公司收购&#xff1b;Java之父是詹姆斯.高斯林&#xff1b;Java什么都能做但主要用于企业互联网系统的开发&#xff1b;包括JavaSE&#xff08;标准版&#xff09;、JavaEE&…