运行错误“13”,类型不匹配??

qiupan23 2008-01-12 02:49:44
大家好:
如果想要从一列有空格的名单中(假设b列)筛选出重复的名单,并将其放入另外一列中(假设m列),我编写了一段程序,可老出现运行错误“13”,类型不匹配,恳请各位帮忙解决下!不甚感激!
Sub jszq()
Dim myrow1 As Integer
Dim x As Integer, y As Integer, n As Integer
Dim AA, BB, CC
n = 1
Cells(1, 13) = 0
Range("b1").Select
myrow1 = [b65536].End(xlUp).Row
For y = 2 To myrow1
BB = 0
CC = 0
AA = 0
AA = Cells(y, 2)
BB = Application.WorksheetFunction.Search(AA, Range("b2:b" & y - 1)) '看现在的单元格是否在前几行出现过
CC = Application.WorksheetFunction.Search(AA, Range("m1:m" & n)) '看现在的单元格是否已被列入M列
If AA = "" Or CC > 0 Then '若出现无名单的单元格或者已被列入名单的名单,跳过
GoTo 100
ElseIf BB > 0 Then
Cells(n, 13) = Cells(y, 2) '否则若在前几行出现过写入M列
n = n + 1
Else
End If

100: Next y
End Sub
...全文
891 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
meiZiNick 2008-05-01
  • 打赏
  • 举报
回复
以后需再关注,现在先帮你顶一下
z_wenqian 2008-01-17
  • 打赏
  • 举报
回复
怎样了?
zqsntws 2008-01-17
  • 打赏
  • 举报
回复
改用find函数吧
z_wenqian 2008-01-14
  • 打赏
  • 举报
回复
你的程序我看不懂了:
For n = 1 To my1
If Cells(n, 2) = "" Or Cells(n, 2) = "姓名" Then
GoTo 100
AA = Application.WorksheetFunction.CountIf(Range("k1:k" & my2), Cells(n, 2))‘在已列出的重复名单中看有没有现在要查找的名字
ElseIf AA = 1 Then
Cells(n, 2).Interior.ColorIndex = 3 ’若有则填充红色
End If
AA = 0
100: Next n
End Sub
红色的goto 100若放在这里,那么Countif就永远不会执行,AA什么时候能=1呢?





做如下改动:
Sub 第一步2()
Dim y As Integer, n As Integer
Dim BB As Long
For y = 2 To [b65536].End(xlUp).Row
BB = Application.WorksheetFunction.CountIf(Range("b1:b" & y - 1), Cells(y, 2))
If BB >= 1 Then
Cells(y, 2).Interior.ColorIndex = 3
n = Application.WorksheetFunction.Match(Cells(y, 2), Range("b1:b" & y - 1), 0)
Cells(n, 2).Interior.ColorIndex = 3
End If
Next y
End Sub
如果重复次数不是很多,可用此方法,次数太多则程序有些累赘,因为每次都给第一次的重复值设置红色。
祝你早日完成。
qiupan23 2008-01-14
  • 打赏
  • 举报
回复
如果要在之前的基础上,将重复的名单用红色的标出来,我又写了一段程序,可结果只是空格下的第二行填充了红色,怎么找错误也找不出来,各位在帮下忙吧
Sub 第二步()
Dim my1 As Integer, my2 As Integer
Dim m%, n%
Dim AA
Range("b1").Select
my1 = [b65536].End(xlUp).Row
Range("k1").Select
my2 = Selection.CurrentRegion.Rows.Count
For n = 1 To my1
If Cells(n, 2) = "" Or Cells(n, 2) = "姓名" Then
GoTo 100
AA = Application.WorksheetFunction.CountIf(Range("k1:k" & my2), Cells(n, 2))‘在已列出的重复名单中看有没有现在要查找的名字
ElseIf AA = 1 Then
Cells(n, 2).Interior.ColorIndex = 3 ’若有则填充红色
End If
AA = 0
100: Next n
End Sub

另外一种方法和筛选重复名单方法类似,但是第一次出现的重复名单却不能填充
Sub 第一步2()
Dim y As Integer, n As Integer
Dim BB As Long
n = 1
For y = 2 To [b65536].End(xlUp).Row
BB = Application.WorksheetFunction.CountIf(Range("b1:b" & y - 1), Cells(y, 2)) '看现在的单元格是否在前几行出现过
If BB >= 1 Then
Cells(y, 2).Interior.ColorIndex = 3
n = n + 1
End If
Next y
End Sub
z_wenqian 2008-01-13
  • 打赏
  • 举报
回复
myrow1也不要了
Sub jszq()
Dim ddd()
With Range("M1:M" & [B65536].End(xlUp).Row)
.FormulaR1C1 = "=IF(COUNTIF(R1C2:RC[-11],RC[-11])=2,RC[-11],"""")"
ddd = .Value: .Value = ddd
.Sort Key1:=Range("M1")
End With
End Sub
z_wenqian 2008-01-13
  • 打赏
  • 举报
回复
太费劲,用这方法试试
Sub jszq()
Dim myrow1 As Integer, ddd
myrow1 = [b65536].End(xlUp).Row
With Range("M1:M" & myrow1)
.FormulaR1C1 = "=IF(COUNTIF(R1C2:RC[-11],RC[-11])=2,RC[-11],"""")"
ddd = .Value: .Value = ddd
.Sort Key1:=Range("M1")
End With
End Sub
z_wenqian 2008-01-13
  • 打赏
  • 举报
回复
GDTOPONE:
别乱改,if 条件不能> 1,如有3个,3> 1,再写入M列,M列又重复了
[M65536].end(XLUP).row+1 如果开始时M1没内容,那么第一个重复值就会写入第二行,你好好分析分析再改。
z_wenqian 2008-01-13
  • 打赏
  • 举报
回复
GDTOPONE:
别乱改,if 条件不能>1,如有3个, 3>1,再写入M列,M列又重复了
[M65536].end(XLUP).row+1 如果开始时M1没内容,那么地一个重复值就会写入第二行,你好好分析分析再改。
GDTOPONE 2008-01-13
  • 打赏
  • 举报
回复
sub jszq()
For y = 2 To [b65536].End(xlUp).Row
if Application.WorksheetFunction.CountIf(Range("b1:b" & y), Cells(y, 2)) >1 then '看现在的单元格是否在前几行出现过
Cells([M65536].end(XLUP).row+1,13) = Cells(y, 2)
End If
Next y
end sub
z_wenqian 2008-01-13
  • 打赏
  • 举报
回复
按你的方法改的,数据量多的时候效率不如我上面的高
Sub jszq()
Dim y As Integer, n As Integer
Dim BB As Long
n = 1
For y = 2 To [b65536].End(xlUp).Row
BB = Application.WorksheetFunction.CountIf(Range("b1:b" & y), Cells(y, 2)) '看现在的单元格是否在前几行出现过
If BB = 2 Then
Cells(n, 13) = Cells(y, 2) '否则若在前几行出现过一次写入M列,多于一次都不写
n = n + 1
End If
Next y
End Sub
z_wenqian 2008-01-13
  • 打赏
  • 举报
回复
.FormulaR1C1 = "=IF(COUNTIF(R1C2:RC[-11],RC[-11])=2,RC[-11],"""")"

就是给单元格输入公式,即
M1单元格=IF(COUNTIF($B$1:B1,B1)=2,B1,"")
M2单元格=IF(COUNTIF($B$1:B2,B2)=2,B2,"")
M3单元格=IF(COUNTIF($B$1:B3,B3)=2,B3,"")
.
.
.
具体思路:
假定当前为第8行
1.在M8中输入公式,统计B8的值在 B1:B8 中的个数,如果是2 ,说明有两个重复,取出B8,放在M8;如果为0 或 1,说明没有重复,M8="";如果>2,说明有两个以上的重复值,也就说明前面已经去过,可不用再取,M8="".这样在M列中就得到只有重复值得B列的值,对M列排序,重复的值就到了上边,完成了你的要求。

如:
B列 M列公式 M列得到的结果 M列排序后结果
B1:A =IF(COUNTIF($B$1:B1,B1)=2,B1,"") A
B2:B =IF(COUNTIF($B$1:B2,B2)=2,B2,"") B
B3: =IF(COUNTIF($B$1:B3,B3)=2,B3,"") C
B4:d =IF(COUNTIF($B$1:B4,B4)=2,B4,"")
B5:C =IF(COUNTIF($B$1:B5,B5)=2,B5,"")
B6:B =IF(COUNTIF($B$1:B6,B6)=2,B6,"") B
B7: =IF(COUNTIF($B$1:B7,B7)=2,B7,"")
B8:E =IF(COUNTIF($B$1:B8,B8)=2,B8,"")
B9:A =IF(COUNTIF($B$1:B9,B9)=2,B9,"") A
B10:A =IF(COUNTIF($B$1:B10,B10)=2,B10,"")
B11:C =IF(COUNTIF($B$1:B11,B11)=2,B11,"") C

我测试过,没问题




Sub jszq()
Dim ddd()
With Range("M1:M" & [B65536].End(xlUp).Row)
'输入公式
.FormulaR1C1 = "=IF(COUNTIF(R1C2:RC[-11],RC[-11])=2,RC[-11],"""")"
'将公式的计算结果转为值,相当于"复制-选择性粘贴-数值"
ddd = .Value: .Value = ddd
'对M列排序
.Sort Key1:=Range("M1")
End With
End Sub
bluefox1979 2008-01-13
  • 打赏
  • 举报
回复
单步调试,查找是在什么地方出错.
qiupan23 2008-01-13
  • 打赏
  • 举报
回复
我还想问一下如果按照我的方法,怎么改才算对呢?
qiupan23 2008-01-13
  • 打赏
  • 举报
回复
myrow1 =[b65536].End(xlUp).Row 这一行是计算带有空格的指定列的行数(包括空格)
qiupan23 2008-01-13
  • 打赏
  • 举报
回复
结果不对啊,我运行过了。还有能解释下.FormulaR1C1 = "=IF(COUNTIF(R1C2:RC[-11],RC[-11])=2,RC[-11],"""")" 吗?我是刚在学习VB,还请指教
黑领 2008-01-12
  • 打赏
  • 举报
回复
myrow1 =[b65536].End(xlUp).Row 解释一下这一行是什么意思?
在VB里,可以直接这样使用吗?
问题很有可能出现在以下两行上:
BB=Application.WorksheetFunction.Search(AA,Range("b2:b" & y - 1)) '看现在的单元格是否在前几行出现过
CC=Application.WorksheetFunction.Search(AA,Range("m1:m" & n)) '看现在的单元格是否已被列入M列

2,504

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧