ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

  [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-6-11 08:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

回复:(gfs57)还有几处地方不明白,请...

本帖已被收录到知识树中,索引项:数组集合和字典

1、数组array()的下界是0,即第一个元素为array()(0),tj()的一维下界为1,第一组元素为tj(1,1)、tj(1,2)。为tj(1,*)赋值,必须取array()(0),它们之间的关系是相差1:tj(i,*)=array()(i-1)。

2、下面的代码可解决第二个问题(保留A列原有的值):

QUOTE:

Sub test()
Dim tj(1 To 15, 1 To 2) '声明数组,保存条件数据
Dim wb() '声明数组,保存程序结果
Dim m%, nRow%, cTxt$
wb = Me.Range("a1:a861") '将A列原数值保存到数组
For i = 1 To 15 '循环1至15行
    tj(i, 1) = Array(271, 301, 329, 360, 413, 430, 458, 483, 575, 612, 646, 675, 758, 789, 861)(i - 1) '给数组赋值
    tj(i, 2) = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O")(i - 1)
Next

For i = 23 To 861 Step 20 '循环
    If nRow < i Then
        m = m + 1 '计数器,记录当前应用条件数组(tj)的一维变量(行)
        nRow = tj(m, 1) '行号
        cTxt = tj(m, 2) '文本
    End If
    wb(i, 1) = cTxt
Next
Me.Range("a1:a861") = wb
End Sub


TA的精华主题

TA的得分主题

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

好,适合初学渐进的好资料,

TA的精华主题

TA的得分主题

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

超级版主:

谢谢你!

详尽的解释,受益非浅!

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-6-11 12:07 | 显示全部楼层

取消数组 tj()

Sub test2()
        Dim wb() '声明数组,保存程序结果
        Dim m%, nRow%, cTxt$
        wb = Me.Range("a1:a861") '将A列原数值保存到数组
        For i = 23 To 861 Step 20 '循环
            If nRow < i Then
                nRow = Array(271, 301, 329, 360, 413, 430, 458, 483, 575, 612, 646, 675, 758, 789, 861)(m) '行号
                cTxt = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O")(m) '文本
                m = m + 1 '计数器,记录当前应用条件数组的一维变量(行)
            End If
            wb(i, 1) = cTxt
        Next
        Me.Range("a1:a861") = wb
    End Sub
   

TA的精华主题

TA的得分主题

发表于 2008-6-11 17:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2008-6-11 19:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
精彩啊,新人也可以学得很明白了,收藏[em05]

TA的精华主题

TA的得分主题

发表于 2008-6-12 00:27 | 显示全部楼层

超级版主:

你好!服务到家——衷心谢谢你。[em17] [em17]

细品了你的代码,那“(m)”简直让人叫绝! [em17]  [em17]

在你的启发下,我也斗胆对代码做了改动(如下),不知是否规范?请赐教。

Sub test3()
        Dim m%, nRow%, cTxt$
        For i = 23 To 861 Step 20 '循环
            If nRow < i Then
                nRow = Array(271, 301, 329, 360, 413, 430, 458, 483, 575, 612, 646, 675, 758, 789, 861)(m) '行号
                cTxt = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O")(m) '文本
                m = m + 1 '计数器,记录当前应用条件数组的一维变量(行)
            End If
            Cells(i, 1) = cTxt    '直接把相应文本填入单元格
        Next
    End Sub

[此贴子已经被作者于2008-6-12 0:59:12编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-6-12 08:17 | 显示全部楼层

直接把相应文本填入单元格

恭喜!你把代码学活、用活了,在此分享你取得成功的快乐。

代码是正确的。提个建议,尽量避免频繁操作工作表,数据量大的情况下,它会影响速度。其次,多数情况下,应该使用“Application.EnableEvents = False”禁止工作表事件以优化速度和避免出现错误结果。下面是一个测试程序,可比较一下,它会让你更喜欢使用数组。

LwzVTAEP.zip (8.49 KB, 下载次数: 121)


利用数组提高运算速度,这里还有一个示例:

http://club.excelhome.net/viewthread.php?tid=329593&extra=&page=1#329593

[此贴子已经被作者于2008-6-20 22:02:03编辑过]

TA的精华主题

TA的得分主题

发表于 2008-6-12 15:43 | 显示全部楼层
课上到这已经是高级水平了,我下载了第一页的11个例子,大致看了一遍,好象说的都是填充文本或数值,山版,如果要在一组单元格内写函数公式,如何实现?

TA的精华主题

TA的得分主题

 楼主| 发表于 2008-6-12 17:19 | 显示全部楼层

回复:(shizi123)在一组单元格内写函数公式

QUOTE:
Sub test()
        Dim arr(1 To 10, 1 To 1)
        For i = 1 To 10
            arr(i, 1) = "=sum(a" & i & ":b" & i & ")"
        Next
        Range("c1:c10") = arr '将数组中的公式写入单元格
    End Sub

QUOTE:
Sub test2()
        Range("d1").Formula = "=sum(a1:b1)" '用代码或人工建立第一个公式
        Range("d1:d10").FillDown '用 FillDown 方法填充公式
    End Sub

QUOTE:

Sub test3()
        Range("e1:e10").Formula = "=sum(a1:b1)" '利用自动填充特性将公式写入单元格区域
    End Sub

一般情况下,利用数组填充公式并没有优势。

Ns6s9rAb.zip (7.11 KB, 下载次数: 97)


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

本版积分规则

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

GMT+8, 2024-11-19 04:40 , Processed in 0.033678 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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