Excel

Feb. 25th, 2009 05:06 pm
[identity profile] moscow09.livejournal.com posting in [community profile] useful_faq
 Как преобразовать цифро-буквенное слово в уникальное цифровое? 

К примеру "HP-C4801A" превратить в "[цифра1][цифра2][цифра3]4801[цифра4]"
С использованием одной формулы.

Вообще, возможно ли средствами Excel?

Date: 2009-02-25 02:32 pm (UTC)
From: [identity profile] doppeltes.livejournal.com
Уникальное соответствие между буквами и цифрами не получится, так как букв в 2.6 раз больше помещается чем цифр. Но можно сделать соответствие в виде XXX => NNNNNNN

В Excel'е это можно сделать написав на VBA нужный скрипт.

Date: 2009-02-25 03:30 pm (UTC)
From: [identity profile] mister-cat.livejournal.com
А цифры вы хотите непременно оставить как есть?
Просто в этом случае задача несколько усложнится, т.к. способ кодирования нужно более хитрый придумывать.
Например, договоримся менять букву на ее номер в алфавите, т.е. A=01, B=02 и т.д.
Тогда последовательность A02 и AB будут довать одинаковый результат 0102.

Date: 2009-02-25 04:37 pm (UTC)
From: [identity profile] mister-cat.livejournal.com
Ну тогда все зависит от максимальной длинный первоначальной строки.
А во-вторых, снижает шанс написать формулу без макросов.

Date: 2009-02-26 05:37 am (UTC)
From: [identity profile] mister-cat.livejournal.com
Предположим, исходная строка состоит только из латинских букв и цифр. Итого - 36 различных символа. Для их представления нужно минимум 6 бит. 6*12=72 - столько бит нужно по минимуму на всю строку. А 8 (однобайтных) символов - это максимум 64 бита. Да причем часть из этих символов являются специальными, т.е. непечатными. Так что, похоже, ваша задача не решаема. Даже на макросах.

Date: 2009-02-26 07:27 am (UTC)
From: [identity profile] mister-cat.livejournal.com
Если учесть, что вы хотите в выходной строке использовать вообще только цифры, то даже чисто логически - на входе 12 цифр или букв, на выходе 8, причем только цифр. В общем случае - никак.
Единственное, что можно попытаться сделать, это как-то использовать специфику вашей исходной строки. Схитрить, в общем :-)
Например, первые 2 цифры отвести под код производителя (если их не больше 100, разумеется). Например, HP = 01, Cannon = 02 и т.п. Ну и так далее.
Так еще можно что-то придумать, но 100% гарантии нет.
Может, чуть подробнее расскажите, из-за чего такая необходимость?

Date: 2009-02-26 07:49 am (UTC)
From: [identity profile] mister-cat.livejournal.com
А чем плохи произвольные?
Стандартное решение, в общем-то.
Только вот что-то мне подсказывает, что задачка больше для баз данных подходит (хотя бы Access), Excel в этом плане слабоват.
Например, в Acceess можно сделать колонку с автонумерацией - как раз ваш случай. К тому же, он сам может контролировать, чтобы вы случайно в таблицу одно и то же не внесли. В Excel для этогу понадобятся лишние и не всегда тривиальные телодвижения.

Date: 2009-02-26 07:34 am (UTC)
From: [identity profile] mister-cat.livejournal.com
Я уже ответил ниже.
Поскольку вы хотите кодировать только цифрами, получившаяся строка будет по-любому не короче исходной - в общем случае.
Т.е. ее длина получится 12+. До 18, насколько я понимаю.

Date: 2009-02-26 07:35 am (UTC)
From: [identity profile] mister-cat.livejournal.com
Вы бы все-таки рассказали чуть подробнее, из-за чего весь сыр-бор.
Может, как-то по-другому можно все решить?