ad

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_1.4 使用内置分隔符分列

网友投稿 67 2023-11-07

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

1.4 使用内置分隔符分列

皮蛋:呵呵,这些参数看起来好繁杂啊。

无言:不要怕,咱挑几个常用参数来说。

因为 Range.TextToColumns 方 法 的 参 数 都 是 可 选 的 , 常 用 的 就 DataType 、Tab、 Semicolon 、Comma 、Space 、Other 、OtherChar 等。

DataType 参数代表使用哪种分列形式;Tab、Semicolon、Comma、Space4 个参数分别代 表了是否采用内置的4种指定字符进行分列标识,如果不采用内置字符,则需将Other参数赋 值为True, 并必需指定OtherChar 参数的字符。

《Excel VBA跟卢子一起学早做完,不加班(实战进阶版)》_提升工作效率_1.4 使用内置分隔符分列

OtherChar参数可以输入多个字符,但是运行时该参数只获取指定字符串中的第1个字符 作为分类标识符号,所以此处只能“专—”。

… 无言:平时使用Excel分列功能最频繁的就是按照指定字符分列,下面通过一个示例——将 图1-11所示的列分隔为如图1-12所示的效果,来说明DataType参数配合其他参数的使用。具体 过程如代码1-18所示。

代码1- 18 指定内置分隔符分列-考勤

001|Sub Kaoqing_TextToColumns_Space)

002| Dim Rng As Range,iAs Long,ii As Integer

003| Dim MaxCol As Integer,MinCol As Integer,Tem_Str As String

004| With Range("A1").CurrentRegion

0051 Set Rng=.Ofiset(1).Resize(.Rows.Count-1,1)

006| Rng TextToColumns Destination:=Rng(1),Offset(0,2),DataType:=xidelimited,

Space:=True

0071 End With

008| Application.ScreenUpdating =False

009| Set Rng=Rng.Offset(0,2).CurrentRegion

010|

MinCol=Rng(1).Column

011|

With Rng

012|

.NumberFormat ="hh:mm"

013| Fori=.Item(1,1).Row To.Item(Rows.Count,1).Row

014| MaxCol=Cells(i,Columns.Count).End(xIToLEFT).Column

015| For ii=0 To MaxCol-MinCol

016| Tem_Str=Tem_Str&Item(i-1,1).Offset(0,ii).Text &""

017| Next ii

018| Offset(i-2,-1).Resize(1,1)=RTrim(Tem_Str

019| Tem Str=

020| Nexti

021 .Clear

0221 .Offset(0,-1).HorizontalAlignment =xILeft

023| End With

024| Application.ScreenUpdating=False

025|End Sub

代码1-18示例过程将A 列中的数据按照指定内置字符空格进行分列后,将分列后的单元 格格式设置为不保留秒的时间格式,并最后将每行时间格式用空格合并为 一 个新的字符串并写 入B 列对应行。( 1 ) 使 用With 语句直接引用A 列连续区域,并使用.Offset(1),Resize(.Rows.Count -1,1) 语句从 A2 单元格获取 A 列区域中除标题外的区域作为分列区域赋值给Rng 变量。

(2)Rng.TextToColumns Destination:=Rng(1).Offset(0,2),DataType:=XIDelimited, Space:=True 语句为将Rng 区域的数据按照内置指定字符(空格)进行分列,并将数据分列到 以Rng 变量的第1个单元格偏移2列后的位置,作为存放分列后的数据。

(3)Set Rng=Rng.Offset(0,2).CurrentRegion 语句重新将 Rng 变量赋值为分列后位置的连 续区域,并根据Rng(1).Column语句获取当前区域中第1个单元格的列号并赋值给MinCol变量; 接着以新位置的Rng 变量单元格格式设置、循环等操作。 .NumberFormat =“hh:mm” 语句将 Rng区域内单元格数字格式进行重新设置,然后进行循环合并操作。

无言:接下来是通过两层循环进行时间格式区域的获取及合并。

(4)首先通过获取i循环中的初始值,该值由.Item(1,1).Row 语句获取 Rng 区域中第1 行第1列的行号;循环终值由.Item(Rows.Count,1).Row语句获取获取 Rng 区域中最后一行的 行号; MaxCol 语句作为统计当前行区域中有效使用行的列号变量,其通过Cells(i,Columns. Count).End(XIToLefi).Column语句获取从当前行极限列向左获取最后的使用列号,作为第2层 循环的终值。第2层的终值通过MaxCol-MinCol 获取两个列号间的差值作为终值,初始值为0。

( 5 ) 第 2 层ii循环中为通过Tem_Str作为字符串合并变量,用于合并当前行中所有时间 格式的链接,链接的字符采用空格,链接的单元格通过Item(i-1,1).Offset(0,ii).Text 语句,先 获取Rng 变量中.Item(i-1,1) 当前行的位置,i-1 是因为Rng 变量的开始行号的2,而 Item 是 指明获取Rng 对象中的X 行 N 列的位置,所以要-1,再通过.Offset(0,ii).Text语句获取偏移循 环ii值的列后当前真实单元格的数字格式作为合并内容;即 Tem_Str=Tem_Str&.Item(i-1,

1).Offset(0,ii).Text &""语句为将当前行偏移每一列的单元格数字格式内容用空格合并为一个 字符串并赋值给 Tem_Str。

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

上一篇:达人之路·《高效办公应用宝典公式·函数与VBA》_1.3 公式和函数的用途
下一篇:达人之路·《高效办公应用宝典公式·函数与VBA》_3.4 隐藏表格中的公式
相关文章

 发表评论

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

×