|
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 49
|
||||||||||||||||
Преобразование типов для копирования определенных ячеек из одного столбца в массив29.01.2014, 05:16. Показов 4781. Ответов 44
Метки нет (Все метки)
Доброго времени суток.
Есть таблица в экселе. Цель - скопировать определенные ячейки из одного столбца в массив, затем вывести содержимое массива на другой лист. Первый же вопрос. Значение из ячейки я беру используя
Далее я сдвигаю выбор на одну ячейку вниз и пытаюсь произвести вычитание.
Кастование (CLng()) тоже не помогает. Помогите, пожалуйста. P.S. вот весь кхм, код
0
|
||||||||||||||||
| 29.01.2014, 05:16 | |
|
Ответы с готовыми решениями:
44
Преобразование типов. Дружественніе функции. Конструктор копирования Преобразование типов. Дружественные функции. Конструктор копирования.
|
|
11525 / 3812 / 683
Регистрация: 13.02.2009
Сообщений: 11,229
|
|
| 02.02.2014, 08:42 | |
|
.exists самая главная фишка словаря! позволяет сразу определиь наличие ключа в словаре.
Без перебора всех элементоов
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
||||||
| 02.02.2014, 12:04 | ||||||
|
Магии там нет. Как и формально нет сортировки.
Цикл по листам, с каждого берём данные в массив. Цикл по массиву - заносим в словарь номера, сразу определяем максимальный и минимальный номер. Когда всё собрано - цикл от минимума к максимуму, смотрим есть ли номер в словаре - формируем массив результатов. Сперва делал с одним флагом - но тогда получалось много лишних операций с "хвостом" группы, он всё время перезаписывался в массиве, что неправильно (хотя никому это и не видно ). Поэтому два флага.Если нужно каждый документ писать в свой столбец - думаю нужно ориентироваться на слово "Номер" - добавить ещё флаг или два и писать каждую группу в свой массив (он и так изначально создан по факту с запасом, ну будет с огромным запасом...). Хотя можно собирать без запаса в коллекцию, потом при выводе перекладывать - но думаю это лишние сложности. И тогда создать книгу для результатов думаю нужно сразу после сбора номеров, чтоб было куда выгружать эти многие массивы. Но вот не понял такие Ваши результаты:
Но можно конечно если нужно - всего лишь ещё два флага и путаницы добавить
0
|
||||||
|
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 49
|
||||||||||||
| 05.02.2014, 09:59 [ТС] | ||||||||||||
|
Hugo121, я в отчаянии. Я уже второй день
об обработку этого массива, и все, на что у меня остались силы, это испустить предсмертный вздох о помощи.Пути два: 1. В оригинале, записав начало серии, я с помощью Offset переходил к следующему элементу. Объясните мне, пожалуйста, как можно в рамках цикла For Each повторить этот трюк (Каким образом записывать=>обрабатывать предыдущий элемент или каким образом достать следующий?) Вот собственно, сам Цикл
2. В итоге я решил избавиться от For цикла, чтобы, используя Do While, обращаться в любой момент к любым элементам. Я урезал тело вашего For Each до одной строки (l = l + 1). Объясните мне, пожалуйста, почему: - массив а двумерный, по два элемента в каждой строчке и второй всегда равен 1 - при попытке обращения к нему вне этого самого цикла For Each весь массив оказывается пуст Вот собственно, сам Цикл
П. С. Я писал уже насчет "таких моих результатов", но повторюсь. Отчетности это не портит. Красивее без этого, но это не критично. Возникает из-за того, что проверка, не кончились ли значения на странице, стоит после проверки на окончание серии. У вас не возникает, потому что у вас сразу все страницы в массиве, вы не переходите с одной на другую. Добавлено через 40 минут Не по теме:
Кликните здесь для просмотра всего текста
Я только что трижды перечитал все запреты форума, и я под них не попадаю.
Это не ссылка рекламного характера, в ней нет ничего вредоносного, ничего нарушающего авторские права, ничего пропагандирующего другие форумы, ничего оскорбляющего других пользователей, ничего нарушающего законодательство РФ. Ни слова про "потусторонние ресурсы" я в правилах не нашел.
0
|
||||||||||||
| 05.02.2014, 10:11 | ||||||||
0
|
||||||||
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|||||||||||
| 05.02.2014, 11:03 | |||||||||||
|
1.в рамках цикла For Each перейти к предыдущему элементу не получится. Используйте цикл for n to m.
2. Вот тут
"почему: - массив а двумерный, по два элемента в каждой строчке и второй всегда равен 1" - потому что это массив из одного столбца, где у каждого элемента есть номер строки и номер столбца, и столбец этот только первый! "почему: - при попытке обращения к нему вне этого самого цикла For Each весь массив оказывается пуст" - это нужно смотреть в файле. Судя по коду - это будет, если в последнем листе 4-й столбец использованного диапазона будет пуст. "при первом же обращении к массиву говорит "Subscript out of range"" - нужно смотреть на деле какой там в этот момент массив и куда Вы смотрите. Вообще в Ваши коды не вникал, т.к. я всё делал иначе. И даже что-то начал делать чтоб отследить эти разные документы - но это было давно (3 дня прошло, и было написано много других кодов - детали того уже не помню) и не тут... Т.е. сейчас той заготовки нет, она дома. А дома сегодня вечером заняться этой задачей времени не будет.
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 49
|
|
| 05.02.2014, 17:11 [ТС] | |
|
1. Перейти не получится. А нельзя ли как то хранить предыдущий элемент для его обработки в следующей итерации? Я над этим корчился-тужился, но так и не осилил.
2. Если использовать не For Each, а другие типы циклов, чтобы обращаться к любым элементам, то нужен собственно массив состоящий из всего 4 столбца РАБОЧЕЙ КНИГИ. Количество всех строк уже есть, осталось получить такой массив. Как?
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|||||||||||
| 06.02.2014, 10:08 | |||||||||||
Сообщение было отмечено mr sinister как решение
Решение
1. запоминайте в переменной значение или индекс (добавьте счётчик) - смотря что нужно.
2. в моём коде это есть:
У книги нет столбцов. Добавлено через 16 часов 31 минуту Сделал обработку этих "дыр" в файле на основе предыдущего кода:
Сложнее добавить кассиров к каждому результату -но тоже можно.
2
|
|||||||||||
|
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 49
|
|
| 07.02.2014, 03:28 [ТС] | |
|
Hugo121, во-первых спасибо за доработанную версию. Во-вторых нет, кассиров стабильно двое. В-третьих, насчет файлов, это оно? Или можно проще, без центрального файла?
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|
| 07.02.2014, 10:52 | |
|
Нет.
Т.к. у Вас там много таких файлов с билетами, а этот код обрабатывает только один активный файл (у меня код расположен в другом файле - это может быть и personal.xls как по ссылке, но у меня просто пустой файл-"инструмент" с этим кодом), то думаю есть смысл добавить в код последовательную обработку нескольких файлов с билетами. Есть варианты: обрабатываем не глядя все файлы определённой папки обрабатываем не глядя все файлы выбранной в диалоге папки обрабатываем все выбранные пользователем в диалоге файлы Если файлов будет много - то думаю нужно доработать вывод собранного. Например вот получите Вы 40 таких парных столбцов, без привязки к файлам - их ведь дальше опять нужно вручную как-то обрабатывать...
0
|
|
|
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 49
|
|
| 11.02.2014, 06:47 [ТС] | |
|
Hugo121, конечно, обрабатываем все выбранные пользователем в диалоге файлы
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
||||||
| 11.02.2014, 12:02 | ||||||
|
Ну почему же "конечно"? Первый вариант тоже часто применим, даже может чаще чем третий - вот понакидали Вам в папку свежих файлов, Вы нажали кнопку и все файлы обработали без лишних разговоров-диалогов.
Но ладно, третий вариант (добавил в результат вывод имени обрабатываемого файла):
0
|
||||||
|
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 49
|
||||||
| 14.02.2014, 21:13 [ТС] | ||||||
|
Hugo121, лучше, если каждый кассир каждого дня сохраняется в подпапку текущей папки "import" в отдельный файл с маской дата + кассир.
Вот, я убрал ind и описал в комментариях, что должно происходить, поправьте меня, если я не вовремя пытаюсь сохранить результат или криво беру символы из строки
0
|
||||||
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
||||||
| 14.02.2014, 22:14 | ||||||
|
Если убираете ind - значит нужно как-то иначе обрабатывать эти разные документы в одном файле.
Сейчас второй лепит данные на первый. Но если в файле будет только один документ (и обрабатывать будете только один файл) - тогда вроде нормально, только чуть подправить эти новые столбцы - там вероятно не нужно тогда имя файла. Ну и тогда
Но нужен только .SelectedItems(1)
0
|
||||||
|
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 49
|
|
| 14.02.2014, 22:49 [ТС] | |
|
Hugo121, проясню - протестив на деле процесс импорта, я сделал вывод, что удобнее не разделять кассиров в одном отчете отступом на листе, а помещать их в разные рабочие книги, и, соответственно, сохранять эти две разных рабочих книги соответственно с постфиксами "k" и "s".
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|
| 14.02.2014, 23:19 | |
|
Ну тогда можно брать сразу все файлы, новую книгу генерить в начале Sub vivod(), сохранять-закрывать её в конце Sub vivod()
0
|
|
|
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 49
|
|
| 14.02.2014, 23:27 [ТС] | |
|
Hugo121, проясните, пожалуйста:
1. Обращаться для сохранения к wb или к SelectedItem? 2. Какие собственно команды использовать, чтобы спуститься на уровень ниже в заданную папку (можно без On Error, папка 100% там будет) и сохранить текущую книгу с заданным именем?
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|
| 14.02.2014, 23:31 | |
|
1. Ни так ни эдак - создайте Set outsh = Workbooks.Add(1).Sheets(1) внутри этого макроса, и там же сохраняйте-закрывайте.
2. Зачем на уровень ниже? Просто сохраняйте файл по полному пути - имя папки интегрируйте в путь. Вопрос где брать имя кассира - в моём коде для этого нужно ещё один массив перебирать....
0
|
|
|
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 49
|
|
| 14.02.2014, 23:40 [ТС] | |
|
Hugo121, 1. Ясно-понятно.
2. Все отсортировано по месяцам, так что полный путь будет раз в месяц разный. Имя кассира знать не нужно и брать соответственно тоже. Просто в начале обработки файла к равно истине - первый кассир - касса. При следующем обнаружении слова "номер" к становится ложью, значит, кассир - сергей. С каждым новым фацлом сбрасывается. И да. Как собственно сохранять то этот outsh? Всмысле какой командой имя файла, путь задавать и прочее?
0
|
|
|
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
|
|
| 14.02.2014, 23:51 | |
|
Как сохранять - запишите нужный процесс рекордером, возьмите код.
Как вставить путь - разберётесь. Ну а сам файл будет outsh.parent
1
|
|
|
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 49
|
||||||
| 16.02.2014, 04:09 [ТС] | ||||||
|
Hugo121, печаль-беда.
Вот, нагуглил как все это делается, однако почему-то mi в нужный момент не сбрасывается до 1000000000, как обычно, как следствие, вывод вызывается с пустым словарем, в результате ошибка variable not defined. Не совсем понимаю, в правильные ли места в коде я запихал все эти сохранения и операции со строками. Помогите, пожалуйста.
0
|
||||||
| 16.02.2014, 04:09 | |
|
Суммирование значений ячеек одного столбца
Проверка вхождений значений ячеек одного столбца в другой Как скопировать из одного столбца в другие по несколько ячеек Суммирование значений ячеек одного столбца dataGridView и вывести в textBox Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|