Excel精英培训网

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

[已解决]求助 If + instr 问题,运行后if 成立或不成立都返回真值

[复制链接]
发表于 2016-3-23 13:32 | 显示全部楼层 |阅读模式
求助,简单的If 加 instr 对比,如果B单元格包含A单元格内容,则计数加一。
运行后无论实际是否包含, if then全部执行真值导致计数全部加一了。
试着改过用 if like, find 结果都一样,if then对所有循环都执行真值。

代码:
Dim rowfind as integer
rowfind = 0
If InStr(1, Workbooks("AAA").Sheets("Analysis").Cells(1, 14).value, ActiveSheet.Cells(1, 8).value, 1) <> 0 Then
Then
rowfind = rowfind + 1
End If
Next

结果就是不管Workbooks("AAA").Sheets("Analysis").Cells(1, 14).value 用哪个单元格,rowfind都会+1
最佳答案
2016-3-24 15:41
运行了一下你的代码,
你的代码里面最终y=7
  1. If InStr(1, Worksheets("Sheet3").Cells(gimsrow, 7).Value, ActiveSheet.Cells(PIDrow, 8).Value, 1) <> 0 Then
复制代码
这句代码中 ActiveSheet.Cells(PIDrow, 8).Value 在PIDrow=y=7的时候,是空白单元格,所以无论怎样 上面的条件都是成立的

 楼主| 发表于 2016-3-23 13:43 | 显示全部楼层
回复

使用道具 举报

发表于 2016-3-23 14:01 | 显示全部楼层
语法没问题
除非ActiveSheet.Cells(1, 8)为空
回复

使用道具 举报

发表于 2016-3-23 14:10 | 显示全部楼层
看你的代码,应该是一个For循环,不知道你的条件里面是对什么循环。写的不完整,看不出问题
回复

使用道具 举报

 楼主| 发表于 2016-3-23 16:22 | 显示全部楼层
雪舞子 发表于 2016-3-23 14:01
语法没问题
除非ActiveSheet.Cells(1, 8)为空

谢谢,我也很奇怪。 ActiveSheet.Cells(1, 8) 其实是前一段没贴出来的代码赋值的,运行后ActiveSheet.Cells(1, 8) 可以看到是有内容的。
回复

使用道具 举报

 楼主| 发表于 2016-3-23 16:31 | 显示全部楼层
L50814026 发表于 2016-3-23 14:10
看你的代码,应该是一个For循环,不知道你的条件里面是对什么循环。写的不完整,看不出问题

谢谢,是没有贴全。一共是两个循环,在表2的一列中查找表一几个单元格的值。
我做的是依次在表2每一行查找一遍要找的值(个数不确定,由代码第一段确定,数量为 y-4)

我把完整代码贴出来,麻烦帮我看看。运行后LAcount 和 LScount 数字很大,手动确认后我发现是rowfind这个值每一次if都执行为真,计数+1了。谢谢!

回复

使用道具 举报

 楼主| 发表于 2016-3-23 16:32 | 显示全部楼层
完整代码:

Sub CollectData()

'Workbooks.Open Filename:="C:\1_Cisco Folder\NYS\PPM Reports\PID and TAN Data from PPM-v12.xlsx"
'Workbooks.Open Filename:="C:\1_Cisco Folder\NYS\PPM Reports\PPM NPI Project Report_v42.xlsx"
'Workbooks.Open Filename:="C:\1_Cisco Folder\NPI FCS_GAC Field Performance Study\Copy of GIMs Data_29_Feb_2016.xlsx"
'Workbooks.Open Filename:="C:\1_Cisco Folder\NPI FCS_GAC Field Performance Study\IR Status Details_0229.xlsx"

'Put PID under NPI program
ProgramName = Application.InputBox("Enter the NPI Program Name")
Dim x As Integer
Dim y As Integer
y = 5
For x = 1 To Workbooks("PID and TAN Data from PPM-v12").Sheets("PID and TAN Export").UsedRange.Rows.Count
If Workbooks("PID and TAN Data from PPM-v12").Sheets("PID and TAN Export").Cells(x, 1) = ProgramName And Workbooks("PID and TAN Data from PPM-v12").Sheets("PID and TAN Export").Cells(x, 11) = "PID" Then
Cells(y, 8) = Workbooks("PID and TAN Data from PPM-v12").Sheets("PID and TAN Export").Cells(x, 10)
y = y + 1
End If
Next


'Statistics
LScount = 0
LAcount = 0

For gimsrow = 2 To Workbooks("Copy of GIMs Data_29_Feb_2016").Sheets("Analysis").UsedRange.Rows.Count
Dim rowfind As Integer
Dim PIDrow As Integer
rowfind = 0

For PIDrow = 5 To y
If InStr(1, Workbooks("Copy of GIMs Data_29_Feb_2016").Sheets("Analysis").Cells(16, 14).Text, ActiveSheet.Cells(PIDrow, 8).Text, 1) <> 0 Then

rowfind = rowfind + 1

End If

Next

If rowfind > 0 And InStr(Workbooks("Copy of GIMs Data_29_Feb_2016").Sheets("Analysis").Cells(gimsrow, 27).Value, "LS") <> 0 Then
LScount = LScount + 1
End If
'
If rowfind > 0 And InStr(Workbooks("Copy of GIMs Data_29_Feb_2016").Sheets("Analysis").Cells(gimsrow, 27).Value, "LA") <> 0 Then
LAcount = LAcount + 1
End If


Next

Cells(4, 12) = LScount
Cells(4, 13) = LAcount

End Sub
回复

使用道具 举报

 楼主| 发表于 2016-3-23 17:25 | 显示全部楼层
顶一顶,求大大们帮我看看代码
回复

使用道具 举报

发表于 2016-3-23 17:43 | 显示全部楼层
你还是上附件吧。。。
回复

使用道具 举报

 楼主| 发表于 2016-3-23 19:07 | 显示全部楼层
L50814026 发表于 2016-3-23 17:43
你还是上附件吧。。。

你好,原件数据太大了,我简化了一下传上来。在Sheet 1 中按钮运行,L4 和 L5 的数据运行后应该是4和12,但是现在运行以后是17和42,把Sheet3 里所有符合LS 和 LA的都算进去了。代码里的rowfind筛选好像没用了。麻烦帮我看一看是什么问题,谢谢!

VBA Test.zip

26.36 KB, 下载次数: 3

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-21 14:49 , Processed in 0.370594 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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