ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 山菊花

墙上那一串串红辣椒——数组入门讲座

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2007-11-17 22:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:数组集合和字典
深入浅出,通俗易懂,

TA的精华主题

TA的得分主题

发表于 2007-11-27 15:44 | 显示全部楼层

不错不错

TA的精华主题

TA的得分主题

发表于 2007-11-28 09:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习

TA的精华主题

TA的得分主题

发表于 2007-12-1 16:42 | 显示全部楼层
QUOTE:
以下是引用山菊花在2006-10-26 16:15:47的发言:


园子里是不是有红苹果?
你手中的牌是不是有红桃K?
我们用眼睛一瞄就知道。数组元素中是不是有“张三”,是不是有“李四”,我们如何知道?不用担心,Filter()函数刚好可以帮你忙。
Filter()函数在一维数组中搜索文本型数据,并把结果保存到指定的数组中。
A1单元格是以逗号分隔的姓名串,部分有重复,要求剔除其中重复的姓名,把不重复的姓名写入单元格A2向右的区域。
第一步,把所有姓名保存到数组xm()中;
第二步,建立一个数组Arr()保存结果,遍历xm()过程中,检查Arr()中是否存在当前的姓名,用命令:
Temp = Filter(Arr, xm(i)) '在数组Arr()中搜索当前值xm(i),如果找到,结果保存到Temp()数组中,如果找不到,返回一个空的数组Temp()
根据Temp()数组的大小,可以知道当前值xm(i)是不是一个重复的值。
参考:数组入门11.xls


山菊花致敬!

另想请教,搜索数组时如何能达到精确匹配?

如下面示例,我只想搜出 "AA",但Filter给我的却是所有包含"AA"的项

Dim Arg
Arg = Array("AA", "AAA", "AAB")
MsgBox Filter(Arg, "AA")(0)
MsgBox Filter(Arg, "AA")(1)
MsgBox Filter(Arg, "AA")(2)

TA的精华主题

TA的得分主题

发表于 2007-12-1 17:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

不重复数组处理方法

    Dim xm, Arr() As String, Temp() As String '声明变量
   
    Dim s%, r% '声明单值变量
    On Error Resume Next '启动一个错误处理程序
    'xm = Split(Range("a1"), ",") '用A1单元格的数据创建数组
    xm = Array("4", "1", "2", "3", "1", "2", "3")
   
    'Debug.Print TypeName(xm)
    'Debug.Print xm(0), xm(5)
    r = 0 '初值
    s = UBound(xm) '最大下标
    For I = 0 To s '循环
        Temp = Filter(Arr, xm(I)) '搜索数组
        If UBound(Temp) = -1 Then '如果未找到
            r = r + 1 '序号,自增1
            ReDim Preserve Arr(1 To r) '定义动态数组大小
            Arr(r) = xm(I) '把姓名复制到数组Arr()中。
            'Debug.Print TypeName(Arr(r))
            Debug.Print Arr(r)
        End If
    Next

TA的精华主题

TA的得分主题

发表于 2007-12-1 17:58 | 显示全部楼层

不重复数组处理方法

    Dim xm, Arr() As String, Temp() As String '声明变量
   
    Dim s%, r% '声明单值变量
    On Error Resume Next '启动一个错误处理程序
    'xm = Split(Range("a1"), ",") '用A1单元格的数据创建数组
    xm = Array("4", "1", "2", "3", "1", "2", "3")
   
    'Debug.Print TypeName(xm)
    'Debug.Print xm(0), xm(5)
    r = 0 '初值
    s = UBound(xm) '最大下标
    For I = 0 To s '循环
        Temp = Filter(Arr, xm(I)) '搜索数组
        If UBound(Temp) = -1 Then '如果未找到
            r = r + 1 '序号,自增1
            ReDim Preserve Arr(1 To r) '定义动态数组大小
            Arr(r) = xm(I) '把姓名复制到数组Arr()中。
            'Debug.Print TypeName(Arr(r))
            Debug.Print Arr(r)
        End If
    Next

TA的精华主题

TA的得分主题

发表于 2007-12-6 20:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-12-10 16:09 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2007-12-14 11:42 | 显示全部楼层

help me

小弟编写了一个excel的VBA,用于比较两列数据是否相同,但是总是出现下标越界的错误,请各位指导。

注:所用函数为right()

我的邮箱是losttemplewsl@gmail.com;QQ413628666,   help me !!!!

cBeLJ9n4.rar (8.76 KB, 下载次数: 40)
[此贴子已经被作者于2007-12-14 11:50:30编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-12-14 15:58 | 显示全部楼层

回复:(losttemplews)

两个数组是二维数组,改为:

If Right(cname(i, 1), 2) = cname2(j, 1) Then

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 02:47 , Processed in 0.039313 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表