ad

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_1.4.2 使用其他指定字符分列

网友投稿 59 2023-11-07

【摘要】 本书摘自《Excel VBA跟卢子起学早做完,不加班(实战进阶版)》一书中第1章,第4节,陈锡卢、李应钦著。

1.4.2 使用其他指定字符分列

皮蛋:代码1-18示例过程采用了内置分隔符进行分列操作;如果使用非内置分隔符,要怎 么设置呢?

无言:要使用其他非内置的分隔符,需要使用2个参数—Other和OtherChar,Other参数必 需赋值为True表明使用其他非内置分隔符, OtherChar参数则必需指定最少一个字符串。还是看 实例吧,下面有一份关于物料编码的表格,要将每一层次拆分开来,以.为分隔符,实现过程 如代码1-19所示。

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_1.4.2 使用其他指定字符分列

皮蛋:这个简单多了。但是这个代码拆分后, A3 、A4 中有的数字前面的0不见了(见 图1-13),这个要怎么办,不会让我重新设置格式吧?

无言:嗯,这个是简化了,咱也搞个简单好懂的。

代码1-19示例中设置 Other 参数为True, 提示要采用非内置分隔符进行分列,再赋值 OtherChar参数的字符为指定的其他分隔符。然后指定拆分存放位置在B 列。

无言: 皮蛋你刚才说的A3、A4 标题下的数字前置0不见了,在拆分的过程中可使用 FieldInfo参数指定拆分后特定列的数字格式。

无言:将代码1-19示例过程做如下修改,将分列后第4组数组设置为文本格式,如代 码1-20所示。

代码1-20示例过程多了 FieldInfo:=Array(Array(1,1),Array(2,1),Array(3,2),Array(4,2)) 语 句,该语句作用是设置为分列后各列组的数字格式。Array(1,1)列组中的第1个数字,代表了 第1列,第2个1代表了要设置的数字格式为常规,第2个参数可以查阅XIColumnDataType 常量常量值及其作用。

皮蛋:如果先单独写Fieldlnfo:=Array(4,1),这样单独设置第4列的格式可以吗?

无言:不行!需要将每一列的位置都写出来,当单独写一列时只会默认设置第1列的格 式,所以必需把每个列组写入,不写都默认为常规设置。

皮蛋:好的,明白了。

无言:接下来继续说以固定列宽来分列。固定列宽用到了DataType 参数和FieldInfo 参数。

DataType 参数用以声明采用哪种方式进行分列——固定字符或者固定列宽。使用固定列宽 时将 DataType参数赋值为XIFixedWidth; 而 FieldInfo 参数则是用于指定分列各字符开始位置 及分列后的该组的格式,字符开始为起始值为0。

现在有一张科目编码(见图1-15)需要拆分,按照每4个字符一组,首先在单元格中使用 Len 函数统计每一行编码的字符个数,再通过Max 函数统计字符统计列中最大的字符数。通过 计算最大字符数可以确认我们需要将编码最多拆分为6组,再通过代码执行分列操作。拆分效 果如图1-16所示,实现过程如代码1-21所示。

代码1-21示例过程为通过固定列拆分科目编码的过程。

(1)MaxC 变量作为统计需要拆分的最大组数,其通过Cells(1,"F")\4+IIf(Cells(1,"F") Mod4=0,0,1) 语句获取,其中Cells(1,"F")引用单元格中的最大字符数;Cells(1,"F")\4 则是 获取最大字符数整除4的商; IIf(Cells(1,"F")Mod4=0,0,1) 判断最大字符数是否存在余数, 是则+1。

(2)ReDim Arr(1 To MaxC)语句为声明并定义一个数组,其范围从1开始到MaxC 的值, 过程中为6,所以数组范围为 Arr(1 to 6)。

(3)通过i循环将需要分列的位置通过Array函数写入Arr数组中,Aray 数组中的(i- 1)*4代表了要分列的具体区域,分列的开始位置0,所以i-1, 然后每一组的个数为4个,所 以*4; Array中的第2个参数设置为2,代表将分列后的格式设置为文本;通过循环写入Arrya 函数的赋值,相当于我们手工书写(如下),但是现在通过i循环实现操作了。

Array(Array(0,2),Array(4,2),Array(8,2),Array(12,2),Array(16,2),Array(20,2))

(4)Rng 变量为指定拆分后要存放数据位置,并作为Range.TextToColumns 方法 Destination参数,DataType参数设置为按列宽分列,并且必需配合FieldInfo参数指明每一个 分列具体位置——因为写入Arr数组,此时将Arr数组赋值给 FieldInfo 参数即可。

无言:使用固定分列的重点在于分列的字符位置,且字符开始位置为0。固定分列原则上 必需知道你要划分的位置点才好操作。

皮蛋:嗯,记住了固定分列的起始位置为0,且必需配合FieldInfo参数。但是上面的数组 定义说得太少了。

无言:现在先把Range对象的常用方法和属性先搞定,后面再学。接下来学习的内容是筛 选的方法。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《Python学习笔记 从入门到实战》_更了解Python的途径之一_6.6 lambda来创建和使用匿名函数
下一篇:《Python学习笔记 从入门到实战》_更了解Python的途径之一_4.3 字典
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×