ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]如何用VBA求得一个数组中最大的数?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-4-20 05:35 | 显示全部楼层
以下是引用huposhhy在2005-4-19 23:17:00的发言:

又有问题麻烦守老师了:在“D:\文件”目录下有“A1.doc, A2.doc, A5.doc, A43.doc, A121.doc,A23.doc……,B2.doc, B4.doc, B11.doc, B32.doc……”我如何才能用VBA实现对开头字母是“A”的文档进行查找,并将其后面的数字定义为一个数组,加到数组中然后提取其中的最大值?[em08]

以下代码供参考:

'* +++++++++++++++++++++++++++++ '* Created By I Love You_Word!@ExcelHome 2005-4-20 5:36:06 '仅测试于System: Windows NT Word: 10.0 Language: 2052 '^The Code CopyIn [ThisDocument-ThisDocument]^' '* -----------------------------

Option Explicit Sub Example() Dim ADoc As String, FileList As String, FileLists As String, MyArray() As String Dim First As Integer, Last As Integer, i As Integer, j As Integer, Temp As String On Error Resume Next '忽略错误 ChDrive "E" '设置当前驱动器盘符请在此处更改盘符 ChDir "E:\Test" '进入指定目录'请在此处更改文件夹位置 ADoc = Dir("A*.doc") '定义一个以A开头的任意DOC文件的string变量 Do While ADoc <> "" '非空 FileList = VBA.Mid(ADoc, 2, Len(ADoc) - 5) '文件名序号为第二个字符开始到最后第四个字符(.DOC)结束 FileLists = FileLists & FileList & "," '以,为分隔符 ADoc = Dir() Loop FileLists = Mid(FileLists, 1, Len(FileLists) - 1) '重新定义该变量,将最后一个,号去除 ' MsgBox FileLists MyArray = VBA.Split(FileLists, ",") '定义一个以,号为分隔符的数组变量 First = LBound(MyArray) '取得数组下标 Last = UBound(MyArray) '取得数组上标 ' MsgBox MyArray(Last) For i = First To Last - 1 '在数组中循环取值 For j = i + 1 To Last '冒泡法排序,*1转化为数据比较 If MyArray(i) * 1 > MyArray(j) * 1 Then Temp = MyArray(j) MyArray(j) = MyArray(i) MyArray(i) = Temp End If Next j Next i ' MsgBox MyArray(Last) MsgBox "指定文件夹中A为首的最大序号文件为A" & MyArray(Last) & ".Doc", vbOKOnly + vbInformation End Sub '----------------------

TA的精华主题

TA的得分主题

发表于 2005-4-20 07:03 | 显示全部楼层

方法二:使用MAX函数(请在VBE/工具/引用中,勾选对于MICROSOFT EXCEL 10.0 OBJECT LIBRARY 的引用)

'* +++++++++++++++++++++++++++++ '* Created By I Love You_Word!@ExcelHome 2005-4-20 07:03:16 '仅测试于System: Windows NT Word: 10.0 Language: 2052 '^The Code CopyIn [ThisDocument-ThisDocument]^' '* -----------------------------

Option Explicit '运行此代码前必须检查VBE/工具/引用:勾选对于Microsoft Excel 10.0(视版本不同) Object Library Sub Example() Dim ADoc As String, FileList As Integer, MyArray() As Integer, aArray As Variant Dim i As Integer, ExlApp As Excel.Application On Error Resume Next '忽略错误 ChDrive "E" '设置当前驱动器盘符请在此处更改盘符 ChDir "E:\Test" '进入指定目录'请在此处更改文件夹位置 ADoc = Dir("A*.doc") '定义一个以A开头的任意DOC文件的string变量 Do While ADoc <> "" '非空 FileList = VBA.Mid(ADoc, 2, Len(ADoc) - 5) * 1 '文件名序号为第二个字符开始到最后第四个字符(.DOC)结束 ReDim Preserve MyArray(i) '加上Preserve是保留原来的数组中的数据 MyArray(i) = FileList i = i + 1 ADoc = Dir() Loop ' For Each aArray In MyArray ' MsgBox aArray ' Next Set ExlApp = New Excel.Application With ExlApp MsgBox "指定文件夹中A为首的最大序号文件为A" & .WorksheetFunction.Max(MyArray) & ".Doc", vbOKOnly + vbInformation .Quit End With Set ExlApp = Nothing End Sub '----------------------

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-4-21 00:03 | 显示全部楼层
感谢守老师指教。顺便再问一下“ If MyArray(i) * 1 > MyArray(j) * 1 Then”,其中的“*”号是将字符转换为数据,如果去掉“*”是不是也一样?只不过是比较字符,一样能够达到预期效果,你看学生是不是理解的正确?

TA的精华主题

TA的得分主题

发表于 2005-4-21 06:20 | 显示全部楼层
以下是引用huposhhy在2005-4-21 0:03:00的发言: 感谢守老师指教。顺便再问一下“ If MyArray(i) * 1 > MyArray(j) * 1 Then”,其中的“*”号是将字符转换为数据,如果去掉“*”是不是也一样?只不过是比较字符,一样能够达到预期效果,你看学生是不是理解的正确?

字符串的比较与数据类型的比较,是两回事。尽管在少数范围内,可能结果相同,但在代码设计中,必须严格加以区分。详细的规则,我一时半会儿找不到。

只是,字符串的比较,又可以分为三种,如下:

Option Compare 语句为模块指定字符串比较的方法(Binary、Text 或 Database)。如果模块中没有 Option Compare 语句,则缺省的文本比较方法是 Binary。

Option Compare Binary 是根据字符的内部二进制表示而导出的一种排序顺序来进行字符串比较。在 Microsoft Windows 中,排序顺序由代码页确定。典型的二进制排序顺序如下例所示:

A < B < E < Z < a < b < e < z < _ < _ < _ < _ < _ < ?

Option Compare Text 根据由系统区域确定的一种不区分大小写的文本排序级别来进行字符串比较。当使用 Option Compare Text 对相同字符排序时,会产生下述文本排序级别:

(A=a) < ( _=_) < (B=b) < (E=e) < (_=_) < (Z=z) < (_=_)

Option Compare Database 只能在 Microsoft Access 中使用。当需要字符串比较时,将根据数据库的区域 ID 确定的排序级别进行比较。

因此,在程序设计中,应该予以区分。

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

本版积分规则

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

GMT+8, 2025-1-12 12:03 , Processed in 0.017746 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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