一些类似命名的线程,但仍然无法解决我的问题。我需要从 Excel 字符串(在我的场景中为 8 位数字)中提取一个固定长度的 NUMBER 值。为此提供了以下 Excel 公式:
=MID(A1,FIND("--------",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"0","-"),"1","-"),"2","-"),"3","-"),"4","-"),"5","-"),"6","-"),"7","-"),"8","-"),"9","-")),8)
Run Code Online (Sandbox Code Playgroud)
它可以完成这项工作,但是我对此有两个问题:
最重要的是 - 我正在寻找完全匹配。虽然它确实提取了它找到的第一个 8 位数字序列,但我真的只需要8 位数字,这意味着应该忽略 9 位(或更长)数字(因为 7 位数字已经是)。此公式还从较长的数字中提取前 8 位数字。
不太重要,但只查找以 1 开头的数字会很好。所以,真的只是想提取这个:1??????? 作为数值。因此,像“一12891212一”或“一12891212一”应该被提取,同时12891212 0A或23456789不应该。
如果合理可行,与 VBA 相比,我更喜欢基于 Excel 公式的方法。任何帮助深表感谢!
我有一段 VBA 代码想要增强。有两个 Excel 表 - ToDo和Done。该代码获取ToDo表中的第一行(我使用表标题作为锚单元并向下偏移一行以获取值)。
运行一些其他功能后,我想将此值添加到Done表中,然后从原始ToDo表中删除它。
这一切都有效 - 需要注意的是ListRows.Add函数像往常一样将新行添加到表的底部。有没有办法将新的空行和内容添加到“完成”表的顶部,以便最后处理的值将自上而下而不是自下而上运行?
某些范围倒序函数可能会打乱整个顺序。另外在 .Range(2) 中添加时间戳并始终进行排序对于解决方法来说感觉太混乱(应该有一个更简洁的方法,对吧?)
Sub Data()
Range("Data_transfer").Value = Range("ToDo_header").Offset(1).Value
'some irrelevant code runs here
Set newrow = ActiveSheet.ListObjects("Done").ListRows.Add
With newrow
.Range(1) = Range("Data_transfer").Value
End With
Range("ToDo_header").Offset(1).Delete
End Sub
Run Code Online (Sandbox Code Playgroud)