我有一个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 | ║
╚══════════════════════════╝
答案 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公式。