18.09.2019 08:45
УКМ_эксплуатант_2
 
Надо получить экселевый файлик для типографии со штрихкодами карт.
ШК должен состоять из префикса (пусть будет 12121) и самого номера. Номера должны быть случайными и уникальными.
Для 100-200-1000 номеров - проблем нет.
Но, блин, 360000 номеров - не нашел чем генерировать!
Онлайн генераторы ограничены малым числом.
В Екселе функцией =СЛУЧМЕЖДУ(1;9999999) - много повторений.
Может кто подскажет возможное ЛЕГКОЕ решение (сложное через ACCESS уже сам вижу )
18.09.2019 08:59
OlegON
 
может, брать просто последовательно, а потом, по ещё одной колонке, где будет рандом, отсортировать?
18.09.2019 09:04
УКМ_эксплуатант_2
 
Сейчас сформировал случайные значения на всю высоту экселя (более миллиона строк)
Вставил на новый лист "только значения".
Второй колонкой - номер по порядку.
Потом сделал "обрезание" - удалил все строки более миллиона (иначе не сортируется по первой колонке).
сортировка по первой колонке.
В третью = Если (А2=А1;1;0)
Фольтр по третьей колонке на 1
Запустил удаление отфильтрованных строк.
Но очень уж долго выполняется....
18.09.2019 09:54
OlegON
 
Для меня работа с экслем относится к разряду тяжелых и раздражающих. Я бы однозначно стал решать задачу на bash или php, что под рукой...
если честно, не понимаю
Цитата:
УКМ_эксплуатант_2 = Если (А2=А1;1;0)
зачем это? оно самое тормозное, наверное...
еще раз
рандом;штрихкод от 1 до 360000;
сортировка по первой колонке (получится случайная сортировка второй колонки), берем вторую колонку. Чем не то?
18.09.2019 10:27
Shift
 
А может VBscript?
Код:
Set fso = CreateObject("Scripting.FileSystemObject")
Set fres = fso.OpenTextFile(файл.csv, 8,true)

prefix=1212100000000
max_i=99999999
cur_i=0
need_num=360000

while (cur_i<max_i) and (need_num>0)
	cur_i=cur_i+int(10*rnd)+1
	need_num=need_num-1
	fres.WriteLine(prefix+cur_i)

wend
fres.Close
18.09.2019 12:22
УКМ_эксплуатант_2
 
Победил...
18.09.2019 12:48
OlegON
 
Цитата:
УКМ_эксплуатант_2 Победил...
как в итоге-то?
19.09.2019 09:19
УКМ_эксплуатант_2
 
Так же, как и описывал ыше, но некоторые тонкости.
1. На первом листе в первый столбец пишем формулу
SQL код:
=СЛУЧМЕЖДУ(1;9999999
2. Теперь копируем весь этот столбец на другой лист "Только значения" и обзываю столбец "Случайное число". Ибо при каждом переходе по ячейкам происходит перерасчет формул - меняются случайные числа. Далее - работает с этим новым листом.
3. Второй столбец обзываем "Порядковый номер до сортировки" и ставим тупой счетчик.
4. Снизу удаляем 150-200 строк - иначе не работает сортировка.
5. Сортируем по столбцу "Случайное число"
6. Третий столбец обзываю "Фильтр на повтор" и вставляю формулу (начинать не с первой, а со второй строки):
SQL код:
Если (А2=А1;1;0
и "размножаем" ее до последней строки.
7. Теперь включаем автофильтр на третий столбец =0
8. Копируем данные
9. Вставляем на новый лист или новую книгу как "Только значения".
10. Если надо - восстанавливаем порядок отсортировав по столбцу "Порядковый номер до сортировки".
11. Готово.

Тонкость была в пункте 7 и далее. Когда я поставил фильтр =1 и попытался "удалить строки" - мой ексель завис три зара из трех (правда предупреждал, что эта операция длительная).
Поэтому "не удалил ненужное", а "скопировал нужное".



Цитата:
OlegON зачем это? оно самое тормозное, наверное...
Не заметил тормозов. Такая же "пауза" как и при "размножении" формулы из пункта 1 (1.5 - 2 сек курсор часиками )
19.09.2019 09:38
OlegON
 
Все равно не понял, чем не подошел мой вариант.
Первый столбец
Код:
=СЛУЧМЕЖДУ(1;9999999)
Второй - штрихкод по возрастанию от 1 до 300000 (уникальный соответственно)
Выделяем два столбца и сортировка по "А". "А" удаляем - уникальный список штрихкодов, рассортированный по произвольному.
19.09.2019 09:41
OlegON
 
Кстати, если написал или нашел тут, как делать из индекса штрихкод (контрольку) - выложи? Я что-то не найду.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.