好的,我已经厌倦了我对Excel VBA编码的微弱知识,并且无法弄清楚这个解决方案。
我将一列值作为表的一部分。此列中的值是连续字符串组,例如:
ABC-001
ABC-002
XYZ-001
EFDDGE-001
ABC-003
XYZ-002
ABC-004
我需要做的是在下一行中分配一个值,该值是该组中的下一个值。
示例:
ABC-005
EFDDGE-002
等列中的值按组按升序排列(即。XYZ-005
永远不会在XYZ-003
之前。)
我一直在使用Range.Find
方法,但我似乎无法让它正常工作。
以下是表格示例部分的屏幕截图: (编辑:显然我不能发布图像,因为我的“声誉不是10或更高!”
尝试描绘这一系列专栏:
[下一个ID] [项目ID] [描述] [处置] [原创] [最终] [重量]
回答一些问题: 是的,我确实试图在表格的下一个可用行中添加项目ID。
“项目ID”的组部分由VLookup确定为与“原始”或“最终”列中的条目相关的“LocationID”表,具体取决于“处置”值。
从上面的屏幕截图中可以看出,我实际上设法实现了一种可行的方法来确定“下一个ID”,然后让我的VBA用户表单代码复制该值并将其粘贴到相邻的“项目ID”列中。它有效,但很难看。这是臃肿的公式(深吸一口气):
= IF(NOT(ISERROR(CONCATENATE(VLOOKUP(IF(NOT(ISBLANK(G13)),G13,F13),LocationID,2,FALSE), “ - ”,TEXT(SUMPRODUCT((的ItemID> VLOOKUP(IF (NOT(ISBLANK(G13)),G13,F13),LocationID,2,FALSE))的(的ItemID&LT = CONCATENATE(VLOOKUP(IF(NOT(ISBLANK(G13)),G13,F13),LocationID,2 ,FALSE), “ - 999”)))+ 1, “000”)))),(CONCATENATE(VLOOKUP(IF(NOT(ISBLANK(G13)),G13,F13),LocationID,2,FALSE),” - ”,TEXT(SUMPRODUCT((的ItemID> VLOOKUP(IF(NOT(ISBLANK(G13)),G13,F13),LocationID,2,FALSE))(的ItemID&LT = CONCATENATE(VLOOKUP(IF(NOT( ISBLANK(G13)),G13,F13),LocationID,2,FALSE),“ - 999”)))+ 1,“000”))),“”)
所以...我强迫这个工作,但我在想(希望)用户窗体中的一些VBA代码可以避免使用这种混乱的方法。
顺便说一句,感谢大家甚至关注这一点,并提出相关问题并提供可能的解决方案。 - 比尔答案 0 :(得分:3)
我需要做的是在下一行中分配一个值
很确定你的意思是下一个列。假设,尝试
=LEFT(A1,FIND("-",A1))&TEXT(VALUE(MID(A1,FIND("-",A1)+1,3))+1,"000")
看起来很乱。让我们分解一下:
=LEFT(A1,FIND("-",A1)) ; isolates the non-numerical portion
=VALUE(MID(A1,FIND("-",A1)+1,3)) ; isolates the numerical portion, converts text to number
剩下的代码连接两个部分,在我们隔离的数字上加一个,然后转换回文本,同时确保保留3位数字格式。
如果你真的需要VBA,我们可以去那里。技术是一样的。