在Excel电子表格中sorting值

我有一个电子表格,里面充满了名字和人物angular色,如下所示:

Role Name Change 1 A Yes 2 A No 5 AN/Ap 1 B Yes 3 B No 2 C Yes 4 C No 

我必须拿出一个如下所示的电子表格:

  1 2 3 4 5 6 A Yes BC 

基本上,它应该从第一张电子表格中检索信息,并在第二张电子表格中清楚地排列出来。

有太多的名字和angular色来做手动。 VLMOVE将无法正常工作,我试过MATCHINDEX

替代@RocketDonkey(但感谢更完整的期望的结果!)可以串在一起angular色和名称(例如在B&C插入在Sheet1之间的列[因为我觉得OP需要一个单独的表结果]):

 C2=A1&B2 copied down as required 

然后在Sheet2中使用查找!B2:

 =IFERROR(VLOOKUP(B$1&$A2,Sheet1!$C$2:$D$8,2,FALSE),"") 

根据需要复制和复制。

这假定网格结果(如有问题)已经构build(并且有7行数据 – 如果需要则调整$ 8)。

同意@Melanie,如果你可以强制你的数据进入一个可以被解释为数字的结构(例如1是的,0是假的),那么数据透视表就是最简单的方法(因为它们会把数字显示为值 – 不是文字)。 *(见下文)

如果你想显示任意文本,你可以试试这个:

 =IF( SUMPRODUCT(--($A$2:$A$8=F$1),--($B$2:$B$8=$E2),ROW($A$2:$A$8))=0,"", INDEX( $A$1:$C$8, SUMPRODUCT(--($A$2:$A$8=F$1),--($B$2:$B$8=$E2),ROW($A$2:$A$8)), 3)) 

这将检查三列的SUMPRODUCT是否合计为0(如果不匹配x / y的组合(例如, Name: CRole: 5 ),则返回"" ,否则返回""它将返回Value列中的Value

在这里输入图像描述



*“数据透视表选项”将代表更改为一个数字(例如D2中的公式复制下来)。 然后从(在示例中)A1:D8创build一个数据透视表,如图所示的字段。 将数据透视表复制到不同的工作表,使用select性粘贴/值(虽然在示例中显示在相同工作表的F11:K15中)。 然后在其他的表格select行中,以名称A开始,按要求尽可能远地replace为-1,否则为1,否则为0。

在这里输入图像说明

修订

您可以使用数组公式来重组您的表,而无需更改其结构。 假设Sheet1上的数据范围为A2:C8,并且结果表位于Sheet2上的范围A1:G4中,则以下公式将作为结果表中的第一个条目(angular色1和名称A)。

  =IFERROR(INDEX(Sheet1!$A$2:$C$8,MATCH(B$1&$A2,Sheet1!$A$2:$A$8&Sheet1!$B$2:$B$8,0),3),"-") 

MATCH公式返回angular色/名称组合1A出现的行号。 INDEX函数返回MATCH公式find的行号处的单元格内容和列数3,即数据表的Change列。 如果angular色/名称组合不在数据表中,则IFERROR返回“ – ”。

确保使用Control-Shift-Enter组合键input公式。 然后将公式复制到结果表的其余单元格中。

Sheet1上的数据表:

Sheet1上的数据表

Sheet2上的结果表:

结果表在工作表上

那么因为有Excel-VBA标签,认为它会通过在VBA中添加一个来完成解决scheme的types:)以下代码不是优雅的,无论如何您需要使用代码库,试试看:)

码:

 Option Explicit Public Sub sortAndPivot() Dim d As Object Dim ws As Worksheet Dim sourceArray As Variant, pvtArray As Variant, v As Variant Dim maxRole As Long Dim i, j, k, m As Integer Set d = CreateObject("Scripting.Dictionary") Set ws = Worksheets("Sheet3") '-- set according to your sheet '-- you could enhance by using an input box to select the range sourceArray = Application.WorksheetFunction.Transpose(ws.Range("B3:D9").Value) '-- max role number maxRole = Application.WorksheetFunction.Max(ws.Range("B3:B9")) '-- find unique name list For i = LBound(sourceArray, 2) To UBound(sourceArray, 2) If Not d.exists(sourceArray(2, i)) Then d.Add sourceArray(2, i), i End If Next i ReDim pvtArray(d.Count, maxRole) pvtArray(0, 0) = "Name" '-- add unique names from dictionary j = 1 For Each v In d.keys pvtArray(j, 0) = v j = j + 1 Next '-- add unique Role number list For i = UBound(pvtArray, 2) To LBound(pvtArray) + 1 Step -1 pvtArray(0, i) = i Next i '-- sort into the correct positions For k = LBound(pvtArray, 1) + 1 To UBound(pvtArray, 1) For m = LBound(pvtArray, 2) + 1 To UBound(pvtArray, 2) For i = LBound(sourceArray, 2) To UBound(sourceArray, 2) If pvtArray(k, 0) = sourceArray(2, i) Then If pvtArray(0, m) = sourceArray(1, i) Then pvtArray(k, m) = sourceArray(3, i) End If End If Next i Next m Next k 'Output the processed array into the Sheet in pivot view. Range("F2").Resize(UBound(pvtArray) + 1, _ UBound(Application.Transpose(pvtArray))) = pvtArray Set d = Nothing End Sub 

结果:

在这里输入图像说明

没有VBA还有另一种方法。 如果您在第一个电子表格中创build了连接前两个的另一列,如下所示:

 Role Name Change CheckColumn 1 A Yes 1A 2 A No 2A 5 AN/Ap 5A 1 B Yes 1B 3 B No 3B 2 C Yes 2C 4 C No 4C 

然后,您可以一起使用“ Offset和“ Matchfunction在第二张纸上查找更改。 所以假设你的数据是从单元格A1放置的,单元格B2中的公式是:

=iferror(offset(Sheet1!$A$1,match(B$1&$A2,sheet1!$D:$D,0),2),"")

或者,如果将sheet1中的连接列放在angular色列之前,则可以在sheet2中使用vlookup,其公式为:

=iferror(vlookup(B$1&$A2,sheet1!$A:$D,4,false),"")