为不同工作表中的列find最大值并将其报告在结果表中

我想检查Sheet2Sheet3Sheet4Sheet5 Column AA1:A365 ),并查找每个单元格的最大值 。 比较Sheet2Sheet3Sheet4Sheet5中的A1 ,find最大值并在结果页面的A1中报告。 同样在B1单元格报告这个最大值的相应表格。 这继续到Column AA1:A365

在这里输入图像说明

下面的代码我使用:

  Worksheets("sheet2").Range("A1").Value = a Worksheets("sheet3").Range("A1").Value = b Worksheets("sheet4").Range("A1").Value = c Worksheets("sheet5").Range("A1").Value = d MaxValue = Application.Max(a, b, c, d) Range("A1").Value = MaxValue 

是的,我只有4张纸 – Mohsen 11分钟前

非VBA解决scheme

在Sheet1,单元格A1,把这个公式

 =MAX(Sheet2!A1,Sheet3!A1,Sheet4!A1,Sheet5!A1) 

在Sheet1,Cell B1中,放入这个可怕的公式。 我相信有一个更好的方式来find工作表名称。

=IF(Sheet1!A1=Sheet2!A1,RIGHT(CELL("filename",Sheet2!A1),LEN(CELL("filename",Sheet2!A1))- FIND("]",CELL("filename",Sheet2!A1),1)),IF(Sheet1!A1=Sheet3!A1,RIGHT(CELL("filename",Sheet3!A1),LEN(CELL("filename",Sheet3!A1))- FIND("]",CELL("filename",Sheet3!A1),1)),IF(Sheet1!A1=Sheet4!A1,RIGHT(CELL("filename",Sheet4!A1),LEN(CELL("filename",Sheet4!A1))- FIND("]",CELL("filename",Sheet4!A1),1)),IF(Sheet1!A1=Sheet5!A1,RIGHT(CELL("filename",Sheet5!A1),LEN(CELL("filename",Sheet5!A1))- FIND("]",CELL("filename",Sheet5!A1),1)),""))))

一个谨慎的话虽然。 RIGHT(CELL("filename",Sheet2!A1),LEN(CELL("filename",Sheet2!A1))- FIND("]",CELL("filename",Sheet2!A1),1)) ,您需要保存工作簿。

我的Sheet2,A1有1 ,Sheet3,A1有2 ,Sheet4,A1有2.5 ,Sheet5,A1有3

在这里输入图像说明

VBA解决scheme

 Sub Sample() Dim ws As Worksheet Dim i As Long Set ws = ThisWorkbook.Sheets("Sheet1") With ws .Range("A1:A365").Formula = "=MAX(Sheet2!A1,Sheet3!A1,Sheet4!A1,Sheet5!A1)" .Range("A1:A365").Value = .Range("A1:A365").Value For i = 1 To 365 Select Case .Range("A" & i) Case ThisWorkbook.Sheets("Sheet2").Range("A" & i).Value: .Range("B" & i).Value = "Sheet2" Case ThisWorkbook.Sheets("Sheet3").Range("A" & i).Value: .Range("B" & i).Value = "Sheet3" Case ThisWorkbook.Sheets("Sheet4").Range("A" & i).Value: .Range("B" & i).Value = "Sheet4" Case ThisWorkbook.Sheets("Sheet5").Range("A" & i).Value: .Range("B" & i).Value = "Sheet5" End Select Next i End With End Sub 

快速解决scheme

根据Sidd的回答,这是我的非VBA解决scheme没有可怕的公式

  1. 将此公式放在Sheet1!A1: =MAX(Sheet2:Sheet5!A1)
  2. 由于表格名称不一定是灵活的(我假设你不经常改变它),你可以在B1中使用这个公式:
     = IF(Sheet2的!A1 = A1, “Sheet2的”,
     IF(表Sheet 3!A1 = A1, “工作表Sheet”,
     IF(Sheet4!A1 = A1, “Sheet5”
     “Sheet5”)))
    

更多的结构解决scheme (更适合许多工作表):

如果你有很多工作表,你可以考虑这个select。

  1. 在工作表中有相关​​工作表的列表。 (在这个例子中,我把列表放在E3:E7中)。 命名此范围Sheets 。 (类似于Sidd令人震惊的公式,我使用CELL公式dynamic获取每个表的名字,但是在静态模型中这不是必须的)
  2. (与上面的步骤1相同):将此公式放在Sheet1!A1: =MAX(Sheet2:Sheet5!A1)
  3. 在A2中放置这个公式:

    =INDEX(Sheets,MATCH(1,COUNTIF(INDIRECT("'"&Sheets&"'!A1"),A1),0))

    input一个数组公式,即按CtrlShiftEnter而不是Enter

我在这里上传第二个解决scheme。

荣誉这个指示 !

由于该公式旨在被复制下来,因此您不希望在Peter Albert公式的INDIRECT中硬编码对单元格A1的引用。 您可以使用CELL("address",A1)来获取对A1的引用,而不是向下复制。

您还可以避免使用LOOKUP返回结果而不是INDEXMATCH来arraysinput公式。 请注意, LOOKUP会在平局的情况下返回最大值的最后一个工作表的名称。

以下公式使用每个工作表的名称命名的范围表

 =MAX(Sheet2:Sheet5!A1) returns max value (identical to Peter Albert's formula) =LOOKUP(2,1/COUNTIF(INDIRECT("'" & Sheets & "'!" & CELL("address",A1)),A1),Sheets) returns name of sheet with max value 

制作两张新书,一张标题为“ First ”,另一张标注“ Last ”。 为您的项目创build新工作表通过一个包含macros的button创build,以在“ First and Last ”之间添加重复工作表。 然后,将这些简单公式中的一个例如放在您的报告单元格中: =SUM(First:Last!K28)=MAX(First:Last!K28)