请求1个VBA代码:多条件查找(多条件复制区域), 麻烦对每句代码作简单说明.

条件来源 要求结果
第4行以上是标题 A列 B列 C列 D列 在另1张表上
第5行 青菜. 张生 456 A列 B列
第6行 3号 冬瓜, 陈生 … 456
10号 青菜. 冯太 外买1 10号 外买1
说明:B列,C列是固定字符数的 白菜, 梁兄 外买2 外买2
白瓜, 李生 XXXXXXX XXXXXXX
白菜, 陈生 饭堂A 12号 FFF
22号 黄瓜. 李太 饭堂A 22号 饭堂A
南瓜. 陈管 外买1
冬瓜, 吴SI YYYYYY
黄瓜, 李太 饭堂A
12号 黄瓜. 李生 FFF
13号 白瓜, 陈管 饭堂B
第1000行 青菜. 冯太 饭堂A
把符合"青菜." "白菜,"或者符合"李生""李太"的A列D列对应行的内容复制到另1个表的A.B列中,且要求B列的内容不能重复.
发出的内容全乱套了,我的意思是:
A列: 2号 / 3号/ / /
B列: ☆☆/ ○○/◇◇/□□/△△/○○/□□/▲▲
C列: ΒΒ/ΓΓ/ΖΖ/ΗΗ/ΜΝ/ΦΦ/ρρ/ΗΗ/
D列:的和和主/工要在地/一上是中/我人有的/工要在地/一上是中/我人有的/经以发了
这里的/表示每1行,是数据来源表。
要求把B列等于△△或▲▲
或者C列等于ΖΖ或ΗΗ
只要符合其中的1个条件就,就把所对应的A列,D列的内容反映在另1个表上,
结果放在A列B列,B列内容不能重复
重点:数据来源表是每天更新的,而结果表是长期保留,结果表B列的每格内容不能重复
。就是说提取符合多条件,跨表不重复的值。请求1个VBA完整代码。 谢了!

第1个回答  2011-02-25
好长
第2个回答  2011-02-25
还是看不懂结果的意思,不能来点实际的数据。求人办事这也不能说清,还如何写啊
第3个回答  2011-02-25
在这3次循环中,每个循环进行4次循环,总共经历了12次循环,第一个循环执行时,n=n+0,即n=0+1,结果是1.第二个循环时,n=n+1,此时的n已经是1了,所以n=1+1,结果是2,同理当执行到第12个循环时,n=n+1,结果就是12

问题2答案:2.71666666
当执行i=1时,x=0故 sum=0+0,结果是0
当执行i=2时,x=1/2,sum=0+0.5,结果是0.5
当执行i=3时,x=2/3,sum=0.5+0.6666667,结果是1.16666667
当执行i=4时,x=3/4,sum=1.16666667+0.75,结果是1.9166667
当执行i=5时,x=4/5,sum=1.916667+0.8,结果是2.7166667
第4个回答  2011-02-25
太好做了..

'thisworkbook
Private Sub Workbook_Open()
if Worksheets(第一张表号).Cells(行, B)="△△" or Worksheets(第一张表号).Cells(行, B)="▲▲" or Worksheets(第一张表号).Cells(行, B)="ΖΖ" or Worksheets(第一张表号).Cells(行, B)="HH" then

Worksheets(另一张表号).Cells(行, A) =Worksheets(第一张表号).Cells(行, A)
Worksheets(另一张表号).Cells(行, B) =Worksheets(第一张表号).Cells(行, B)
Worksheets(另一张表号).Cells(行, C) =Worksheets(第一张表号).Cells(行, C)
Worksheets(另一张表号).Cells(行, D) =Worksheets(第一张表号).Cells(行, D)
end if

End Sub
第5个回答  2011-02-25
你能做个表发过来吗?邮箱:[email protected].
应该是这样的。
Sub 多条件复制区域()

Dim A, B, C, D As String
M1 = 0
M2 = 0
i = 0
j = 0
Sheets(1).Select
finalrow = Cells(Rows.Count, 2).End(xlUp).Row
M1 = finalrow

Sheets(2).Select

finalrow = Cells(Rows.Count, 2).End(xlUp).Row
M2 = finalrow
E = M2

For i = 2 To M1
Sheets(1).Select
A = Cells(i, 1)
B = Cells(i, 2)
C = Cells(i, 3)
D = Cells(i, 4)
If B = "△△" Or B = "▲▲" Or C = "ZZ" Or C = "HH" Then
For j = 1 To E
Sheets(2).Select
If Cells(j, 2) = D Then
j = E
ElseIf j = E Then
Cells(E + 1, 1) = A
Cells(E + 1, 2) = D
E = E + 1
End If
Next j
j = 0
End If
Next i

End Sub追问

这个代码经测是可通过的,但是运行需要很长时间,因为实际工作中有2000行,可否用数组或字典的方法吗?请指教!

追答

对不起,直到现在才上网。
时间长的原因主要是你最后一个条件,B列的结果不能重复的缘故。
至于你说的数组或字典的方法估计难于做到,因为你所比较的只是一个元素。如果要提速也还是有可能的。不知现在有多慢,执行完一次操作最长要多长时间?

追问

汇总表B列内容不能重复!
为了加快运行速速度,明细表的A列可以不复制到汇总表中。
也可以用触发事件,当一符合条件时,立即复制该行到汇总表中,这样不知能否提速?
但这个代码我也不会写,请指教!
我发了实例到你的邮箱,请试试运行代码的速度,因为怕是我电脑的原因,导致运行慢。

追答

不好意思,今天发的文件打不开,昨天发的解压不料。今天发的是07版的excel吗?

追问

非常多谢你的帮忙,
最后请问:
为什么要
i = 0
j = 0
因为我试过不定义这2个也是可以的.
另外,已定义的A B C D M1 我可以用在另1个代码中吗?也就是说在工作簿内的其他模快不再重复定义这个区域了.

追答

看来是可以使用了,那就好。i、j=0是计数清零,只是一种习惯。一个模块内定义的只能在同一模块内使用。

本回答被提问者采纳
相似回答