为不同工作表中的列find最大值并将其报告在结果表中
我想检查Sheet2
, Sheet3
, Sheet4
和Sheet5
Column A
( A1:A365 ),并查找每个单元格的最大值 。 比较Sheet2
, Sheet3
, Sheet4
和Sheet5
中的A1
,find最大值并在结果页面的A1
中报告。 同样在B1
单元格报告这个最大值的相应表格。 这继续到Column A
( A1: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没有可怕的公式 :
- 将此公式放在Sheet1!A1:
=MAX(Sheet2:Sheet5!A1)
- 由于表格名称不一定是灵活的(我假设你不经常改变它),你可以在B1中使用这个公式:
= IF(Sheet2的!A1 = A1, “Sheet2的”, IF(表Sheet 3!A1 = A1, “工作表Sheet”, IF(Sheet4!A1 = A1, “Sheet5” “Sheet5”)))
更多的结构解决scheme (更适合许多工作表):
如果你有很多工作表,你可以考虑这个select。
- 在工作表中有相关工作表的列表。 (在这个例子中,我把列表放在E3:E7中)。 命名此范围
Sheets
。 (类似于Sidd令人震惊的公式,我使用CELL公式dynamic获取每个表的名字,但是在静态模型中这不是必须的) - (与上面的步骤1相同):将此公式放在Sheet1!A1:
=MAX(Sheet2:Sheet5!A1)
- 在A2中放置这个公式:
=INDEX(Sheets,MATCH(1,COUNTIF(INDIRECT("'"&Sheets&"'!A1"),A1),0))
input一个数组公式,即按Ctrl – Shift – Enter而不是Enter 。
我在这里上传第二个解决scheme。
荣誉这个指示 !
由于该公式旨在被复制下来,因此您不希望在Peter Albert公式的INDIRECT
中硬编码对单元格A1
的引用。 您可以使用CELL("address",A1)
来获取对A1
的引用,而不是向下复制。
您还可以避免使用LOOKUP返回结果而不是INDEX
& MATCH
来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)