【发布时间】:2021-04-14 20:38:22
【问题描述】:
是否可以找到具有 2 个条件的行?
我正在将调查答案导入工作表,现在我想查找指定人员的答案
我需要在 worksheet(ImportLimesurvey) 中找到具有 2 个指定单元格值的行:
在那一行:
- C 单元格的值必须是该列中的最大值之一(我使用了函数
Application.WorksheetFunction.Max(rng))
此值表示填写了多少调查问卷。最高值位于多个答案行中。每次调查的最高值都不同。 (例如,如果一项调查有 7 页并且参与者填写了所有页面:该人的最高值为 7,但如果该人未完成该调查,则该值可能是例如 3),所以过滤器最高值是参与者是否完成了整个调查。
- L 单元格的值必须与单元格相同 (Worksheets("Dataimport").Range("M2")
M2= 我需要回答的人的帐号
必须将正确的行粘贴到 (Worksheets("Dataimport").Range("A7")
这是我当前的代码:
Dim g As Range
Dim rng As Range
Set rng = Worksheets("ImportLimesurvey").Range("C:C")
d = Application.WorksheetFunction.Max(rng)
With Worksheets("ImportLimesurvey").Range("L:L")
Set g = .Find(Worksheets("Dataimport").Range("M2"), LookIn:=xlValues)
g.Activate
End With
e = Range("C" & (ActiveCell.Row))
If e = d Then
ActiveCell.EntireRow.Copy _
Destination:=Worksheets("Dataimport").Range("A7")
End If
这里的问题是他找到了具有正确帐号的行,但具有 C 值的答案并不总是最高的。它(逻辑上)只选择具有该帐号的第一行。那么如何找到符合这两个条件的行呢?
提前致谢
附:我是 VBA 新手,所以我尽量做到具体,但如果您需要任何其他信息,请直接询问;)
【问题讨论】:
-
你能提供一些样本数据吗?在解决答案之前,我想澄清一些事情;您的数据集中通常有多少行,平均有多少个帐号将包含在数据集中,目标帐号是在整个数据中随机出现还是全部分组在一起(如果同一号码有多个行)?
-
可能最好的方法是使用查找/查找下一个。在第一次查找时,将 C 单元格中的值保存到变量中,并将行号保存到变量中。然后继续
FindNext该人的每个实例。在每个实例中,对照您存储的 C 单元格值检查它是否更大。如果是,则用这个新的替换它,并将存储的行号替换为新的。继续进行,直到所有实例都完成,您将拥有所需的行。否则你可以做一个For循环,这对我来说更容易,你可以将数据拉入一个数组以使其更快。 -
@SamuelEverson 调查保持开放状态,每次有新参与者/客户时都会出现新的答案行。所以它可能会在 10 年内不断增加,我有 1000 行。 acc°nr 是每个客户随机生成的数字。但是如果有人再次回答这个问题,因为它之前没有完成并且必须重新开始。它与以前未完成的答案具有相同的accnr°。相同的accnr°不会被分组。该行由回答的时间定义。因此,如果您在第一次回答后 10 天回答。您的 2 个答案之间可能有答案。