Excel精英培训网

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

[已解决]出现“类型不匹配”的问题如何解决

[复制链接]
发表于 2014-3-11 15:18 | 显示全部楼层 |阅读模式
本帖最后由 KDZ 于 2014-3-11 15:21 编辑

出现“类型不匹配”的问题,因为行太多了,总不能一行一行地找啊,请指教如何一次性解决,谢谢!
现将电子表 及 代码 附件呈上。
最佳答案
2014-3-11 16:20
KDZ 发表于 2014-3-11 16:03
你好,谢谢你!不过运行后又出现“溢出的问题”,请您再看一看,谢谢!
  1. Sub 删除重复行()
  2.     Dim d, rng As Range, i&, p$, j%
  3.     Set d = CreateObject("scripting.dictionary")
  4.     With Sheets("sheet2")
  5.         row1 = .Range("E" & .Rows.Count).End(xlUp).Row
  6.         arr = .Range("Q4:AE" & row1)
  7.         arr1 = .Range("A4:H" & row1)
  8.     End With

  9.     For i = 1 To UBound(arr)
  10.         p = ""
  11.         For j = 1 To UBound(arr, 2)
  12.             p = p & "," & IIf(IsError(arr(i, j)), 0, arr(i, j))
  13.         Next
  14.         If Not d.exists(p) Then
  15.             d(p) = ""
  16.         Else
  17.             If rng Is Nothing Then Set rng = Cells(i, 1) Else Set rng = Union(rng, Cells(i, 1))
  18.         End If
  19.     Next
  20.     '前几列名称重复且22、29列为空,挑选17-19三列含1靠前的行
  21.     For j = 3 To 1 Step -1
  22.         For i = 1 To UBound(arr)
  23.             If arr(i, 6) = "" And arr(i, 13) = "" And IIf(IsError(arr(i, j)), 0, arr(i, j)) = 1 Then
  24.                 p = arr1(i, 1) & "," & arr1(i, 2) & "," & arr1(i, 5) & "," & arr1(i, 8)
  25.                 If Not d.exists(p) Then
  26.                     d(p) = i
  27.                 Else
  28.                     If rng Is Nothing Then Set rng = Cells(i, 1) Else Set rng = Union(rng, Cells(i, 1))
  29.                     d(p) = i
  30.                 End If
  31.             End If
  32.         Next
  33.     Next
  34.     If Not rng Is Nothing Then rng.EntireRow.Delete
  35. End Sub
复制代码

Book1.zip

44 KB, 下载次数: 6

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-3-11 15:28 | 显示全部楼层
因为里面有错误值,加个判断语句就可以解决了
  1. Sub 删除重复行()
  2. Dim arr, d, rng As Range, i&, p$, j%
  3. Set d = CreateObject("scripting.dictionary")
  4. arr = ActiveSheet.UsedRange
  5.                                                       
  6. For i = 4 To UBound(arr)
  7.     p = ""
  8.     For j = 1 To UBound(arr, 2)
  9.         p = p & "," & IIf(IsError(arr(i, j)), 0, arr(i, j))
  10.     Next
  11.     If Not d.exists(p) Then
  12.         d(p) = ""
  13.     Else
  14.         If rng Is Nothing Then Set rng = Cells(i, 1) Else Set rng = Union(rng, Cells(i, 1))
  15.     End If
  16. Next
  17. '前几列名称重复且22、29列为空,挑选17-19三列含1靠前的行
  18. For j = 19 To 17 Step -1
  19.     For i = 4 To UBound(arr)
  20.         If arr(i, 22) = "" And arr(i, 29) = "" And IIf(IsError(arr(i, j)), 0, arr(i, j)) = 1 Then
  21.             p = arr(i, 1) & "," & arr(i, 2) & "," & arr(i, 5) & "," & arr(i, 8)
  22.             If Not d.exists(p) Then
  23.                 d(p) = i
  24.             Else
  25.                 If rng Is Nothing Then Set rng = Cells(i, 1) Else Set rng = Union(rng, Cells(i, 1))
  26.                 d(p) = i
  27.             End If
  28.         End If
  29.     Next
  30. Next
  31. If Not rng Is Nothing Then rng.EntireRow.Delete

  32. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-3-11 16:03 | 显示全部楼层
xdragon 发表于 2014-3-11 15:28
因为里面有错误值,加个判断语句就可以解决了

你好,谢谢你!不过运行后又出现“溢出的问题”,请您再看一看,谢谢!

名单.zip

36.47 KB, 下载次数: 19

回复

使用道具 举报

发表于 2014-3-11 16:20 | 显示全部楼层    本楼为最佳答案   
KDZ 发表于 2014-3-11 16:03
你好,谢谢你!不过运行后又出现“溢出的问题”,请您再看一看,谢谢!
  1. Sub 删除重复行()
  2.     Dim d, rng As Range, i&, p$, j%
  3.     Set d = CreateObject("scripting.dictionary")
  4.     With Sheets("sheet2")
  5.         row1 = .Range("E" & .Rows.Count).End(xlUp).Row
  6.         arr = .Range("Q4:AE" & row1)
  7.         arr1 = .Range("A4:H" & row1)
  8.     End With

  9.     For i = 1 To UBound(arr)
  10.         p = ""
  11.         For j = 1 To UBound(arr, 2)
  12.             p = p & "," & IIf(IsError(arr(i, j)), 0, arr(i, j))
  13.         Next
  14.         If Not d.exists(p) Then
  15.             d(p) = ""
  16.         Else
  17.             If rng Is Nothing Then Set rng = Cells(i, 1) Else Set rng = Union(rng, Cells(i, 1))
  18.         End If
  19.     Next
  20.     '前几列名称重复且22、29列为空,挑选17-19三列含1靠前的行
  21.     For j = 3 To 1 Step -1
  22.         For i = 1 To UBound(arr)
  23.             If arr(i, 6) = "" And arr(i, 13) = "" And IIf(IsError(arr(i, j)), 0, arr(i, j)) = 1 Then
  24.                 p = arr1(i, 1) & "," & arr1(i, 2) & "," & arr1(i, 5) & "," & arr1(i, 8)
  25.                 If Not d.exists(p) Then
  26.                     d(p) = i
  27.                 Else
  28.                     If rng Is Nothing Then Set rng = Cells(i, 1) Else Set rng = Union(rng, Cells(i, 1))
  29.                     d(p) = i
  30.                 End If
  31.             End If
  32.         Next
  33.     Next
  34.     If Not rng Is Nothing Then rng.EntireRow.Delete
  35. End Sub
复制代码
回复

使用道具 举报

发表于 2014-3-11 17:03 | 显示全部楼层
KDZ 发表于 2014-3-11 16:03
你好,谢谢你!不过运行后又出现“溢出的问题”,请您再看一看,谢谢!

你好,看楼上的回复吧。溢出是因为你的usedrange区域过大,导致内存不够。
分开需要处理的区域放入数组运算就能解决了。
回复

使用道具 举报

 楼主| 发表于 2014-3-11 18:19 | 显示全部楼层
本帖最后由 KDZ 于 2014-3-12 10:05 编辑

谢谢各位的热心,解决“类型不配”的代码管用,解决“溢出”的代码可能与我的原表不一致吧,放在我的原表不可用,现将基本上原表呈上,请各位高手指教,谢谢!

原表.zip

22 Bytes, 下载次数: 1

回复

使用道具 举报

 楼主| 发表于 2014-3-12 09:29 | 显示全部楼层
本帖最后由 KDZ 于 2014-3-12 12:09 编辑
1表.zip (354.91 KB, 下载次数: 7)

你好,谢谢,我将你的代码按我的条件小加变动放在我的原表中,又出现下标越界,现将原表呈上,请帮忙修改一下,谢谢!!

原表太大上传不了,只能上传一部分,不知又会不会出什么问题


不好意思,附件太大未能上传成功,重新上传,请重新下载。

点评

问题解决,设置最佳答案。新问题,重新发帖提问。 另:附件没有内容。  发表于 2014-3-12 10:39
回复

使用道具 举报

 楼主| 发表于 2014-3-12 12:06 | 显示全部楼层
不好意思,附件太大未能上传成功,重新上传,请重新下载。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 03:53 , Processed in 3.599754 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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