vba数组

Excel VBA 数组下标越界出错

≯℡__Kan透↙ 提交于 2019-12-19 23:04:06
今天调试一段EXCEL VBA代码,在使用数组时总出现下标越界的报错,害得我查了半天,后来我把vba的本地窗口打开了,一下子就发现问题了。 其实代码很简单,就不写注释了。 当然,我能看出这个问题来,就是通过本地窗口, 注意这个红箭头,Count为0,所以这个数组就出错啦。 解决问题很简单了,正则表达式写错了,呵呵,少了一个点。 呵呵,问题解决啦。 来源: 51CTO 作者: raincity 链接: https://blog.51cto.com/shadingyu/2460076

VBA根据单元格内的逗号把内容拆分行

时光毁灭记忆、已成空白 提交于 2019-12-11 09:47:22
Sub test1() Dim h Dim j As Integer j = 0 '用于辅助循环的进行,可以在拆分行获取下一个需要拆分单元格的行号 'Application.ScreenUpdating = False 'For i = 1 To Range("a65536").End(xlUp).Row For i = 1 To 50 '循环结束值至少等于拆分后的行数,否则会没有分完就跳出循环,导致最后部分无法拆分 'MsgBox i i = i + j h = Split(Cells(i, 1), ",") '把i行1列的单元格内容把逗号前后内容以数组的形式存储到h 'MsgBox i 'MsgBox UBound(h) If UBound(h) > 0 Then Rows(i + 1).Resize(UBound(h)).Insert '在i+1行上插入UBound(h)行空行,UBound(h)获取数组h的最大下标,数组默认下标从0开始,所以需要if判断,当数组存在两个值或以上才执行空行插入 Cells(i, 2).Resize(UBound(h) + 1, 1) = Application.Transpose(h) 'Transpose(h)转置函数,把数组h按列填充,resize(n,m)函数把活动单元格变成n行m列 j = UBound(h) 'MsgBox

VBA数组运用

一世执手 提交于 2019-12-09 14:56:33
Sub a() Dim i人数 As Integer '定义变量 Dim i考试成绩() As Integer '定义数组 Dim i As Integer '定义变量 i人数 = InputBox("输入学生的人数:") '弹出输入框 ReDim Preserve i考试成绩(i人数) '根据输入的人数来定义数组的长度,ReDim指定大小并通过Preserve保留已输入数组的值 For i = 1 To i人数 i考试成绩(i) = InputBox("输入考试成绩" & i) Cells(i, "c") = i考试成绩(i) Next End Sub 来源: https://www.cnblogs.com/xwenwu/p/12010903.html

1、VBA语句集合

亡梦爱人 提交于 2019-12-05 03:54:05
定制模块行为 (1) Option Explicit '强制对模块内所有变量进行声明 Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 Option Compare Text '字符串不区分大小写 Option Base 1 '指定数组的第一个下标为1 (2) On Error Resume Next '忽略错误继续执行VBA代码,避免出现错误消息 (3) On Error GoTo ErrorHandler '当错误发生时跳转到过程中的某个位置 (4) On Error GoTo 0 '恢复正常的错误提示 (5) Application.DisplayAlerts=False '在程序执行过程中使出现的警告框不显示 (6) Application.ScreenUpdating=False '关闭屏幕刷新 Application.ScreenUpdating=True '打开屏幕刷新 (7) Application.Enable.CancelKey=xlDisabled '禁用Ctrl+Break中止宏运行的功能 工作簿 (8) Workbooks.Add() '创建一个新的工作簿 (9) Workbooks(“book1.xls”).Activate '激活名为book1的工作簿 (10) ThisWorkbook

VBA常用函数

岁酱吖の 提交于 2019-12-01 14:00:22
测试类函数: IsNumeric(x) - 是否为数字, 返回Boolean结果。 IsDate(x) - 是否是日期, 返回Boolean结果。 IsEmpty(x) - 是否为Empty, 返回Boolean结果。 IsArray(x) - 指出变量是否为一个数组。 IsError(expression) - 指出表达式是否为一个错误值。 IsNull(expression) - 指出表达式是否不包含任何有效数据 (Null)。 IsObject(identifier) - 指出标识符是否表示对象变量。 数学函数: Round(x,y) - 把x四舍五入得到保留y位小数的值。 字符串函数: Trim(string)、Ltrim(string)、Rtrim(string) - 去掉string左右两端空白,左边的空白,右边的空白。 Len(string) - 计算string长度 Replace(expression,find,replace) - 替换字符串。 Left(string, x)、Right(string, x)、Mid(string, start,x) - 取string左/右/指定段x个字符组成的字符串 Ucase(string)、Lcase(string) - 转换字符串为大、小写 Space(x) - 返回x个空白的字符串 Asc(string) -

ppt VBA 实现随机抽题

大城市里の小女人 提交于 2019-11-30 12:09:45
目录 目标/最终效果 关于VBA VBA简单示例 检查环境 步骤 VBA实现随机抽题 todo challenge 目标/最终效果 目标具体描述: 制作一个ppt,实现随机抽题。 第一页幻灯片中:点击开始按钮后,右边的文本框快速滚动显示随机数字,点击停止按钮后,滚动停止,抽取到的题号会显示到第二个文本框中,并append到第三个文本框的内容中,然后点击跳转按钮,会跳转至相应题目幻灯片。 跳转题目幻灯片后,点击返回键,可返回到第一页幻灯片继续抽题。 第一页幻灯片中,重置按钮将清除所有文本框的内容。 PS:本文适合具有一定编程基础的读者。 最终效果链接: https://pan.baidu.com/s/1C9gmVtLDvTbOOYabEqVlng 提取码:hxt7 关于VBA VBA,即Visual Basic for Application,是一种程序设计语言,集成在某个具体应用软件中(比如最常用的Excel VBA,那么我们将Excel称为 宿主应用程序 )。 VBA与VB(Visual Basic):在开发环境、基本语法、支持的对象和属性和方法等都十分相似。不同之处在于,VBA代码需要 宿主应用程序 的支持,因此只能与 宿主应用程序 一起使用,不能使用VBA创建独立运行的应用程序。 VBA与宏:一组VBA指令的集合形成了宏,宏能够自动执行 宿主应用程序 的功能

Excel VBA 入门(零)

和自甴很熟 提交于 2019-11-29 11:38:20
本教程所用系统环境: Windows 10 Excel 2013 1. 添加开发工具 打开Excel,依然找到“文件”->“选项”->“自定义功能区”,在右侧主选项卡下面的选项中,找到“开发工具”,在前面的小框打勾,确定。返回Excel,即可在菜单栏右侧看到有开发工具: 2. 使用VBE VBE即VBA的编辑环境。通常有两种方式可以进入 菜单栏 -> 开发工具 -> Visual Basic 快捷键:Alt + F11 3. 第一个VBA程序 进入VBE后,在菜单栏依次选择“插入”->“模块”,然后光标会自动定位到代码窗口中,VBA中的代码即在些编写。 VBA常使用“过程”来组织代码(另一种方式是“函数”,后面会介绍)。过程用 Sub sub_name() ' '中间这里是我们要实现各种操作的VBA代码 ' End Sub 表示。其中 Sub 和末尾的 End Sub 是必须的固定形式,sub_name是过程名称,后面的括号 () 是必须的。VBA中允许使用中文作为过程名称,但建议还是尽量使用英文为好。 第一个VBA程序 Sub Hello_World() Debug.Print "Hello, World!" MsgBox "Hello, World!" End Sub 这个过程的名字是 Hello_World 。运行VBA代码有三种方式:

Excel VBA入门(9):实例汇总

 ̄綄美尐妖づ 提交于 2019-11-28 07:45:53
实例1: 统计每个人的培训天数 原始数据如下: 我的思路: 把E列的名字分开来,(都是逗号作为分隔符), 根据天数复制这些人名, 最后统计每一个人名出现的次数即可. step1: E 列的人名分割 使用数据分列 得到结果如下 step2 : 根据天数复制名字, 比如第四行的E,F列, 复制2-1=1次! VBA程序如下: Sub test1() Dim w As Worksheet Set w = Worksheets("2018年修改") Dim i As Integer, j As Integer, num As Integer, col As Integer Dim r As Range, rr As Range ' rr是需要复制的单元格 固定 For i = 4 To 10 Step 1 ' 多少行 num = Range("C" & i) - 1 '复制次数 Debug.Print "复制次数" & num col = w.Range("E" & i).End(xlToRight).Column If col = 256 Then Set rr = w.Range("E" & i) Else Set rr = w.Range(Cells(i, 5), Cells(i, col)) '确定要复制的单元格 End If '定位最右边的第一个单元格 For j = 1 To

VBA数组(十四)

有些话、适合烂在心里 提交于 2019-11-27 05:51:05
我们都知道,一个变量是一个存储值的容器。 有时,开发人员希望一次可以在一个变量中保存多个值。 当一系列值存储在单个变量中时,则称为数组变量。 数组声明 数组声明的方式与声明变量相同,只是数组变量的声明使用括号。 在下面的例子中,括号里提到了数组的大小。参考以下示例 - 'Method 1 : Using Dim Dim arr1() 'Without Size 'Method 2 : Mentioning the Size Dim arr2(5) 'Declared with size of 5 'Method 3 : using 'Array' Parameter Dim arr3 arr3 = Array("apple","Orange","Grapes") 在上面代码中, 虽然数组大小被指定为 5 ,但是当数组索引从零开始时,它可以保持 6 个值。 数组索引不能是负数。 VBScript数组可以在数组中存储任何类型的变量。因此,一个数组可以在一个数组变量中存储一个整数,字符串或字符。 赋值给数组 通过为每个要分配的值指定一个数组索引值,将这些值分配给数组。它可以是一个字符串。 例子 添加一个模块并添加以下代码 - Private Sub Constant_demo_Click() Dim arr(5) arr(0) = "1" 'Number as String arr(1)