我有以下数据,希望自动找到赢家。
A B C D E
1 2 3 4 5
我使用了INDEX
函数:
INDEX($A$1:$E$1,1,MATCH(LARGE($A$2:$E$2,1),$A$2:$E$2,0))
这确实告诉我赢家是E。
但是,说下一个数据集表明A和E得分相同:
A B C D E
5 2 3 4 5
使用上述公式,我无法同时获得A和E作为赢家...
是否可以嵌套IF函数并使其简洁,以便在我的获奖者栏中可以说: A,E?
答案 0 :(得分:3)
我想到的最简单的主意是:
选择一些空单元格,例如G1
并粘贴以下公式:
=MAX(A1:E1)
然后将conditional formatting应用于范围:颜色单元格,如果它等于G1
(而不是G1
,您可以输入公式本身=MAX(A1:E1)
,但对我来说却给出了意外的结果)。
这样,所有赢家将在价值改变后立即突出显示。
更新
您可能使用的条件格式略有不同:
对不起,我的Excel是波兰语,但是您应该可以按照以下步骤操作:
点击条件格式
扩展最大/最小规则(或类似规则)
点击“前10个元素”或类似的内容
在弹出窗口中(屏幕上的第二个数字)从10更改为1。
现在,您已拥有所需的格式。现在,您需要分别为每行分别复制和粘贴特殊格式。
第二次更新
要轻松地将其应用于所有行,可以执行以下操作:
记录宏,开始记录后,选择A1:E1行,应用前面所述的条件格式,停止记录并打开该宏的代码,应该是这样的:
Sub Makro1()
'
' Macro1 Macro
'
'
Range("A1:E1").Select
Range("E1").Activate
Selection.FormatConditions.AddTop10
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1)
.TopBottom = xlTop10Top
.Rank = 1
.Percent = False
End With
With Selection.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub
现在,我们将以这种方式对其进行修改,以便它将所需的条件格式自动应用于所有行:
Option Explicit
Sub ApplyConditionalFormatting()
Dim r As Range, lastRow As Long, i As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lastRow
Set r = Range(Cells(i, 1), Cells(i, 5))
r.FormatConditions.AddTop10
r.FormatConditions(r.FormatConditions.Count).SetFirstPriority
With r.FormatConditions(1)
.TopBottom = xlTop10Top
.Rank = 1
.Percent = False
End With
With r.FormatConditions(1).Font
.Color = -16383844
.TintAndShade = 0
End With
With r.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.Color = 13551615
.TintAndShade = 0
End With
r.FormatConditions(1).StopIfTrue = False
Next
End Sub
我只是制作了For
循环并将所有记录的代码放入该循环,因此它将宏应用于所有行:)
答案 1 :(得分:3)
改进的数组公式
复制下来的数组公式如何(例如从F2单元格开始):
=SUM(LARGE(IF(A2:E2=MAX(A2:E2),COLUMN(A2:E2),0),COLUMN(A2:E2))*10^(COLUMN(A2:E2)-1)
(请注意用大括号{}表示正确输入数组公式!)
结果返回例如15
,即根据您的示例数据5 2 3 4 5
(在A:E列中),第一个数字的第一位显示第一位,第五位显示第二位。
如果发生,例如1 5 5 4 5
在A:E列中,结果将是►235
显示第二,第三和第五列为获胜。
*注意:在此示例中,由于它使用十进制数字系统(可以修改),限制为10个数字(10列)。
编辑1-显示用逗号分隔的带有列字母的字符串
使用重复的SUBSTITUTE
函数并不是最优雅的方法,但是它可以在有限的列数上完成工作:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUM(LARGE(IF(A2:E2=MAX(A2:E2),COLUMN(A2:E2),0),COLUMN(A2:E2))*10^(COLUMN(A2:E2)-1)),1,"A,"),2,"B,"),3,"C,"),4,"D,"),5,"E,")&"#",",#","")
例如1 5 5 4 5
列中的A:E
将在►B,C,E
中显示胜出的列字母,以逗号分隔的字符串。
编辑2-使用十六进制数的苗条替代方式(不带逗号)
这种方法利用了这样的事实,即十六进制系统代码将数字> 9以及字母数字字符A到F并简单地将9添加到找到的列值中:
=DEC2HEX(SUM(LARGE(IF(A2:E2=MAX(A2:E2),COLUMN(A2:E2)+9,0),COLUMN(A2:E2))*16^(COLUMN(A2:E2)-1)))
例如在1 5 5 4 5
列中的A:E
将通过巧妙地使用十六进制数字转换在►BCE
中产生。
享受它:-)