试图在范围内找到字符串的最大值

时间:2013-12-10 23:13:38

标签: excel excel-vba vba

好的,我已经厌倦了我对Excel VBA编码的微弱知识,并且无法弄清楚这个解决方案。

我将一列值作为表的一部分。此列中的值是连续字符串组,例如:

ABC-001
ABC-002
XYZ-001
EFDDGE-001
ABC-003
XYZ-002
ABC-004

我需要做的是在下一行中分配一个值,该值是该组中的下一个值。

示例:

  1. 如果下一项是“ABC”项,我需要列中的值为ABC-005
  2. 如果下一个项目是“EFDDGE”项,我需要列中的值为EFDDGE-002
  3. 列中的值按组按升序排列(即。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代码可以避免使用这种混乱的方法。

    顺便说一句,感谢大家甚至关注这一点,并提出相关问题并提供可能的解决方案。 - 比尔

1 个答案:

答案 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,我们可以去那里。技术是一样的。