vba如何将一个单元格区域定义为数组,并判断另一个数组对它赋值?

这个是表2的数据 我把它定义为 ARR()
 A  B C
1张三 男 20
2李四 男 30
3王五 女 40
4赵六 女 15
5王八 男 11
6李九 女 33

我希望把表1的A1:A10定义成一个空数组,ARR1()

请问代码如何才能实现
判断ARR()里边 B列不是男的,把名字写到A1:A10这个区域

下面是简单的代码示例,解释参见注释:


Option Explicit


Sub 宏1()

    Dim arr1(1 To 10, 1 To 1) '这就定义形状和A1:A10相同的空数组

    Dim arr2() '这里不指定大小,下面从区域复制内容的时候能自动调整

    arr2 = Range("a1:c6") '从区域家里数组

    Dim i&, j&

    '下面的循环把数组 arr2 里面的男性姓名复制到 arr1 中

    j = 0 'arr1中已经复制的数据

    For i = 2 To UBound(arr2) '循环arr2的每一行

        If arr2(i, 2) = "男" Then

            j = j + 1

            arr1(j, 1) = arr2(i, 1) '复制姓名

        End If

    Next i

    '把数组arr1写到工作表区域中

    Range("e1").Resize(j, 1) = arr1

End Sub

追问

我把它改了一下。但是运行到第二行的时候就出现错误 13 类型不匹配。请问问题出在哪里呢?

追答

我从图上看第2行是空行,麻烦你标记一下出错的行呢

追问

就是在给ARR2赋值的时候,提示错误13 类型不符

追答

那句是你改错的哈,"h2"需要改为:sheets("车辆").range("h2")
你这句使用的语法是Range(开始单元格,结束单元格)的语法,里面的两个参数都必须是RANGE,不能是文本。

追问

没太明白你的意思,h2 指的是什么? 另外数组赋值的时候,Range(开始单元格,结束单元格)不能用END来确定吗?

追答

你粘贴错误语句,我给你改好

追问

arr2 = Worksheets("车辆信息").Range("b2:e" & Worksheets("车辆信息").Range("e65536").End(xlUp).Row) '从区域家里数组

追答

你上一图的语句不是这样的,这次这个语句已经没有错误了:

arr2 = Worksheets("车辆信息").Range("b2:e" & Worksheets("车辆信息").Range("e65536").End(xlUp).Row) '从区域家里数组


我粘贴到我的环境下使用SELECT方法执行成功,语句和代码如下图:

追问

我也试过,是没问题的,现在我把区域直接指定给ARR的时候,不会提示类型不匹配。

但是溢出了。。。

追答

溢出上下文是没有开始调试的意思

温馨提示:答案为网友推荐,仅供参考
相似回答