公司用于项目号的合成,怕忘记,特此放上这里。若能帮助其它道友,善莫大焉。

比如:001,004,006,007,008,009,010

结果可以输出:001,004,006-010

逻辑:
1、获得数据(一般从表中提取)

2、定义数组,并赋值。(数组大小根据表中数据个数判断)

3、排序(这里用冒泡法,小到大)

4、综合判断数据(核心判断:从步距来判断是否连接和使用哪种符号相连,前后相距1,那么用“-”,前相距非1,用“,”)

5、根据想要的格式进行输出

 Function Br_合成项目号()

     Dim rst As New ADODB.Recordset
rst.CursorLocation = adUseClient Dim Dst As New ADODB.Recordset
Dst.CursorLocation = adUseClient
Dst.Open "SELECT * From tb1;", CurrentProject.Connection, adOpenKeyset, adLockOptimistic Dst.MoveFirst
Do Until Dst.EOF rst.Open "SELECT * From tb1 where [项目号]='" & Dst.Fields("项目号") & "';", CurrentProject.Connection, adOpenKeyset, adLockOptimistic Dim Br_arry ReDim Br_arry(rst.RecordCount) rst.MoveFirst
'数组初始化
Do Until rst.EOF Br_arry(rst.AbsolutePosition) = Right(rst.Fields("梯号"), ) rst.MoveNext
Loop '排序,综合================================================== '冒泡排序,注意要用数字类型
For I = To rst.RecordCount -
For K = I + To rst.RecordCount If CInt(Br_arry(I)) > CInt(Br_arry(K)) Then Dim Str001%
Str001 = Br_arry(K)
Br_arry(K) = Br_arry(I)
Br_arry(I) = Str001 End If Next K
Next I '根据想要的格式进行追加设置
Dim Br_Pjt001$ '第一个数组,注意类型转换
Br_Pjt001 = CStr(Format(CInt(Br_arry()), "")) '判断是否连续
If CInt(Br_arry(rst.RecordCount)) - CInt(Br_arry()) + = rst.RecordCount Then '满足条件为连续数字
Br_Pjt001 = Format(CInt(Br_arry()), "") & "-" & Format(CInt(Br_arry(rst.RecordCount)), "") Else For I = To rst.RecordCount - If Br_arry(I + ) - Br_arry(I) = Then '数字连续段 与后面相距1个单位 If I = Then
Else If Len(Br_Pjt001) > Then '长度超过4才进行处理,一开始情况
If Br_arry(I) - Br_arry(I - ) = Then '前后都相距1个单位,才进行裁剪 Br_Pjt001 = Mid(Br_Pjt001, , Len(Br_Pjt001) - ) End If
End If Br_Pjt001 = Br_Pjt001 & "-" & Format(Br_arry(I + ), "")
End If Else Br_Pjt001 = Br_Pjt001 & "," & Format(Br_arry(I + ), "") End If Next I End If '排序,综合================================================== Debug.Print Dst.Fields("项目号") & "." & Br_Pjt001 Dst.Fields("EEE") = Dst.Fields("项目号") & "." & Br_Pjt001 rst.Close Dst.MoveNext
Loop End Function

VBA /VB/VB中合成分散数据方法的更多相关文章

  1. [转]VB.net中 excel 的range方法

    本文转自:https://blog.csdn.net/bigheadsheep/article/details/7711235 第五章 Range对象基本操作应用示例(1)Range对象可能是VBA代 ...

  2. VB.NET中使用代表对方法异步调用

    按照我们常规的思维方式,计算机应该是干完一件事,然后再干下一件.用术语来说,这种执行任务的方式叫做同步执行(Synchronous Execution).既然这样,那么为什么要引入异步执行的概念呢? ...

  3. c#.net与vb.net中读写Cookie的方法!

    Cookie (HttpCookie的实例)提供了一种在 Web 应用程序中存储用户特定信息的方法.例如,当用户访问您的站点时,您可以使用 Cookie 存储用户首选项或其他信息.当该用户再次访问您的 ...

  4. 教你几种在SQLServer中删除重复数据方法(转)

    转载地址:http://www.jb51.net/article/22980.htm 方法一 复制代码 代码如下: declare @max integer,@id integer declare c ...

  5. JAVA中读取xls数据方法介绍

    用例编号(UI-0001) 用例名称({验证页面跳转|验证元素文本}-简要明确表述) 验证类型 是否执行 初始URL 初始元素xpath 目标元素xpath 目标元素属性 期望结果 UI-0001 验 ...

  6. 随机获得MySQL数据库中100条数据方法 驾照题库项目 MVC架构 biz业务层的实现类 根据考试类型rand或order通过dao数据访问层接口得到数据库中100或全部数据

    package com.swift.jztk.biz; import java.util.Collections; import java.util.Comparator; import java.u ...

  7. mysql互换表中两列数据方法

    1.创建表及记录用于测试 ) unsigned ) ,) unsigned ,) unsigned NOT NULL COMMENT '现价', PRIMARY KEY (`id`) ) ENGINE ...

  8. VB.NET中DataGridView控件

    VB.NET中对于表格数据的显示经常使用到DataGridView控件,其以丰富多样的数据表呈现形式被程序猿喜爱. 本人在做一个小系统中运用DataGridView控件的部分属性,这些功能的使用在使用 ...

  9. VB.NET中使用Linq TO SQL添加数据后获得自增长列ID

    VB.NET中使用Linq TO SQL添加数据后获得自增长列ID: Dim tempOrdre As New Order With { .CustomerID = cmbCustomerName.S ...

随机推荐

  1. ActiveMQ笔记——技术点汇总

    目录 · Introduction to ActiveMQ · Installing ActiveMQ · Message-oriented middleware · JMS specificatio ...

  2. nginx 安装和配置

    1. 安装相关依赖 yum install readline-devel pcre-devel openssl-devel zlib-devel gcc gcc-c++ gd-devel libxml ...

  3. Spring 设置readonly 事务只读模式

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt394 在学习spring事务的时候,发现设置readOnly后不启作用. 查 ...

  4. java中super关键字

    1.子类的构造函数如果要引用super的话,必须把super放在函数的首位,如果想用super继承父类构造的方法,但是没有放在第一行的话,那么在super之前的语句,肯定是为了满足自己想要完成某些行为 ...

  5. java.lang.ClassNotFoundException: com.sun.jna.Native

    在使用sprng boot加elasticsearch的时候遇到 java.lang.ClassNotFoundException: com.sun.jna.Native,百度之后要我导入 <d ...

  6. MySQL的JOIN(四):JOIN优化实践之快速匹配

    这篇博文讲述如何优化扫描速度.我们通过MySQL的JOIN(二):JOIN原理得知了两张表的JOIN操作就是不断从驱动表中取出记录,然后查找出被驱动表中与之匹配的记录并连接.这个过程的实质就是查询操作 ...

  7. unity调用c++ dll方法介绍

    摘要 unity用的很普遍,现在很多代码还是用c++写的,需要用unity去调用c++的代码.这里介绍了一种unity调用c++ dll的方法,希望有所帮助. 我采用的软件是Visual Studio ...

  8. 【Beta阶段】第四次scrum meeting

    Coding/OSChina 地址 1. 会议内容 学号 主要负责的方向 昨日任务 昨日任务完成进度 接下去要做 99 PM 查找适合的素材模块,和105一起把手势功能连接到APP上 100% 查阅换 ...

  9. 201521123029《Java程序设计》第八周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 答: 2. 书面作业 本次作业题集集合 1.List中指定元素的删除( ...

  10. 201521123100 《Java程序设计》第3周学习总结

    1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面作 ...