根据其他列查找一列中的值
我希望有人能帮帮忙。 我有超过65,000行的Excel表。 我附上了我想要达到的目标
J栏和N栏是重要的,你可以在单元格J2中看到800的支付,而在N2单元格中,你可以看到它是在2015年11月16日制作的。 在J3单元格中,您可以看到我们收回了钱-800,并在1/4/2016单元格N3上收回。
有没有一种方法或一些逻辑或VBA代码,我可以很容易地识别这些在2015年作出的付款,并在2016年收回。我可以使用数字说什么回到零显示我,或者我可以使用列D和用黄色表示这些数量。 滚动通过65000行将使我盲目试图确定这些数额的任何帮助将不胜感激。
Sub Macro2() Dim lastrow As Long Dim lastColumn As Long Application.ScreenUpdating = False lastColumn = ActiveSheet.UsedRange.Column - 1 + ActiveSheet.UsedRange.Columns.Count lastrow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count Columns("A:A").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("A2").Select ActiveCell.FormulaR1C1 = "1" Range("A3").Select ActiveCell.FormulaR1C1 = "2" Range("A2:A3").Select Selection.AutoFill Destination:=Range("A2:A" & lastrow) Range("A1").Value = "Row ID" Columns("Q:Q").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("Q1").Select ActiveCell.FormulaR1C1 = "positive identifier" Columns("R:R").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("R1").Select ActiveCell.FormulaR1C1 = "Matching row ID" Range("Q2").Select ActiveCell.FormulaR1C1 = "=1*AND(RC[-6]>0,YEAR(RC[-1])=2015)" Range("Q2").Select Selection.Style = "Comma" Selection.AutoFill Destination:=Range("Q2:Q" & lastrow) For i = 2 To lastrow For j = 3 To lastrow If Cells(i, 5).Value = Cells(j, 5).Value And Cells(i, 11).Value > 0 And Cells(i, 11).Value = -1 * Cells(j, 11).Value And Year(Cells(i, 16).Value) = 2015 And Year(Cells(j, 16).Value) = 2016 Then Cells(i, 18).Value = j - 1 End If Next Next Range("R2:R" & lastrow).Select Selection.Style = "Comma" Application.ScreenUpdating = True End Sub
有一些代码,但它的窃听
If Cells(i, 5).Value = Cells(j, 5).Value And Cells(i, 11).Value > 0 And Cells(i, 11).Value = -1 * Cells(j, 11).Value And Year(Cells(i, 16).Value) = 2015 And Year(Cells(j, 16).Value) = 2016 Then
出现的错误是 任何帮助是极大的赞赏
我注意到你可以sorting你的数据。 这使您的问题更容易一些。 这个答案不是提供一个更好的公式,而是缓解匹配的痛苦。
我想了一会儿,意识到例外情况的组合太多了。 尽pipefind完美的配方并不是不可能的,但是你会花费太多的精力find它。 让我们继续使用“有缺陷”公式自动突出显示行。
水平线
请注意,我closures了网格线。 并增加了将客户分开的横向紫色线条。 紫色线条不是手动绘制,而是条件格式:
只需将此规则应用于整个工作表:
所以不是经过65000行,而是通过列表中有多less客户。
公式
- Q:
=N(AND(J2>0,YEAR(N2)=2015))
- R:
=N(AND(J2<0,YEAR(N2)=2016))
- S:
=SUMIFS(Q:Q,D:D,D:D,L:L,L:L) + SUMIFS(R:R,D:D,D:D,L:L,L:L)
- T:
=N(AND(SUMIFS(J:J,D:D,D:D,L:L,L:L,S:S,S:S)=0,S:S>=2))
这是我的,希望有人能拿出更好的答案。 无论如何,它有趣的解决大数据问题。
以下是最终输出的样子。 我使用逻辑函数,一些帮助列,当然还有条件格式的组合。 有些列是隐藏的,因为我只是想模仿你的格式,而不是在我的答案中使用。 我按照客户ID和自然对数据进行了sorting,但是您不需要,稍后我会再解释。
首先,公式
Q栏,从Q2
下来
=N(AND(J2>0,YEAR(N2)=2015))
R列,从R2
=N(AND(J2<0,YEAR(N2)=2016))
列
=N(SUMIFS(Q:Q,D:D,D:D,L:L,L:L)+SUMIFS(R:R,D:D,D:D,L:L,L:L)=2)
T栏
=N(AND(SUMIFS(J:J,D:D,D:D,L:L,L:L,S:S,S:S)=0,S:S=1))
接下来,条件格式
- select你想用条件格式突出显示的列。
- 创build新的条件格式规则
- 按照如下所示制定规则,然后按确定。
这就对了。 你应该得到像上面的第一个图像的结果。
预防
你有65000行的数据,我不能排除上面的四个公式在某些情况下将失效。 所以这里有一些提醒:
- 如果客户支付了两次,并为同一“自然”声明一次,则公式失败,行不会突出显示。 如果这经常发生在您的数据中,对不起,您必须在逻辑上扩展来考虑这一点。 也许用不同的颜色来有条件地突出显示它们?
- (嗯…让我想想,如果有更多的我会补充,请评论。)
性能
对于SUMIFS公式计算时间可能会造成65,000。 我没有testing这个,你的电脑可能比头脑更好。 无论如何,如果它适用公式变得非常滞后,那么我的build议是
- 按客户ID和自然对数据进行sorting
- 并减lessS列和T列中SUMIFS的计算范围。
例如对于列S,单元格S4公式成为
=N(SUMIFS(Q2:Q6,D2:D6,D4,L2:L6,L4)+SUMIFS(R2:R6,D2:D6,D4,L2:L6,L4)=2)
那就是要有效地减less计算范围来加快性能。
自然问题与客户ID 18801591
你可以在一个INDEX函数中嵌套一个MATCH函数。
MATCH函数将查找符合特定条件的行号, INDEX函数查找匹配MATCH函数(嵌套在内)的行号的单元格。
我希望这有助于: http : //www.randomwok.com/excel/how-to-use-index-match/