Excel精英培训网

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

[已解决]Application.Index遇到数组中空值就数据不匹配

[复制链接]
发表于 2017-3-27 23:39 | 显示全部楼层 |阅读模式
本帖最后由 endupbkb 于 2017-3-27 23:46 编辑

代码如下:
    Sub txsj()
        Dim i&, Myr&, rq, rq1, sx1, sx2, Arr
        Application.ScreenUpdating = False
        rq1 = Sheet1.[b2] - 1
        rq = Sheet1.[b2] - 7
        sx1 = Sheet1.[b5]
        sx2 = Sheet1.[b6]
                 Myr = Sheet2.Cells(Rows.Count, 7).End(xlUp).Row
                 Arr = Sheet2.Range("a2:as" & Myr)
                 For i = 1 To UBound(Arr)
                        If Arr(i, 12) <= rq1 And Arr(i, 12) >= rq And Arr(i, 31) = sx1 And Arr(i, 32) = sx2 Then
                           n = n + 1
                           Sheet3.Cells(n + 1, 1).Resize(1, 45) = Application.Index(Arr, i, 0)
                        End If
                 Next
        Sheet3.[a1].Resize(1, 45) = Sheet2.Rows(1)
        Application.ScreenUpdating = True
      End Sub



运行后发现数组Arr(120)符合if条件,但是运行Application.Index(Arr, i, 0)时数组中有空值导致报错:数据类型不匹配
请教各位老师,我该如何修改,万分感谢!
最佳答案
2017-3-28 09:06
  1.     Sub txsj()
  2.         Dim i&, Myr&, rq, rq1, sx1, sx2, Arr
  3.         Application.ScreenUpdating = False
  4.         rq1 = Sheet1.[b2] - 1
  5.         rq = Sheet1.[b2] - 7
  6.         sx1 = Sheet1.[b5]
  7.         sx2 = Sheet1.[b6]
  8.                  Myr = Sheet2.Cells(Rows.Count, 7).End(xlUp).Row
  9.                  Arr = Sheet2.Range("a2:as" & Myr)
  10.                  For i = 1 To UBound(Arr)
  11.                         If Arr(i, 12) <= rq1 And Arr(i, 12) >= rq And Arr(i, 31) = sx1 And Arr(i, 32) = sx2 Then
  12.                            n = n + 1
  13.                            Sheet2.Rows(i + 1).Copy Sheet3.Cells(n + 1, 1)
  14.                         End If
  15.                  Next
  16.         Sheet2.Rows(1).Copy Sheet3.[a1]
  17.         Application.ScreenUpdating = True
  18.     End Sub
复制代码
简单改了一下

提取时间段内数据.rar

84.54 KB, 下载次数: 2

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-3-28 09:04 | 显示全部楼层
单元格字符超过了255个用INDEX就会报错,T,U,AB三列内容都超过了
回复

使用道具 举报

发表于 2017-3-28 09:06 | 显示全部楼层    本楼为最佳答案   
  1.     Sub txsj()
  2.         Dim i&, Myr&, rq, rq1, sx1, sx2, Arr
  3.         Application.ScreenUpdating = False
  4.         rq1 = Sheet1.[b2] - 1
  5.         rq = Sheet1.[b2] - 7
  6.         sx1 = Sheet1.[b5]
  7.         sx2 = Sheet1.[b6]
  8.                  Myr = Sheet2.Cells(Rows.Count, 7).End(xlUp).Row
  9.                  Arr = Sheet2.Range("a2:as" & Myr)
  10.                  For i = 1 To UBound(Arr)
  11.                         If Arr(i, 12) <= rq1 And Arr(i, 12) >= rq And Arr(i, 31) = sx1 And Arr(i, 32) = sx2 Then
  12.                            n = n + 1
  13.                            Sheet2.Rows(i + 1).Copy Sheet3.Cells(n + 1, 1)
  14.                         End If
  15.                  Next
  16.         Sheet2.Rows(1).Copy Sheet3.[a1]
  17.         Application.ScreenUpdating = True
  18.     End Sub
复制代码
简单改了一下

评分

参与人数 1 +12 收起 理由
ghostjiao + 12 版主好厉害,收我为徒吧

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-4-8 10:56 | 显示全部楼层

版主用的copy,我新建另一个数组存储,然后在赋值单元格,觉得用index函数没得数组来的快。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 07:46 , Processed in 0.372525 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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