Excel精英培训网

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

[已解决]挑选数组中指定下标号显示数组

[复制链接]
发表于 2012-12-23 23:15 | 显示全部楼层 |阅读模式
因为我的数据很都有上万行,所以我想用数组或字典方法实现

具体说,比如:  我将数组区域 工作表的内容当作一个数组区域
    然后:我经过一定计算后,我只想取这个数组中的arr(*,1)、arr(*,2)、arr(*,6)、arr(*,7)列,数组学得不好,不知如何实现????
最佳答案
2012-12-24 00:31
  1. Option Explicit

  2. '---------------------------------------------------------------------------------------
  3. ' Procedure : 数据2
  4. ' Author    : hwc2ycy
  5. ' Date      : 2012/12/24
  6. ' Purpose   :
  7. '---------------------------------------------------------------------------------------
  8. '
  9. Sub 数据2()
  10.     Dim arrCon, iRow%, data, result, rg As Range
  11.     On Error Resume Next
  12.     Set rg = Application.InputBox("请用鼠标选择条件区域[N行2列]", , , , , , , 8)
  13.     If rg.SpecialCells(xlCellTypeConstants, xlNumbers + xlTextValues).Count <> rg.Count Then
  14.         MsgBox "条件区域有不非文本数值,请重来"
  15.         Exit Sub
  16.     End If
  17.     If rg.Columns.Count <> 2 Then
  18.         MsgBox "所选的条件区域不是2列,请重来"
  19.         Exit Sub
  20.     End If
  21.     arrCon = rg.Value
  22.     data = Range("a1").CurrentRegion
  23.     If UBound(data) <= 2 Then MsgBox "数据不足": Exit Sub
  24.     Dim i%
  25.     ReDim result(1 To UBound(arrCon), 1 To UBound(data))
  26.     For iRow = 1 To UBound(data)
  27.         For i = 1 To UBound(arrCon)
  28.             result(i, iRow) = data(iRow, arrCon(i, 2))
  29.         Next
  30.     Next
  31.     With Worksheets("结果")
  32.         .Range("a1").CurrentRegion = ""
  33.         .Range("a1").Resize(UBound(data), UBound(arrCon)) = WorksheetFunction.Transpose(result)
  34.     End With
  35.     MsgBox "提取完成"
  36. End Sub
复制代码

挑选数组中指定下标号显示数组.rar

7.08 KB, 下载次数: 14

发表于 2012-12-23 23:59 | 显示全部楼层
  1. Option Explicit

  2. '---------------------------------------------------------------------------------------
  3. ' Procedure : 数据
  4. ' Author    : hwc2ycy
  5. ' Date      : 2012/12/23
  6. ' Purpose   :
  7. '---------------------------------------------------------------------------------------
  8. '
  9. Sub 数据()
  10.     Dim arrCon, iRow%, data, result
  11.     iRow = Cells(65536, 1).End(xlUp).Row
  12.     If iRow > 26 Then
  13.         arrCon = Range("a26:b" & iRow)
  14.         If UBound(arrCon, 2) <= 1 Then MsgBox "数据不足": Exit Sub
  15.     Else
  16.         MsgBox "数据不足"
  17.         Exit Sub
  18.     End If
  19.     data = Range("a1").CurrentRegion
  20.     Dim i%
  21.     ReDim result(1 To UBound(arrCon), 1 To UBound(data))
  22.     For iRow = 1 To UBound(data)
  23.         For i = 1 To UBound(arrCon)
  24.             result(i, iRow) = data(iRow, arrCon(i, 2))
  25.         Next
  26.     Next
  27.     With Worksheets("结果")
  28.         .Range("a1").CurrentRegion = ""
  29.         .Range("a1").Resize(UBound(data), UBound(arrCon)) = WorksheetFunction.Transpose(result)
  30.     End With
  31.     MsgBox "提取完成"
  32. End Sub
复制代码
回复

使用道具 举报

发表于 2012-12-24 00:01 | 显示全部楼层
为避免第2列数据有误,可以在过程内加一句
  1. on error resume next
复制代码
回复

使用道具 举报

发表于 2012-12-24 00:03 | 显示全部楼层
  1. Option Explicit

  2. '---------------------------------------------------------------------------------------
  3. ' Procedure : 数据
  4. ' Author    : hwc2ycy
  5. ' Date      : 2012/12/23
  6. ' Purpose   :
  7. '---------------------------------------------------------------------------------------
  8. '
  9. Sub 数据()
  10.     Dim arrCon, iRow%, data, result
  11.     On Error Resume Next
  12.     iRow = Cells(65536, 1).End(xlUp).Row
  13.     If iRow > 26 Then
  14.         arrCon = Range("a26:b" & iRow)
  15.         If UBound(arrCon, 2) <= 1 Then MsgBox "数据不足": Exit Sub
  16.     Else
  17.         MsgBox "数据不足"
  18.         Exit Sub
  19.     End If
  20.     data = Range("a1").CurrentRegion
  21.     If UBound(data) <= 2 Then MsgBox "数据不足": Exit Sub
  22.     Dim i%
  23.     ReDim result(1 To UBound(arrCon), 1 To UBound(data))
  24.     For iRow = 1 To UBound(data)
  25.         For i = 1 To UBound(arrCon)
  26.             result(i, iRow) = data(iRow, arrCon(i, 2))
  27.         Next
  28.     Next
  29.     With Worksheets("结果")
  30.         .Range("a1").CurrentRegion = ""
  31.         .Range("a1").Resize(UBound(data), UBound(arrCon)) = WorksheetFunction.Transpose(result)
  32.     End With
  33.     MsgBox "提取完成"
  34. End Sub
复制代码
回复

使用道具 举报

发表于 2012-12-24 00:31 | 显示全部楼层    本楼为最佳答案   
  1. Option Explicit

  2. '---------------------------------------------------------------------------------------
  3. ' Procedure : 数据2
  4. ' Author    : hwc2ycy
  5. ' Date      : 2012/12/24
  6. ' Purpose   :
  7. '---------------------------------------------------------------------------------------
  8. '
  9. Sub 数据2()
  10.     Dim arrCon, iRow%, data, result, rg As Range
  11.     On Error Resume Next
  12.     Set rg = Application.InputBox("请用鼠标选择条件区域[N行2列]", , , , , , , 8)
  13.     If rg.SpecialCells(xlCellTypeConstants, xlNumbers + xlTextValues).Count <> rg.Count Then
  14.         MsgBox "条件区域有不非文本数值,请重来"
  15.         Exit Sub
  16.     End If
  17.     If rg.Columns.Count <> 2 Then
  18.         MsgBox "所选的条件区域不是2列,请重来"
  19.         Exit Sub
  20.     End If
  21.     arrCon = rg.Value
  22.     data = Range("a1").CurrentRegion
  23.     If UBound(data) <= 2 Then MsgBox "数据不足": Exit Sub
  24.     Dim i%
  25.     ReDim result(1 To UBound(arrCon), 1 To UBound(data))
  26.     For iRow = 1 To UBound(data)
  27.         For i = 1 To UBound(arrCon)
  28.             result(i, iRow) = data(iRow, arrCon(i, 2))
  29.         Next
  30.     Next
  31.     With Worksheets("结果")
  32.         .Range("a1").CurrentRegion = ""
  33.         .Range("a1").Resize(UBound(data), UBound(arrCon)) = WorksheetFunction.Transpose(result)
  34.     End With
  35.     MsgBox "提取完成"
  36. End Sub
复制代码
回复

使用道具 举报

发表于 2012-12-24 08:30 | 显示全部楼层
5楼的方法,要求条件区只能是常量的文本和数字。如果用MATCH公式来返回所在列,则代码无法运行。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 15:18 , Processed in 0.363375 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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