精华内容
下载资源
问答
  • VBA中可以使用数组处理工作表中的数据,是个尽人皆知的秘密了,读取数据加载到数组中也很简单。...千万不要忘记,我们是在用Excel中玩儿VBAExcel中强大的公式可以把这个简化为一行代码就能实现。

    VBA中可以使用数组处理工作表中的数据,是个尽人皆知的秘密了,读取数据加载到数组中也很简单。
    工作表中数据如下图所示,需要将B1:G1的内容加载到数组中。
    在这里插入图片描述
    哒哒,一行代码瞬间生成一个二维数组,不要问为什么是二维数组?为什么使用方括号?如果真的对这两点有疑问,请自行爬楼翻翻我以前的博文,都有详细讲解。

    Sub Demo1()
        arr = [B1:G1]
    End Sub
    

    可是某些英明(奇葩 )的领导非要这样的格式,完全不知道这是为了个毛呀!?
    在这里插入图片描述
    这个该如何弄到一个数组中呢,先分别读入数组,然后再使用动态数组就和合并成2x3的数组了。

    Sub Demo2()
        Dim crr(1 To 2, 1 To 3)
        arr = [B1:D1]
        brr = [E2:G2]
        For i = 1 To 3
            crr(1, i) = arr(1, i)
            crr(2, i) = brr(1, i)
        Next
    End Sub
    

    有些不甘心,这么简单的一个事情,要这么多行代码。千万不要忘记,我们是在用Excel中玩儿VBA,Excel中强大的公式可以把这个简化为一行代码就能实现。
    啥也别说了,直接上代码。

    Sub Demo3()
        arr = [Choose({1;2},B1:D1,E2:G2)]
        brr = [if({1;0},B1:D1,E2:G2)]
    End Sub
    

    【代码解析】
    两行代码都可以实现一次性加载到2x3数组中,实现思路是相同的,只是使用的公式不同。
    Choose函数根据指定的索引值,从参数串中选择值。此处的参数是两个单元格区域,这样就分两次分别选中了B1:D1和E2:G2单元格区域。
    工作表中的If函数将不用解释了,这里需要注意的是,数组{1;0}两个数字的顺序和后面单元格区域的顺序要正确匹配。


    看似旁门左道,其实是超级敏捷的实现方式,综合使用Excel的各种技能,才是最高境界。

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201705/28/1495933094_506614.jpg) !... 如何把 数组 比如 如图1 序号这一列 有序的插入到 图2的 ordernum 表格里面 ,插入完的效果类似图2那样有序的排列
  • 数组必须定义大小后才可以使用? 如果是用for,一般需要知道循环次数,也就是单元格个数 如果用 for each ,while等,能吗?能 比如原始数据 ID 11 47 11 48 27 30 43 Sub get_arr() Dim arr1...

     

    方法1:循环法取数后,放在array里

    • 循环方法
    • 要求数据是有规律的,如连续等?
    • 数组必须定义大小后才可以使用?
    • 如果是用for,一般需要知道循环次数,也就是单元格个数
    • 如果用 for each ,while等,能吗?能

    比如原始数据

    ID
    11
    47
    11
    48
    27
    30
    43
    Sub get_arr()
    Dim arr1(10)    'array必须定义大小后才能使用
    
    For i = 1 To 10
        arr1(i) = Sheets("sheet3").Cells(i + 1, 1)
        Debug.Print (arr1(i))
    Next i
    
    End Sub

     

    方法2:数组大小不定,但也需要指定

    • 好处是,不用知道 要找的行,或者列的具体多少个
    • 局限性就是,只能取 1行,或1列的数据,也许有时这是个优点?
    • 局限性:中间不能有空格,如果有,得先用 对原始数据,VBA删掉空格后,这个之前写过
    • 还有种方法,用的 cells(a1) cells(65536) ? 能弄吗?

     

    ID                  
    11 12 13 14 15 16 17 18 19 20
    47                  
    11                  
    48                  
    27                  
    30                  
    43                  
    60                  
    86                  
    99                  
    Sub get_arr()
    Dim arr1()       'array必须定义大小后才能使用
    
        Rem 取第一列的数据试试
    
        max_row = Sheets("sheet3").Cells(Rows.Count, 1).End(xlUp).Row
        ReDim arr1(1 To max_row)
        i = 2
    Do
        i = i + 1
        arr1(i) = Sheets("sheet3").Cells(i, 1)
        Debug.Print (arr1(i))
    
    Loop While (i + 1) <= max_row
    Sub get_arr()
    Dim arr1()       'array必须定义大小后才能使用
    
        Rem 取第2行的数据试试
    
        max_column = Sheets("sheet3").Cells(2, Columns.Count).End(xlToLeft).Column
        ReDim arr1(1 To max_column)
        i = 0
    Do
        i = i + 1
        arr1(i) = Sheets("sheet3").Cells(2, i)
        Debug.Print (arr1(i))
    
    Loop While (i + 1) <= max_column

     

    方法3---归纳

    取一列最大非空单个元行号方法

    max_row = Sheets("sheet3").Cells(Rows.Count, 1).End(xlUp).Row

    max_row = Sheets("sheet3").Cells(65536, 1).End(xlUp).Row

     max_row = Sheets("sheet3").Range("a:a").End(xlDown).Row

     

    取一列最小非空单个元行号方法

     max_row = Sheets("sheet3").Range("a:a").End(xlup).Row

     

     

    取一行最大非空单个元行号方法

    max_column = Sheets("sheet3").Cells(2, Columns.Count).End(xlToLeft).Column

    max_column = Sheets("sheet3").[iv2].End(xlToLeft).Column

    max_column = Sheets("sheet3").Range("iv2").End(xlToLeft).Column

    错误的  max_column = Sheets("sheet3").Cells("iv2").End(xlToLeft).Column

    max_column = Sheets("sheet3").Range("2:2").End(xlToRight).Column   '好像第1列不能是空的

     

     

    取一行最小非空单个元行号方法

    max_column = Sheets("sheet3").Range("2:2").End(xltoleft).Column    '好像第1列不能是空的

     

     

    如果数据不规则呢?

    当前工作表中已使用的列数
    ActiveSheet.UsedRange.Columns.Count

     

     

     

    方法3?

    https://zhidao.baidu.com/question/1987985423240470147.html

    Sub test1()
    Dim arr1
    Dim arr2
    
    
    rem 思路是,先把EXCEL对象读到一个变量里,然后这个变量就是一个二维表对象
    rem 然后把另外一个数组,取这个二维数组的一个维度,取回数据
    rem 重新输入回去也好做吧
    
    
    arr1 = Sheets("ganzhi2").UsedRange   '这里不能用set arr1 也不能都为数组?只能变量?
    ReDim arr2(1 To UBound(arr1, 2))
    
    For i = 1 To UBound(arr1, 2) Step 1
    arr2(i) = arr1(1, i)
    Debug.Print arr2(i)
    Next
    
    For i = 1 To UBound(arr2) Step 1     '这样又写回去了,嗯
    Cells(3, i) = arr2(i)
    Next
    
    End Sub
    
    

     

     

     

    http://club.excelhome.net/thread-1250877-1-1.html

     

    需要熟悉 lbound ubound(arr,1)

    https://zhidao.baidu.com/question/562477244.html

     

     

    方法3?

    http://club.excelhome.net/forum.php?mod=viewthread&tid=1310859

    Sub test1()
    Dim vArr
    Dim oDic
    Set oDic = CreateObject("Scripting.Dictionary")
     

    vArr = Sheets("ganzhi2").UsedRange.Value '数组读表数据
    For nRow = 1 To UBound(vArr) '一般第一行是标题,就从第2行开始读
    oDic(vArr(nRow, 1)) = nRow '以第一列为字典关键字为例
    Next

    Debug.Print oDic.Count

    End Sub

     

     

    展开全文
  • 原来的问题和代码 Sub ponyma1() Dim arr1() '和arr1()下面赋值要一致?要么都arr? j = 0 '生成数组 arr1() = Range("a1" &...'注意数组写法 arr(1,2)是个2维数组 '从 excel 的 range 读的内...

     

    原来的问题和代码

     

    Sub ponyma1()
    
    Dim arr1() '和arr1()下面赋值要一致?要么都arr?
    j = 0
    
    '生成数组
    arr1() = Range("a1" & ":" & "a" & Range("a65535").End(xlUp).Row)
    '注意数组写法 arr(1,2)是个2维数组
    '从 excel 的 range 读的内容,一定是二维数组
    '特殊的是1列,是2维数组,但可以当成1维数组用?
    'arr1()动态数组,维数未确定,或未显示,未知
    Debug.Print arr1(1, 1)
    
    For Each i In arr1()
    '  Debug.Print arr1(i)
      Debug.Print j, i
      j = j + 1
    Next i
    
    '上面j只是个循环计数,并不是真实的index
    '这样可以取到真实的数组index范围,但还没有对应起来
    Debug.Print LBound(arr1), UBound(arr1)
    '如果是2维等 lbound(arr,2)
    
    
    
    '如果想取到每个array里的元素的index呢?
    
    For Each i In arr1()
       Debug.Print WorksheetFunction.Match(i, arr1, 0), i
    Next
    
    
    End Sub
    

     

    改颜色

    一步一步的解决

    先来一维数组

     

     

    再来二维数组

    Sub ponyma1()
    
    Dim arr1(2, 2)
    
    arr1(0, 0) = 1
    arr1(0, 1) = 2
    arr1(0, 2) = 3
    arr1(1, 0) = 4
    arr1(1, 1) = 5
    arr1(1, 2) = 6
    arr1(2, 0) = 7
    arr1(2, 1) = 8
    arr1(2, 2) = 9
    
    
    For Each i In arr1()
       Debug.Print i
    Next
    
    Debug.Print ""
    
    For i = 0 To 2
        For j = 0 To 2
            Debug.Print arr1(i, j)
        Next
    Next
    
    Debug.Print ""
    
    
    For Each i In arr1()
       Debug.Print Application.Match(i, arr1(), 0), i
    Next
    
    
    
    End Sub
    

     

     

    展开全文
  • 今天说说数组Excel单元格传递信息:即数组如何读取单元格中信息;数组信息如何写入Excel单元格 Part 1:实现内容 有两个Excel工作表,表1:Excel读出;表2:数组写入,为空表 实现功能1,读取Excel中信息: ...

    微信公众号原文

    系统:Windows 7
    软件:Excel 2016

    • 本系列讲讲数组功能
    • 今天说说数组与Excel单元格传递信息:即数组如何读取单元格中信息;数组信息如何写入Excel单元格

    Part 1:实现内容

    1. 有两个Excel工作表,表1:Excel读出;表2:数组写入,为空表
    2. 实现功能1,读取Excel中信息:
    • 读取表1的A1-C1单元格区域,赋值给数组arr1
    • 读取表1的A2-C3单元格区域,赋值给数组arr2
    1. 实现功能2,数组写入Excel表格中
    • arr1写入表2的A1-C1单元格区域
    • arr2写入表2的A2-C3单元格区域
    • 通过Array创建2个数组再写入表2单元格

    表1:Excel读出
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g1FB2Q15-1591524526728)(https://upload-images.jianshu.io/upload_images/7490971-04a23685be638712.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

    Part 2: 代码

    Sub test1()
        ' 读取Excel数据
        Set shtExcel = ThisWorkbook.Worksheets("Excel读出")
        arr1 = shtExcel.Range("A1:C1")
        arr2 = shtExcel.Range("A2:C3")
    
        ' 数组写入Excel
        arr3 = Array(1, 2, 3)
        arr4 = Array(Array(4, 5, 6), Array(7, 8, 9))
        '转置
        arr5 = WorksheetFunction.Transpose(arr4)
        arr6 = WorksheetFunction.Transpose(arr5)
    
        Set shtArr = ThisWorkbook.Worksheets("数组写入")
        shtArr.Cells.ClearContents
        
        shtArr.Range("A1").Resize(1, 3) = arr1
        shtArr.Range("A2").Resize(2, 3) = arr2
        
        shtArr.Range("E1").Resize(1, 3) = arr3
        shtArr.Range("E2").Resize(2, 3) = arr4
        
        shtArr.Range("E7").Resize(1, 3) = arr4(0)
        shtArr.Range("E8").Resize(1, 3) = arr4(1)
        
        shtArr.Range("E10").Resize(2, 3) = arr6
    End Sub
    

    代码截图
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Yt1dpPx-1591524526730)(https://upload-images.jianshu.io/upload_images/7490971-c89984f92a98146f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

    运行过程
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZpsCxrU5-1591524526732)(https://upload-images.jianshu.io/upload_images/7490971-d2559dabc4999be3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

    运行结果
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UZIJHbci-1591524526733)(https://upload-images.jianshu.io/upload_images/7490971-f2cf5291d103feca.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

    Part 3: 部分代码解读

    1. Excel单元格读取数据至数组,将单元格区域赋值给数组即可
      • 无论赋值的1行还是2行单元格,对应数组都是2维数组
    2. 将数组赋值给Excel单元格区域,通过Resize函数先确认单元格区域
      • 单元格.Resize(行数,列数),构建一个矩形区域,单元格为该矩形的左上角
      • 当构建的单元格区域是多行多列时,对应的数组必须是2维数组,如果不是则赋值错误,如表2的E2-G3区域(对应代码shtArr.Range("E2").Resize(2, 3) = arr4,没有成功,返回多个#N/A)
    3. 通过arr4 = Array(Array(4, 5, 6), Array(7, 8, 9))构建的数组本质上还是一个1维数组,如下图所示(订正上一篇文章的错误)
      • 只不过每一个元素又是一个数组
      • 通过两次转置WorksheetFunction.Transpose,可以将其变为真正的2维数组arr6
      • 从本地窗口中查看两个数据的形式可以看到两者表达方式的不同

    arr4
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3C1L9pqk-1591524526736)(https://upload-images.jianshu.io/upload_images/7490971-42522229f75a01b8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

    arr6
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KzClc69s-1591524526737)(https://upload-images.jianshu.io/upload_images/7490971-66d763ed4e2239e1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]


    • 更多学习交流,可加小编微信号learningBin

    更多精彩,请关注微信公众号
    扫描二维码,关注本公众号

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-elOWOTGK-1591524526737)(http://upload-images.jianshu.io/upload_images/7490971-426ce9fb969584ac.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

    展开全文
  • myarray=rs.GetRows'将记录集结果赋值数组示例语句 重置数组大小 ReDim myarray(UBound(myarray) + 1)'重置数组大小不保留原来数据 ReDim Preserve myarray(UBound(myarray) + 1)'重置数组大小且保留原来数据 将...
  • Excel VBA基础语法——数组(四)

    万次阅读 2018-08-06 14:20:11
    上一节中学习了变量类型、变量声明和赋值使用、作用域等内容,在声明变量的过程中会出现一次性需要声明多个同类型变量的情况,如果还是按照常规的方法,那么程序就比较杂乱,为了一次性声明多个同类型变量,引入了...
  • Q:在VBA中如何将SQL得到的数据直接赋值数组? A:可以利用RecordSet的GetRows方法获取数组。 Sub SQL2Arr() Dim AdoCN As Object Dim AdoRe As Object Dim SQL As String Dim ...
  • VBA练习Split Excel取值赋值 For循环 数组上限下限LBound UBound
  • 数组赋值数组数据的读取 Ubound和Lbound函数获取数组的上下限 ForEach---Next循环遍历数组的注意事项 计算程序运行的时间 数组处理的极限 示例 如图所示,该表为某公司的产品销售记录。现需要根据规格...
  • Excel VBA随笔四

    2020-02-26 21:25:44
    VBA数组: dim i as Long dim i timer:时间 t = timer .... msgbox timer - t循环时间长,所以很忌讳在循环中取单元格,可以将单元格的值赋值给string类型变量 数组 dim arr() arr = range("g1:j200000") 通过...
  • Excel VBA编程

    万次阅读 多人点赞 2019-04-11 16:45:51
    文章目录如何创建VBAVBA语法规则声明变量给变量赋值让变量存储的数据参与运算关于声明变量的其他知识变量的作用域特殊的变量——数组声明多维数组声明动态数组其他创建数组的方法数组函数利用UBound求数组的最大索引...
  • Excel VBA 之快速上手

    2009-01-15 12:42:29
    第一章 Excel VBA 简明语言之基础 第一节 标识符 第二节 运算符 第三节 数据类型 第四节 变量与常量 第五节 数组使用 第六节 注释和赋值语句 第七节 书写规范 第八节 条件语句 第九节 循环语句 第十节 ...
  • Excel VBA基础与应用2

    2019-06-14 22:05:24
    VBA数组的声明与赋值 要声明数组,需要指定数组的名称和数据类型,指定数组的大小。声明的语句如下: Dim 数组名(索引号) As 数据类型 例如:要声明业务部有25名员工,这些人的姓名都用String类型的字符串来...
  • Excel VBA 基础教程

    2019-01-01 18:51:06
    .................................................................................................................1 1.1 VBA是什么...........................................................................
  • excel vba教程

    2013-04-20 13:23:53
    一、VBA 语言基础...................................................................................................................1 第一节标识符..........................................................
  • ExcelVBA程序设计.doc

    2011-04-05 21:32:51
    第七章 利用VBA数组管理数据清单和表格 131 1.了解数组 132 2.声明数组 133 3.数组的上界和下界 133 4.在VBA过程里使用数组 134 5.数组和循环语句 135 6.使用二维数组 136 7.静态和动态数组 137 8.数组函数 139 9....
  • Excel VBA程序设计.doc

    2009-07-06 22:16:12
    Excel VBA程序设计.doc 目 录 一、VBA语言基础 1 第一节 标识符 1 第二节 运算符 1 第三节 数据类型 1 第四节 变量与常量 1 第五节 数组 2 第六节 注释和赋值语句 2 第七节 书写规范 2 第八节 判断语句 2 第九节 ...
  • VBA入门系列讲座 1.1 VBA是什么 1.2 excel环境中基于应用程序自动化的优点 1.3 录制简单的宏 ...4.4.4 使用数组 4.4.5 变量赋值 Dim i人数 As Integer 4.5 使用常量 4.6 作用域 4.7 小结 4.8 疑难解答
  • 自定义函数 一、函数使用 自定义的函数如果要在 excel 表格中直接引用的话,需要在模块中定义,实测工作表和工作簿中...vba 函数可以返回数组,只要将函数名变量赋值为数组即可 二、函数参数 支持选择参数 支持...
  • Excel VBA程序设计》 CHM电子书目录 一、VBA语言基础 1 第一节 标识符 1 第二节 运算符 1 第三节 数据类型 1 第四节 变量与常量 1 第五节 数组 2 第六节 注释和赋值语句 2 第七节 书写规范 2 第八节 判断语句 2...
  • 第一章 Excel VBA 简明语言之基础 第一节 标识符 第二节 运算符 第三节 数据类型 第四节 变量与常量 第五节 数组使用 第六节 注释和赋值语句 第七节 书写规范 第八节 条件语句 第九节 循环语句 第十节 ...
  • 数组变量定义 和 数组赋值 一般数组名,可以定义为 变量arr2,或数组名 arr3() 数组可以赋值为1维,2维,3维 特殊的对象range 也可以定义为 range对象,EXCEL天生是2维数组 range对象的数组,同时是2维和1维 ...
  • Excel+VBA+之快速上手

    2012-02-14 19:39:00
    第一章 Excel VBA 简明语言之基础 第一节 标识符 第二节 运算符 第三节 数据类型 第四节 变量与常量 第五节 数组使用 第六节 注释和赋值语句 第七节 书写规范 第八节 条件语句 第九节 循环语句 第十节 ...
  • Excel_VBA教程

    2014-09-22 11:36:34
    第七章 利用VBA数组管理数据清单和表格 131 1.了解数组 132 2.声明数组 133 3.数组的上界和下界 133 4.在VBA过程里使用数组 134 5.数组和循环语句 135 6.使用二维数组 136 7.静态和动态数组 137 8.数组函数 139 9....
  • 第一章 Excel VBA 简明语言之基础 第一节 标识符 第二节 运算符 第三节 数据类型 第四节 变量与常量 第五节 数组使用 第六节 注释和赋值语句 第七节 书写规范 第八节 条件语句 第九节 循环语句 第十节 ...
  • Excel_VBA教程.pdf

    2013-02-22 14:44:55
    第五节 数组2 第六节 注释和赋值语句2 第七节 书写规范2 第八节 判断语句2 第九节 循环语句3 第十节 其他类语句和错误语句处理4 第十一节 过程和函数4 一.Sub过程4 二.Function函数 5 三.Property属性...
  • EXCEL编程VBA高级教程

    2015-04-16 11:40:55
    第五节数组........................................................................................................................................2 第六节注释和赋值语句...................................
  • Excel_VBA程序设计.pdf

    热门讨论 2009-08-31 23:05:20
    非常详尽的Excel_VBA程序设计,好不容易才整理搜索到的。 一、VBA语言基础 1 第一节 标识符 1 第二节 运算符 1 第三节 数据类型 1 第四节 变量与常量 1 第五节 数组 2 第六节 注释和赋值语句 2 第七节 书写规范 2 第...

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

excelvba数组赋值