【问题标题】:Trying to increment a 4 character alphanumeric code in Excel尝试在 Excel 中增加 4 个字符的字母数字代码
【发布时间】:2020-10-27 17:13:51
【问题描述】:

我正在尝试为我的一个客户的序列号创建一个 CSV 文件。我们将它们打印为条形码供他们使用,通常我会使用我们的条形码软件来生成数字。但是,我们使用的是不同的打印方法,它需要一个包含所有要打印数字的 CSV/Excel 文件。条码如下:

MC100VGVA。

最后一位是从字符串的其余部分创建的校验位。

现在,我的问题来自“VGVA”位。 A列是前缀(MC),B列是数字(100),C列是递增的4个字符(VGVA),D列是校验位。

我需要 VGVA 位按字母数字递增。所以,当它到达 VGVZ 时,我需要它去 VGW0。然后到VGZZ,再到VH00,以此类推,直到到达ZZZZ,其中下一位将B列增加到101,C列变为0000。

我尝试使用 CHAR 公式以及 CONCATENATE 和 MID。但是,由于我对这些公式并不精通,我尝试将它们编辑为使用 4 位数字都失败了。

如果需要,我不反对使用 VBA,但这不是我曾经使用过的东西,所以你必须原谅我的任何无知。

如果您需要更多信息,请告诉我。谢谢!

【问题讨论】:

标签: excel vba excel-formula increment


【解决方案1】:

您似乎正在尝试创建一个新基,该基基于 27 位数字(0 以及从“A”到“Z”的所有字母)。所以我建议你创建一个从和到 27 位系统的转换。

让我先解释一下我在八进制数中的意思(8 位,从 0 到 7):在那个系统中,我们从(只是一些例子)开始:

a=0011
b=1237
c=1277

这些数字的含义是:

a equals 0*8^3 + 0*8^2 + 1*8^1 + 1*8^0 = 9, so:
a+1 equals 10, and converting this to octal numbering yields:

0012

b   equals 1*8^3+2*8^2+3*8^1+7*8^0 = 671, so:
b+1 equals 672, and converting this to octal numbering yields:

1240

c   equals 1*8^3 + 2*8^2 + 7*8^1 + 7*8^0 = 703, so:
c+1 equals 704, and converting this to octal numbering yields:

1300

我建议对您的 27 位系统执行完全相同的操作,例如:

VGZZ   equals 22*27^3 + 7*27^2 + 26*27^1 + 26 = 438857
VGZZ+1 equals 438858, and converting this to 27-digit numbering yields:

VH00

您可以使用自己开发的 VBA 函数来执行此操作。从字符串到普通数字的转换很明显,反之则使用=MOD(...,27^3)等类似函数。

【讨论】:

  • 我相信我实际上是在尝试使用 36 基系统(0-9,A-Z)。但是,我认为它仍然是相同的想法,只是不是乘以 27,而是乘以 36 来得到要转换的数字?
【解决方案2】:

我相信我已经找到了这个问题的非 VBA 答案,感谢另一个论坛上的人。

这是他们的建议,而且似乎效果很好:

B2 =B1+(C2="0000")

C2 =RIGHT(BASE(DECIMAL(C1,36)+1,36,4),4)

也许在 D1 试试这个 =MID("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+%",MOD(SUMPRODUCT(SEARCH(MID((A1&B1&C1),ROW($1:$99),1), "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.$/+%") )-99,43)+1,1)

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    相关资源
    最近更新 更多