使用字典快速输入编号(匹配编码表)

news2025/2/27 0:06:56

实例需求:在A列输入样品名称之后,在B列字段填写编号,其规则如下:

  • 如果A列已经存在相同样品名称,则将编号递增,例如:A15输入沥青,最后一行相同样品名称在第12行,B15填写递增的编号YP-2023-LQJ-003
  • 如果A列并不存在相同样品名称,那么在Sheet2工作表中查找其编号规则,例如:A16输入土,找到其编号规则为YP-2023-TGJ-,B16填写编号YP-2023-TGJ-001

在这里插入图片描述

在这里插入图片描述

示例代码如下。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sKey As String, iMatch, strIndex, strNum, iRow, arr, brr
    With Target
        If .CountLarge = 1 Then
            If .Column = 1 Then
                Application.EnableEvents = False
                sKey = .Value
                If sKey = "" Then
                    .Offset(0, 1) = ""
                Else
                    iMatch = 0
                    arr = Range("A1:A" & .Row)
                    For iRow = .Row - 1 To 2 Step -1
                        If arr(iRow, 1) = sKey Then
                            iMatch = iRow
                            Exit For
                        End If
                    Next
                    If iMatch > 0 Then
                        strIndex = Cells(iMatch, 2)
                        strNum = Format(Val(Right(strIndex, 3)) + 1, "000")
                        .Offset(0, 1).Value = Left(strIndex, Len(strIndex) - 3) & strNum
                    Else
                        Set dic = CreateObject("scripting.dictionary")
                        brr = Sheet2.[a1].CurrentRegion
                        For iRow = 2 To UBound(brr)
                            dic(brr(iRow, 1)) = brr(iRow, 2)
                        Next
                        If dic.exists(sKey) Then
                            .Offset(0, 1).Value = dic(sKey) & "001"
                        Else
                            MsgBox "样品类型错误!"
                        End If
                    End If
                End If
                Application.EnableEvents = True
            End If
        End If
    End With
End Sub

【代码解析】
自动填写或者自动更新之类的需求,多数都需要使用工作表的Change事件来实现。
第4行代码判断发生变化的单元格(下文简称为目标单元格)是否为单个单元格。
第5行代码判断目标单元格是否位于第一列。
第6行代码禁用系统事件激活,避免修改单元格时,此事件代码被再次触发。
第7行代码将目标单元格的值保存在变量sKey中。
第8行代码判断目标单元格是否为空,如果为空说明删除了A的内容,那么第9行代码清空对应行B列编号。
第12行代码将A列已经输入的内容加载到数组中。
第13~18行代码查找是否已经存在相同的“样品名称”。
第13行代码采用倒序循环,这样可以查找最后一次出现的关键字。
第14行代码判断相应行的内容是否与目标单元格的值相同。
如果相同,第15行代码将行号保存在变量iMatch中,第16行代码退出For循环。
第19行代码判断iMatch的值是否大于0。

  • 如果找到了与目标单元格相同的值,那么第20行代码获取匹配行的编号。
    第21行代码将提取编号后3位,递增1之后,再格式化为3位数字的格式。
    第22行代码拼接新的编号,并写入目标单元格对应行的B列单元格。
  • 如果iMatch值为零,说明目标单元格输入值为新的“样品名称”。
    第24行代码创建字典对象。
    第25行代码将Sheet2中的编号规则加载到数组中。
    第26~28行代码将编号规则添加到字典对象中。
    第29行代码判断目标单元格的值是否存在于字典对象中。
    • 如果存在,第30行代码将在B列填写编号,最后三位设置为001
    • 如果不存在,第32行代码将显示错误提升消息框。

第36行代码恢复系统事件。

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

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

相关文章

第十届蓝桥杯省赛——4质数(质数判断,数学函数:开方函数)

题目:试题 D: 质数本题总分:10 分【问题描述】我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……请你计算第 2019 个质数是多少?【答案提交】这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数&…

环形缓冲区(c语言)

1、概念介绍 在我们需要处理大量数据的时候,不能存储所有的数据,只能先处理先来的,然后将这个数据释放,再去处理下一个数据。 如果在一个线性的缓冲区中,那些已经被处理的数据的内存就会被浪费掉。因为后面的数据只能…

使用码匠连接一切|二

目录 Elasticsearch Oracle ClickHouse DynamoDB CouchDB 关于码匠 作为一款面向开发者的低代码平台,码匠提供了丰富的数据连接能力,能帮助用户快速、轻松地连接和集成多种数据源,包括关系型数据库、非关系型数据库、API 等。平台提供了…

软测入门(一)测试理念及基础知识

软测入门理念 软件的分类 按层次划分:系统软件、应用软件按组织划分:商业软件、开源软件按结构划分:单机软件、 软件缺陷 由来 Grace Hopper发明Cobol计算机语言,也是找出电脑程序中第一个bug的女程序员 BugDefect 定义 软…

Kafka面试问题总结

kafka架构2.基础概念Producer(生产者) : 产生消息的一方。Consumer(消费者) : 消费消息的一方。Broker(代理) : 可以看作是一个独立的 Kafka 实例。多个 Kafka Broker 组成一个 Kafka Cluster。同时&#x…

SpringBoot整合

14-SpringBoot整合Junit 搭建SpringBoot工程 引入starter-test起步依赖 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency>&…

化繁为简高效部署 华为云发布部署服务CodeArts Deploy

​随着互联网、数字化的发展&#xff0c;公司机构与各类企业往往需要进行大量频繁的软件部署&#xff0c;部署设备类型多样&#xff0c;如&#xff1a;本地机器、云上裸金属服务器、云上虚拟机与容器等。面对多种部署模式、分布式复杂运行环境&#xff0c;如何用最短时间、高质…

2021年NOC复赛真题解析

本题来自2021年NOC创新编程复赛操作题。阿短是一位小学五年级学生,本学期即将结束,阿短打算创作一个能够进行四则运算练习的出题程序。程序能够随机出10道题,题目皆是一位数的加减乘除四则运算,每答对一题得1分。请你帮助阿短,编写出这个程序吧。 1.参与运算的两个数值都…

分享5款Windows同类软件中的翘楚

今天要给大家推荐的是5款软件&#xff0c;每个都是同类软件中的个中翘楚&#xff0c;请大家给我高调地使用起来&#xff0c;不用替我藏着掖着。1.沙盒工具——Sandboxie Sandboxie是一个电脑必备的沙盘工具&#xff0c;对于从网上下载的软件安装包、文件、视频、图片等等一切不…

一道阿里类的初始化顺序笔试题

问题很简单&#xff0c;就是下面的代码打印出什么&#xff1f; public class InitializeDemo {private static int k 1;private static InitializeDemo t1 new InitializeDemo("t1" );private static InitializeDemo t2 new InitializeDemo("t2");priv…

硬件工程师常见问题与答疑

在工作中&#xff0c;尤其是做了很多年的&#xff0c;有些问题可能不知道&#xff0c;又不好意思问&#xff0c;怕别人说你连这个都不知道&#xff1f;很尴尬&#xff0c;而且百度又搜不到&#xff0c;本博主收集了很多答疑&#xff0c;希望里面有对你有用的&#xff0c;或者是…

linux修改DNS 系统版本Kylin V10桌面版

配置DNS在银河麒麟桌面操作系统V10 SP1 中修改DNS信息&#xff0c;直接修改/etc/resolv.conf文件中的DNS信息&#xff0c;不能生效。应该参考如下步骤&#xff1a;一、首先修改 /etc/systemd/resolved.conf文件&#xff0c;在其中添加DNS信息在终端中执行以下命令&#xff1a;s…

零基础机器学习做游戏辅助第十五课--原神自动钓鱼(五)完整效果

一、先上效果 二、整理思路 我们现在已经具备了所有需要的技术,我们梳理出所有技术的流程。 判断当前钓鱼状态(未抛竿、已抛竿、上鱼中)。未抛竿,截图并识别图中所有鱼类,选择其中一个种类。根据以选择鱼类选择对应鱼饵。<

python学习积累

glob 1、import glob #导入整个glob模块 2、from glob import golb #从glob模块导入glob函数 ”*”匹配0个或多个字符&#xff1b; ”?”匹配单个字符&#xff1b; ”[]”匹配指定范围内的字符&#xff0c;如&#xff1a;[0-9]匹配数字。 https://zhuanlan.zhihu.com/p/71…

Android---Binder进程间通信机制1

1 binder 是什么&#xff1f; 进程间通信机制&#xff08;一个进程可以理解为一个 app&#xff09; 是一个驱动 Binder.java(implement Ibinder) --> 写一个类 extends Binder.jiva 就有了跨进程的能力。 跨进程的应用&#xff1a; 自己创建的进程&#xff1a;webView、视频…

taobao.appstore.subscribe.get( 查询appstore应用订购关系 )

&#xffe5;开放平台基础API不需用户授权 查询appstore应用订购关系(对于新上架的多版本应用&#xff0c;建议使用taobao.vas.subscribe.get) 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 响应参数 点击获取key和secre…

【计算机体系结构-04】流水线:基础与中级概念 (Pipelinling: Basic and Intermediate Concepts)

1. 借题引入 在亚当斯密所著的《国富论》一书中有描述过这样的场景&#xff0c;扣针制造业中制造一个扣针需要先后完成抽铁丝、拉直、切截、削尖铁丝的一端、打磨铁丝的另一端&#xff08;以便安装圆头&#xff09;&#xff0c;制作圆头也需要二三种不同的操作&#xff0c;包括…

jsp拆迁管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 拆迁管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…

java 批量插入千万条数据优化方案【值得收藏】

场景介绍 再实际开发应用中总会面临导入大批量数据插入数据库、数据迁移、同步等操作在java 后台执行&#xff0c;执行效率的优化问题随之而来&#xff01;比如如何快速往MySQL数据库中导入1000万数据 mybatis 2、MySQL中新建一张user表&#xff0c;为了方便演示只保留id、昵称…

【docker】入门

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录docker是什么&#xff1f;Docker Engine overview概述什么是容器container&#xff1f;什么是容器映像 image&#xff1f;官方解释什么是container和container imageDocker objectsImages - 一个用来创建doc…