根据其他列查找一列中的值

我希望有人能帮帮忙。 我有超过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)) 

接下来,条件格式

  1. select你想用条件格式突出显示的列。

在这里输入图像说明

  1. 创build新的条件格式规则

在这里输入图像说明

  1. 按照如下所示制定规则,然后按确定。

在这里输入图像说明

这就对了。 你应该得到像上面的第一个图像的结果。

预防

你有65000行的数据,我不能排除上面的四个公式在某些情况下将失效。 所以这里有一些提醒:

  1. 如果客户支付了两次,并为同一“自然”声明一次,则公式失败,行不会突出显示。 如果这经常发生在您的数据中,对不起,您必须在逻辑上扩展来考虑这一点。 也许用不同的颜色来有条件地突出显示它们?
  2. (嗯…让我想想,如果有更多的我会补充,请评论。)

性能

对于SUMIFS公式计算时间可能会造成65,000。 我没有testing这个,你的电脑可能比头脑更好。 无论如何,如果它适用公式变得非常滞后,那么我的build议是

  1. 按客户ID和自然对数据进行sorting

在这里输入图像说明

  1. 并减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/