在 Excel 工作表中生成唯一 ID 的问题

Problems with generating a unique ID in Excel worksheet

我有一个作品sheet - 为用户数据输入而创建, 我在其中创建了一个独特的 SurveyCode (由行号+文件名组成):

这是我用来生成 SurveyCode 的公式:

      =CONCATENATE(ROW(Sheet1!A1),TRIM(LEFT(SUBSTITUTE(MID(CELL("filename",Sheet1!A1),
        FIND("[",CELL("filename",Sheet1!A1))+1,255),".xl",REPT(" ",255)),255)))

我从单独的 Sheet1 中获取 Row(),因为如果用户决定删除工作中的一条记录sheet,那么我的 SurveyCode 公式之一坏了,我会看到 #REF! 错误而不是 4ClientSatisfactionSurvey,例如

我更改后的公式将如下所示:

      =CONCATENATE(ROW(#REF!),TRIM(LEFT(SUBSTITUTE(MID(CELL("filename",Sheet1!A6),
         FIND("[",CELL("filename",Sheet1!A6))+1,255),".xl",REPT(" ",255)),255)))

ROW(#REF!)代替ROW(A4)

所以,我决定将 Row() 存储在单独的 sheet 中。即使用户决定删除记录,在这种情况下我的调查代码仍将保留。

但我还有另一个问题 - 如果 - 在记录删除后,潜在用户将创建一个新记录 - 它不会是唯一的,但会重复我的 sheet1 中的前一个行号。

例如 - 如果客户从工作 sheet 中删除 4ClientSatisfactionSurvey 记录,然后将添加一条新记录 - 新的调查代码将 = 7ClientSatisfactionSurvey 而不是 8ClientSatisfactionSurvey

我想,我的问题出在公式的第一部分 - 我不确定如何正确生成 SurveyCode 的唯一“数字”部分。

求求你帮忙...

您想使用动态范围。

假设您的数据在工作表 1 的 A 列中

单击“名称管理器”(功能区的“公式”选项卡) 单击“新建”

姓名:myRange 范围:Workbook 参考:=OFFSET(Sheet1!$A,0,0,COUNTA(Sheet1!A:A),1)

这将创建一个范围,该范围会在添加新数据或删除行时自动更改大小。

您使用 INDEX() 引用单元格,因此,在单独的 sheet =INDEX(myRange,1) 是第一个单元格 =INDEX(myRange,ROW()) 是相应行中的任何单元格


注意:注意您的索引值并使用条件语句来捕获超出范围的错误


警告COUNTA() 只计算 non-blank 个单元格,如果有空行则必须调整公式以计算它们


注意:您可以通过引用辅助单元格

将范围固定为固定行数

示例:如果在 Sheet2!A1 中输入 20,并且 myRange 指的是 =OFFSET(Sheet1!$A,0,0,Sheet2!$A,1),那么 myRange 将始终是行1-20,无论插入或删除行


综上所述,设计良好的 VBA 解决方案将更安全且更易于使用。