Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 6196|回复: 12

[已解决]不喜欢可以合并二维数组吗?

[复制链接]
发表于 2011-4-8 00:59 | 显示全部楼层 |阅读模式
5学分
如题
arr1=[B2:F9]
arr2 =[Y2:Z9]

希望新数组可以合并这2个数组,不知道不用循环可以做到吗??(注明:行范围一样,列范围不一样,但都是二维数组)

不希望通过单元格过度

谢谢解答
最佳答案
2011-4-8 00:59
示例来了
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (ByRef Destination As Any, ByVal Length As Long)

Sub Demo()
' 吕布于2011/04/09
    Dim arr1() As Variant, arr2() As Variant, arrResult() As Variant
    Dim lCount As Long

    ' 取得原始值
    arr1 = Range("B2:F9").Value
    arr2 = Range("H2:I9").Value
    ReDim arrResult(LBound(arr1, 1) To UBound(arr1, 1), LBound(arr1, 2) To UBound(arr1, 2) + UBound(arr2, 2))

    ' 复制arr1到arrResult
    lCount = (UBound(arr1, 1) * UBound(arr1, 2))
    CopyMemory ByVal VarPtr(arrResult(1, 1)), ByVal VarPtr(arr1(1, 1)), 16& * lCount
    ZeroMemory ByVal VarPtr(arr1(1, 1)), 16& * lCount

    ' 复制arr2到arrResult
    lCount = (UBound(arr2, 1) * UBound(arr2, 2))
    CopyMemory ByVal VarPtr(arrResult(1, 1 + UBound(arr1, 2))), ByVal VarPtr(arr2(1, 1)), 16& * lCount
    ZeroMemory ByVal VarPtr(arr2(1, 1)), 16& * lCount

    ' 填充arrResult到表格
    Range("B12").Resize(UBound(arrResult, 1), UBound(arrResult, 2)).ClearContents
    Range("B12").Resize(UBound(arrResult, 1), UBound(arrResult, 2)) = arrResult
End Sub

API合并二维数组.rar (8.48 KB, 下载次数: 18)

最佳答案

查看完整内容

示例来了 Option Explicit Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long) Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (ByRef Destination As Any, ByVal Length As Long) Sub Demo() ' 吕布于2011/04/09 Dim arr1() As Variant, arr2() As Variant, arrResult() As Variant Dim lCount As Long ...
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2011-4-8 00:59 | 显示全部楼层    本楼为最佳答案   
示例来了
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
Private Declare Sub ZeroMemory Lib "kernel32.dll" Alias "RtlZeroMemory" (ByRef Destination As Any, ByVal Length As Long)

Sub Demo()
' 吕布于2011/04/09
    Dim arr1() As Variant, arr2() As Variant, arrResult() As Variant
    Dim lCount As Long

    ' 取得原始值
    arr1 = Range("B2:F9").Value
    arr2 = Range("H2:I9").Value
    ReDim arrResult(LBound(arr1, 1) To UBound(arr1, 1), LBound(arr1, 2) To UBound(arr1, 2) + UBound(arr2, 2))

    ' 复制arr1到arrResult
    lCount = (UBound(arr1, 1) * UBound(arr1, 2))
    CopyMemory ByVal VarPtr(arrResult(1, 1)), ByVal VarPtr(arr1(1, 1)), 16& * lCount
    ZeroMemory ByVal VarPtr(arr1(1, 1)), 16& * lCount

    ' 复制arr2到arrResult
    lCount = (UBound(arr2, 1) * UBound(arr2, 2))
    CopyMemory ByVal VarPtr(arrResult(1, 1 + UBound(arr1, 2))), ByVal VarPtr(arr2(1, 1)), 16& * lCount
    ZeroMemory ByVal VarPtr(arr2(1, 1)), 16& * lCount

    ' 填充arrResult到表格
    Range("B12").Resize(UBound(arrResult, 1), UBound(arrResult, 2)).ClearContents
    Range("B12").Resize(UBound(arrResult, 1), UBound(arrResult, 2)) = arrResult
End Sub

API合并二维数组.rar (8.48 KB, 下载次数: 18)

评分

参与人数 3 +26 收起 理由
xdwy81129 + 10 麻烦吕版主了
放浪形骸 + 6 好东西啊~!
兰色幻想 + 10

查看全部评分

回复

使用道具 举报

发表于 2011-4-8 07:47 | 显示全部楼层
回复

使用道具 举报

发表于 2011-4-8 08:02 | 显示全部楼层
合并数组只能用API来完成,而且容易死机
回复

使用道具 举报

发表于 2011-4-8 08:09 | 显示全部楼层
对啊,要么API,要么用循环,我觉得象现在电脑速度这么快的年代,用循环不是很好吗
回复

使用道具 举报

 楼主| 发表于 2011-4-9 14:21 | 显示全部楼层
回复 过儿 的帖子

为什么容易死机呢??
api从来没有学习过,也希望看看怎么做做

好希望还有其他好的方法

点评

直接与内存打交道,很强大,但操作了不该操作的地方,立马崩溃  发表于 2011-4-9 16:24
回复

使用道具 举报

发表于 2011-4-9 16:29 | 显示全部楼层
网上的文章是这么说的,我也试了,确实电脑差的会死机,何必呢?本来想提高速度,但却带来隐患,所以以后就老老实实的循环了
回复

使用道具 举报

发表于 2011-4-9 16:35 | 显示全部楼层
我的这个不会死(我这里试了好多次都没有死),崩溃应该不是电脑差的原因,是内存操作错误的原因,但有时又不知道怎么修正操作内存的问题
回复

使用道具 举报

发表于 2011-4-9 16:38 | 显示全部楼层
吕?布 发表于 2011-4-9 16:35
我的这个不会死(我这里试了好多次都没有死),崩溃应该不是电脑差的原因,是内存操作错误的原因,但有时又 ...

内存里的东西太神秘了,有点不敢下手。
会不会是32位、64位之间的差别?

点评

个人感觉好象是生存期自管理的原因,就是那个叫什么引用计数的  发表于 2011-4-9 16:41
回复

使用道具 举报

发表于 2011-4-9 16:43 | 显示全部楼层
吕?布 发表于 2011-4-9 16:35
我的这个不会死(我这里试了好多次都没有死),崩溃应该不是电脑差的原因,是内存操作错误的原因,但有时又 ...

那就是说跟系统的环境设置有关咯/?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-23 10:37 , Processed in 0.340084 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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