Excel:通过另一个列ID充实列数据

我有一个excel文件与多个行具有相同的“主题ID”的列(值A),将总是具有相同的值由主题ID(或为空)。 例:

╔══════════════════════════╗ ║ | subject id | value A | ║ ╠══════════════════════════╣ ║ |:----------:|---------| ║ ║ | 1 | A | ║ ║ | 1 | A | ║ ║ | 1 | | ║ ║ | 1 | | ║ ║ | 2 | | ║ ║ | 2 | | ║ ║ | 2 | B | ║ ╚══════════════════════════╝ 

我如何在Excel中创build一个公式,我可以向下拖动“值A”列,以使所有具有相同主题ID的行都具有与值A相同的值? 在我的数据中没有任何情况,对于某个特定的主题ID,Value A列中会有不同的值:它将具有值或不具有值。

例如,为此,我想让所有ID为1的主体得到“A”的值A,对于每个主体ID为2的logging,我希望它得到一个值“ B”。 例:

 ╔══════════════════════════╗ ║ | subject id | value A | ║ ╠══════════════════════════╣ ║ |:----------:|---------| ║ ║ | 1 | A | ║ ║ | 1 | A | ║ ║ | 1 | A | ║ ║ | 1 | A | ║ ║ | 2 | B | ║ ║ | 2 | B | ║ ║ | 2 | B | ║ ╚══════════════════════════╝ 

使用Char将数字转换为使用ASCII码的字符。

请注意,这将只能达到26的值,之后,你用完了字母,并会开始得到括号和其他字符

 =CHAR(A2+64) 

Dan的解决scheme延伸,这个解决scheme应该在超过26个不同的ID上工作

 =IF(A1>26,CHAR(QUOTIENT(A1-1,26)+64),"") & CHAR(1+MOD(A1-1,26)+64) 

A1有ID。 这个公式给出了下面的结果

 1 A 2 B . . . 26 Z 27 AA 28 AB 29 AC . . . 44 AR 45 AS . . . 53 BA 54 BB 55 BC 

这是我的结果:

 +------------+---------+----------------+ | subject id | value A | Formula result | +------------+---------+----------------+ | 1 | | Hello | | 1 | | Hello | | 1 | Hello | Hello | | 1 | | Hello | | 1 | | Hello | | 1 | | Hello | | 2 | | B | | 2 | B | B | | 2 | B | B | | 2 | | B | | 2 | | B | | 2 | B | B | | 3 | | World | | 3 | | World | | 3 | World | World | | 3 | | World | | 3 | | World | | 4 | | D | | 4 | D | D | | 4 | | D | | 4 | | D | +------------+---------+----------------+ 

我为它构build了一个UDF,其中C2是= GetCode(A2,$ A $ 2:$ A $ 22,1),其中第一个参数是要search的值,第二个是要search的范围,最后一个是列来抵消以查找结果。

代码如下:

 Function GetCode(InputValue As String, SearchRange As Range, ColOffset As Long) Dim TempVal As String, FirstFoundRow As Long, LastFoundRow As Long, X As Long On Error Resume Next 'If not found the result will be null TempVal = Null If WorksheetFunction.CountIf(SearchRange, InputValue) > 0 Then FirstFoundRow = SearchRange.Find(InputValue).Row 'Determine the rows to check LastFoundRow = SearchRange.Find(InputValue, , , , , xlPrevious).Row 'Find the last row, no need to test after that For X = FirstFoundRow To LastFoundRow 'Loop the checking rows TempVal = SearchRange.Cells(X, ColOffset + 1).Text 'Assign the value of the offset column for the tested row If TempVal <> "" Then Exit For 'Quit the loop if it has found the answer Next End If GetCode = TempVal End Function 

假设:主题ID是sorting的。 如果不是,它会给出错误的结果,这将是非常简单的,你可以修改代码来search没有连续数据的实例。

注意:请尝试用更多的关键细节来设置你的问题的格式,所有以前的答案都做了同样的假设(当你有1-A,2-B作为你的样本数据时,这是一件容易的事)参考我上面的假设,我不得不按照你没有告诉我们的方式对有序数据进行假设。

一个非代码选项本来是要复制,删除dupe,在列B上sorting以删除空白,然后使用VLOOKUP公式对新鲜创build的matrix。