马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!
您需要 登录 才可以下载或查看,没有账号?注册
x
在使用数组函数将单元格中的文本进行分隔后写入到工作表Sheet1中的A列单元格,但是如果文本中含有大量的重复值,在写入时也会将重复值写入到工作表中,此时可以使用动态数组去除文本中的重复值,如下面的代码所示。 - Sub Splitarr()0 {: Q m; T* s* u
- Dim Splarr() As String6 \4 ^7 I7 X# W4 z7 L
- Dim Arr() As String: d6 H% X- a3 s- Q
- Dim Temp() As String
6 k# } {5 Z. \ z1 x - Dim r As Integer
8 g# V c2 Z2 |/ j0 d6 Y - Dim i As Integer! k" t+ q& }* U3 Q! ^
- On Error Resume Next
0 }* L/ A( A$ B# ], P5 D2 E - Splarr = Split(Sheet2.Range("a1"), ",")
- Z# ?% l R; {$ r - For i = 0 To UBound(Splarr)
p! ?: }0 E, L9 b' l: h - Temp = Filter(Arr, Splarr(i))& z; j/ E& e; I& C
- If UBound(Temp) < 0 Then
% t; \- s1 J/ n! n - r = r + 18 N- b! M& n2 S3 V* G
- ReDim Preserve Arr(1 To r)
# l: F) ?/ c4 w5 a7 F% H! {! X/ E - Arr(r) = Splarr(i)6 C1 W8 f. L# A* I6 s {: a
- End If
" ~( ?1 _( ~3 n: N/ R( L6 { - Next( n% H2 Q- e- p; a9 {! c1 l
- Sheet1.Range("a1").Resize(r, 1) = Application.Transpose(Arr)
' H' `1 X6 b4 M4 ?2 f: y - End Sub
复制代码
* e$ N: m i Z0 c" B! O( w- |代码解析: Splitarr过程将工作表Sheet2中A1单元格的文本去除重复值后写入到工作表Sheet1中的A列单元格。 第2行代码声明数组Splarr用来保存Sheet2中A1单元格的文本。 第3行代码声明数组Arr用来保存去除重复值后的文本。 第4行代码声明数组Temp用来判断文本是否重复。 第5行代码声明变量r用来保存去除重复值后的文本数量。 第7行代码启动错误处理程序来忽略错误,因为在程序运行到第11行代码会发生下标越界错误。 第8行代码使用Split 函数以Sheet2中A1单元格的文本创建一个下标从零开始的一维数组。关于Split函数请参阅技巧169-2。 第9行代码使用For...Next语句遍历数组Splarr的所有元素。 第10行代码使用Filter函数创建一个数组Temp用来保存以当前Splarr数组的值在Arr数组中的搜索结果。Filter函数返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集,语法如下: Filter(sourcesrray,match[, include[, compare]]) 参数sourcesrray是必需的,要执行搜索的一维字符串数组。 参数match是必需的,要搜索的字符串。 参数include是可选的,Boolean值,表示返回子串是否包含match字符串。如果参数include是True,Filter函数返回的是包含match参数子字符串的数组子集。如果参数include是False,Filter函数返回的是不包含match参数子字符串的数组子集。 参数compare是可选的,所使用的字符串比较类型。 第11行代码根据返回的数组Temp的最大下标来判断当前Splarr数组的值是否重复。在使用使用Filter函数时如果没有相匹配的值,将返回一个空数组,最大下标小于0。 第12行代码如果当前Splarr数组的值不重复则将变量r的值加1。 第13行代码重新定义动态数组大小。ReDim语句,在过程级别中使用,用于为动态数组变量重新分配存储空间,语法如下: ReDim [Preserve]varname(subscripts) [As type] [, varname(subscripts) [As type]] 参数Preserve是可选的,关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。 参数varname是必需的,变量的名称。 参数subscripts是必需的,数组变量的维数,最多可以定义 60 维的多维数组,使用下面的语法; [lower To] upper[,[lower To] upper] 第14行代码将不重复值添加到数组Arr中。 第15行代码使用工作表Transpose函数将去除重复值的的文本转置后写入到工作表的A列单元格中。 如果需要将去除重复值的的文本写入到第一行单元格中,可以将第15行代码改成下面的代码: Sheet1.Range("a1").Resize(1,r) = Arr 如果需要将去除重复值的的文本还是以逗号作为分隔符写入到A1单元格中,可以将第15行代码改成下面的代码: Sheet1.Range("a1")= Join(Arr, ",") Join函数返回一个字符串,该字符串是通过连接某个数组中的多个子字符串而创建的,语法如下: Join(sourcearray[,delimiter]) 参数sourcearray是必需的,包含被连接子字符串的一维数组。 参数delimiter是可选的,在返回字符串中用于分隔子字符串的字符,如果忽略则使用空格(" ")来分隔子字符串。3 M2 j/ s7 q8 P- v
|