Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
12
返回列表 发新帖
楼主: Dj_soo

[已解决][求助]二维数组的赋值

[复制链接]
 楼主| 发表于 2009-11-6 14:45 | 显示全部楼层

QUOTE:
以下是引用蓝桥玄霜在2009-11-6 14:40:00的发言:
Sub test()
Dim arr1
Dim arr2, n&, i&
arr1 = Sheet1.[A1:H12]
For i = 1 To UBound(arr1)
    If Cells(i, 1).Interior.ColorIndex = 6 Then
        n = n + 1
        Cells(n, 11).Resize(1, 8) = Application.Index(arr1, i, 0)
    End If
Next
arr2 = Cells(1, 11).Resize(n, 8)
Cells(1, 11).Resize(n, 8).ClearContents
End Sub

你好蓝版,你的代码用了辅助,但是如果数据量很大的话,对单元格太多的操作会使代码的速度很慢,我也就是因为这样才想要纯数组的操作.

如果只针对Arr1来操作,是否可以达到效果呢?

黄色区域的行标假定我们是已经知道的.可以选择其中三行来避免太多的枚举.

[此贴子已经被作者于2009-11-6 14:47:17编辑过]
回复

使用道具 举报

发表于 2009-11-6 14:57 | 显示全部楼层

Sub 数组()
Dim arr1, arr2
Dim x, y, m
y = 1
arr1 = Range("A1:H12")
ReDim arr2(UBound(arr1, 1), UBound(arr1, 2))
For x = 1 To Range("A65536").End(xlUp).Row Step 2
    For m = 0 To UBound(arr2, 2) - 1
        arr2(y, m) = arr1(x, m + 1)
    Next m
    y = y + 1
Next x
[I15].Resize(UBound(arr2, 1), UBound(arr2, 2)) = arr2
End Sub
回复

使用道具 举报

发表于 2009-11-6 15:08 | 显示全部楼层

没办法 好像数组只能取到值 得不到颜色  要通过Interior.ColorIndex

回复

使用道具 举报

发表于 2009-11-6 15:14 | 显示全部楼层

aScscPLz.rar (9.67 KB, 下载次数: 3)
回复

使用道具 举报

发表于 2009-11-6 15:15 | 显示全部楼层    本楼为最佳答案   


Sub test()
    Dim arr1
    Dim arr2()
    Dim i As Long
    Dim j As Long
    Dim n As Long
    n = 1
    arr1 = Sheet1.Range("A1:H12").Value
    For i = 1 To UBound(arr1, 1)
        If Sheet1.Cells(i, 1).Interior.ColorIndex = 6 Then
            ReDim Preserve arr2(1 To UBound(arr1, 2), 1 To n)
            For j = 1 To UBound(arr1, 2)
                arr2(j, n) = arr1(i, j)
            Next j
            n = n + 1
        End If
    Next i
  Sheet1.Range("J1").Resize(n - 1, UBound(arr1, 2)) = Application.Transpose(arr2)

End Sub

回复

使用道具 举报

 楼主| 发表于 2009-11-6 16:17 | 显示全部楼层

QUOTE:
以下是引用搁浅2008在2009-11-6 15:15:00的发言:


Sub test()
    Dim arr1
    Dim arr2()
    Dim i As Long
    Dim j As Long
    Dim n As Long
    n = 1
    arr1 = Sheet1.Range("A1:H12").Value
    For i = 1 To UBound(arr1, 1)
        If Sheet1.Cells(i, 1).Interior.ColorIndex = 6 Then
            ReDim Preserve arr2(1 To UBound(arr1, 2), 1 To n)
            For j = 1 To UBound(arr1, 2)
                arr2(j, n) = arr1(i, j)
            Next j
            n = n + 1
        End If
    Next i
  Sheet1.Range("J1").Resize(n - 1, UBound(arr1, 2)) = Application.Transpose(arr2)

End Sub

刚开会去了,想了一下,实在没有捷径,还是老老实实的用循环.

我想到两种方式,一种是每次循环都像你这样n=n+1来Redim Preserve一次,

另一种是直接定义和原来一样容量的,最后赋值完毕后再循环一次找到临界点后只一次Redim Preserve.

安贤的就是第二种思路,不过后面没有处理上界问题.我再看看先.

不过如果能不用循环的最好了,嘿嘿,暂时不设最佳,等过两天真没有不用循环的方式我再设置了

[em04]
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-31 17:36 , Processed in 0.502506 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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