Excel:按其他列ID填充列数据

时间:2017-02-06 23:25:43

标签: excel

我有一个excel文件,其中多行具有相同的“主题ID”,其中一列(值A)始终具有相应的主题ID值(或为空)。例如:

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

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

例如,我希望这样做,以便ID为1的所有主题获得值A为“A”,并且对于主题ID为2的每个记录,我希望它接收到“B”的值。例如:

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

3 个答案:

答案 0 :(得分:0)

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

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

=CHAR(A2+64)

答案 1 :(得分:0)

根据Dan的解决方案,此解决方案应该可以处理超过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

答案 2 :(得分:0)

以下是我的结果:

+------------+---------+----------------+
| 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              |
+------------+---------+----------------+

我为它构建了一个UDF,C2中的公式是= GetCode(A2,$ A $ 2:$ A $ 22,1),其中第一个参数是要搜索的值,第二个是要搜索的范围和last是要查找结果的偏移列。

以下代码:

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已排序。如果不是它会给出错误的结果,那么修改代码以搜索没有连续数据的实例就足够了。

注意:请尝试使用更多详细信息格式化您的问题,之前的所有答案都与我做的假设相同(当您将1 - A,2 - B作为样本数据时假设这是一件容易的事情)并且参考我上面的假设,我不得不像你没有告诉我们那样做出排序数据的假设。

无代码选项可以是复制,删除欺骗,对col B进行排序以删除空白,然后对新创建的矩阵使用VLOOKUP公式。