我正在Excel中为一些实验室样本制作一个日志文件。在此日志中,我记录了日期,样品ID,存储样品的方框以及方框位置。例如:
SampleID Study Date Box Position
12345 SomeStudy date 1 A3
12346 SomeStudy date 1 A4
位置始终从位置A3开始上升到A12,然后从B1到B12等......一直到H11。
所以我想在Excel中做的是使用IF语句检查其上方的单元格中的值并从数字中分割文本。
如果最后一个值是A7那么下一个将是A8,那么一个,直到达到A12;如果值为A12,则下一个值应为B1,依此类推......
答案 0 :(得分:0)
返回当前单元格正上方的单元格值
INDIRECT(ADDRESS(ROW()-1,COLUMN()))
拆分字母和数字source(将A2替换为上述内容)
字母
LEFT(INDIRECT(...),MIN(FIND({0,1,2,3,4,5,6,7,8,9},INDIRECT(...)&"0123456789"))-1)
编号
RIGHT(INDIRECT(...),LEN(INDIRECT(...))-MIN(FIND({0,1,2,3,4,5,6,7,8,9},INDIRECT(...)&"0123456789"))+1)
如果递增字母的声明
IF(RIGHT(...)>=12,CHAR(CODE(LEFT(...)+1),LEFT(...))
如果增加数字的语句
IF(RIGHT(...)>=12,1,RIGHT(...)+1)
最后在CONCATENATE()
中包装上述两个IF语句=CONCATENATE(IF(...),IF(...))
当你把它们放在一起时,最终的公式看起来就像一个怪物。 你必须使用A1播种第一个单元格,但是你应该可以从那时开始拖动公式。
如果将字母和数字分隔成不同的列(例如position_x和position_y),假设这是某种样本网格,则会更容易。
答案 1 :(得分:0)
您可以使用MID函数(从文本字符串中选取特定字符)以及CHAR / CODE函数(查看字符的ASCII代码,反之亦然)来执行此操作。因为您的数据只涉及1个字母,所以这是相对严格的,如下所示(对于单元格D3,它看起来像第二行数据的上面位置,当前显示" A4"作为值) :
=IF(VALUE(MID(D2,2,2))<11,LEFT(D2)&VALUE(MID(D2,2,2))+1,IF(LEFT(D2)="H","A3",CHAR(CODE(LEFT(D2))+1)&3))
这样做:检查上面位置的最后1(或2)个字符 - 这是数字。如果该数字是&lt; 12,它引入上面位置的第一个字符,然后将数字增加1.否则,它将上面文本第一个字符的ASCII字符增加1,并在3上增加。
我已对此进行了测试并确认其按预期工作 - 但仅适用于您指定的范围。
编辑以反映循环停在11的事实,并在H11之后回收到A3。
答案 2 :(得分:0)
替代解释,假设系列的开头是在E1中输入,公式从E2复制到适合:
=IF(E1="H11","A3",IF(LEN(E1)=3,IF(RIGHT(E1,2)="12",CHAR(CODE(LEFT(E1))+1)&1,LEFT(E1)&RIGHT(E1,2)+1),LEFT(E1)&RIGHT(E1)+1))