Формула не различает заглавные и прописные буквы, но это нормально: так и надо было изначально.
Спасибо!
ЗЫ. Теперь придётся во всех файлах выцарапывать этот СЧЁТЕСЛИ.
Спасибо!
ЗЫ. Теперь придётся во всех файлах выцарапывать этот СЧЁТЕСЛИ.
25 фев 2021 16:05:24
Функция СЧЁТЕСЛИ считает номера с лидирующими нулями и пробелами одинаковыми. См. вложение. Ячейки отформатированы как текст.
Получается, что номера 1, _1, __001, 00001 и т.п. функция считает одинаковыми (тут _ - пробел). Как подсчитать их, считая разными? Пока только приходит в голову макрос, но не всегда макрос можно втолкнуть в документ для передачи его другим лицам. Ещё странность в том, что если пробел после нуля, то для СЧЁТЕСЛИ это уже разные данные. Проблема немного затронута в |
|
|
3 окт 2020 17:20:00
По ходу дела вопросов не уменьшается.
Например, как получить данные просто между тэгами, типа значение СумНал в примере файла xml. А уж про изменение нужных значений, думаю, вообще мрак будет. Есть ещё тут темы по изменению xml, например В общем, я так понял, что сам файл xml изменить нельзя, можно на его основе создать новый. Так? Если так, то конкретно описанная изначально проблема проще, по-моему, решается через операции ввода/вывода для работы с текстовым файлом. Пока сделал так... Хотя код от doober тоже пригодился в другом месте, спасибо. ЗЫ. Потратил кучу времени на этот xml, но ясности не прибавилось. Можно позавидовать Ладно, будем дальше разбираться, но только по необходимости и без фанатизма. |
|
|
1 окт 2020 00:23:08
На строке 8
На форуме есть такая же тема Может, в References надо галку где-то в нужном месте поставить? Excel 2010 (32bit) на Windows Server 2008R2 (64) |
|||
|
30 сен 2020 20:31:39
Нужно в файле xml поменять некоторые данные. Либо в самом файле, либо создать новый.
Данные меняются по следующему правилу: количество в штуках надо изменить на кг, литры и другие. Норма каждого товара своя (есть справочник), поэтому надо вытянуть из xml данные КодТов и КолТов, пересчитать количество (норма у каждого товара своя, например, умножить на 5, 10 или 20) и записать в xml новое количество, а также поменять ОКЕИ_Тов на нужный и ЦенаТов на расчётную. По форуму поискал, но так не смог найти рабочий вариант кода хотя бы получения данных из xml. Везде свои форматы xml и подогнать код под свои нужды не получилось. Загрузить в Excel можно, но там КодТов получается без нулей и искать такой код потом в справочнике плохо. Посоветуйте, как лучше сделать и в какую сторону копать? ЗЫ. Почему-то файл xml размером 5 КБ этот форум принял как более 100 КБ. Поэтому rar. |
|
|
19 сен 2020 16:22:21
Длина строки точно не будет такой, чтоб вызвать проблему.
Теоретически макрос может быть использован на eng-Excel или других региональных настройках, но сейчас возможное различие может только в десятичном разделителе: точка или запятая. Пробовал прикрутить список в виде имени (именованной формулы), но тут тоже ждал облом. А если запихать список в укромное место листа, то его потом никак нельзя будет удалить, но чтобы выпадающий список остался? |
|
|
13 сен 2020 16:24:45
Выпадающий список: создан Проверка данных - Список. Список вносится в виде: Красное,розовое;Синее,голубое;Зелёное;Белое,чёрное,серое. И в ячейке получается нормальный список:
Красное,розовое Синее,голубое Зелёное Белое,чёрное,серое Макрорекордер записывает список в виде "Красное,розовое;Синее,голубое;Зелёное;Белое,чёрное,серое". При запуске макроса выпадающий список в ячейке получается корявым в виде Красное розовое;Синее голубое;Зелёное;Белое чёрное серое Т.е. суть запятой и точки с запятой меняются местами. Как макросом внести нормальный список с запятыми в значениях? Можно в укромное место на лист, а потом сделать ссылку, но нужен список без задействования листа. |
|
|
1 авг 2020 16:23:01
С DefByte всё нормально получается.
А массив a(0 to 99) в моём случае особо смысла не имеет. Дело в том, что номера столбцов не просто переменные a00, a01 и т.д., как изначально я указал, а вполне осмысленные: cDateOtgruz, cDateOplaty, cNumDoc, cNumTTN, cPartnerName, cPartnerCode, cSummaDoc и так несколько десятков переменных. И удобнее пользоваться ими: cBruttoV визуально гораздо более информативная переменная, чем a(46). Конструкцию типа Const cPriceOpt3 = 38 использовать пытался, но удобнее использовать Dim, как оказалось. Инициализация переменных идёт в виде
Изменено: |
|||
|
1 авг 2020 14:44:24
Основная проблема - структура исходных данных. И, как следствие, структура конечных данных. А попросту говоря - нет ни там, ни там никакой здравой структуры. И поэтому макрос тут не поможет. В крайнем случае, будет работать конкретно на этих данных, а при на других данных или просто дополнении текущих данных результат может быть непредсказуем.
Когда-то давно делал подобное только формулами без макроса. За основу брал Ведомость операции по аналитическому счёту (есть такое в бухгалтерии). Основные данные (отгрузки/оплаты) там в одной таблице, суммы дт (дебет) и кт (кредит) расположены в разных столбах и отсортированы по дате. Для предложенного случая нескольких клиентов надо сначала отсортировать по ID партнёра (шифр, или ИНН), чтобы данные по одному клиенту шли подряд и потом по дате. Ну и добавить всякие хотелки типа Канал, отсрочка и др. В файле подогнанный под начальные условия результат. - Признак оплаты "не брать" - в столбце Содержание (или Договор для отгрузок). Можно переделать на корр.счёт =13. В ячейке V1 - сам признак. - В N1 и O1 - даты периода ведомости. Нужны для корректной работы формулы просрочки. - В таблице есть Условное форматирование для подсветки последней строки по каждому партнёру. Для больших объёмов данных эту УФ лучше удалить. - Добавлены данные клиента 555555 для вариантов: сначала оплата; оплаты больше отгрузок, но одна из них - не брать. Добавлены столбцы: - Сальдо текущее - сальдо на дату по строке. Тут не учитывается "не брать". - Начало оплаты и Полная оплата - даты: соответственно дата начала оплаты и полной оплаты каждой отгрузки. Неопл - отгрузка не оплачена. - Просрочка (дней) с учётом дней в столбце Отстрочка. - Оплачено и Неоплачено - суммы: тут понятно. - В скрытых столбцах R-Z - вспомогательные формулы. Кое-какие данные и условия в формулах могут быть лишние. Но это осталось от предыдущих моих вариантов. Сами формулы, возможно, не совсем оптимизированы, но работают шустро. В общем, главное - структурирование начальных данных. Вручную приведение исходных данных в таблицу типа Ведомость заняло пару минут. Думаю, даже просто для структурирования макрос не нужен. Свой вариант я делал давно ещё до знакомство с planetaexcel. Другие варианты реализации подобной темы можно найти на этом же сайте в поиске. В основном ФИФО применительно к товарам: даты прихода/расхода. Есть и по оплатам. Например, возможно, более удобным будет вариант в теме |
|
|
17 июл 2020 00:41:46
|
|||||
|
16 июл 2020 19:57:16
Спасибо. Примерно то, что надо, это DefByte. Попробую прикрутить его.
На самом деле, конечно, многократное объявление As Byte вовсе не критично, можно и покопировать. Я просто думал, что есть какой-то простой способ всё сделать разом. Необходимость таких многочисленных переменных возникает из-за отчётов со многими (но меньше 256) столбцами на листе. В процессе отладки макроса, точнее, разработки формы отчёта, приходится добавлять/удалять/перемещать столбцы с данными по просьбе руководства. И переменные используются, чтоб не менять номера столбцов по всему коду, а просто менять один раз значение переменной номера столбца. Понятно, что отчёт с сотней столбцов получается громоздким и неудобным, но он используется как промежуточный для сводной таблицы и т.д. Сразу сделать сводную без общего отчёта нельзя, т.к. он тоже просматривается по необходимости. |
|
|
16 июл 2020 15:08:26
Иногда приходится объявлять большое число переменных с одинаковым типом. Например:
|
|||
|
4 июн 2020 18:48:23
И ещё надо проверять, чтоб стекло1 обязательно было в списке именно Камаза или искать конец списка у него. Иначе формула найдёт стекло1 у другого драндулета ниже, если у Камаза такого стекла нет.
Не совсем по теме, а общий подход. Многолетний опыт работы с подобными списками и поисками в них говорит только одно: надо приводить таблицу в нормальный вид и в работе использовать только уникальные артикулы. |
|
|
10 апр 2020 11:28:28
Делаю всё как описано, vbaProject.bin редактирую Блокнотом, но после повторного открытия файла Excel2010 выдаёт предупреждение о том, что не удалось прочитать содержимое файла и предлагает восстановить. После восстановления опять предупреждает о повреждении компонента vbaProject.bin и удалении его. И файл открывается вообще без модулей.
Что не так? |
|
|
17 дек 2019 13:25:48
Увы, не помогло. Проблема в формате исходных данных, т.к. опять "Внешняя таблица не имеет предполагаемый формат".
В общем, проблему решил дополнительной обработкой Recordset: - Получение всего списка (code - уникальные) - Получение списка с перечнем code, у которых count(id)>1, т.е. количества разных code с одинаковым id. - Добавление в основной список данных по количеству одинаковых id по каждому code. Спасибо за желание помочь. |
|
|
11 дек 2019 17:48:25
Если, как в примере, пустые ячейки в D именно пустые, а не содержащие пробел или строку нулевой длины, то проще просто вручную.
1. Скопировать нужную область A2:F7 на Лист2 2. Главная -> Найти и выделить -> Выделение группы ячеек -> Пустые ячейки -> ОК 3. Удаление ячеек -> удалить всю строку. При желании всё это можно записать макрорекордером. Если пустыми считать ячейки с пробелом, то можно вариант МатросаНаЗебре с Trim в нужном месте. |
|
|
11 дек 2019 11:40:45
Тут, как в старом еврейском анекдоте, и DartoArem прав, и IKor прав.
Я же предлагаю пока пойти по простому пути. А именно, сначала отсеять слова с заведомо "исконными" рус и лат буквами, а оставшиеся проверять не словарями, а вручную. Ибо всякие слова типа МОСКВА - это из разряда ошибок, как я писал выше. Конечно, в моём случае было проще: там был именно в основном текст с вкраплениями лат. букв, а не мудрёный прайс-лист, или что-то подобное. Т.е. я решал свою задачу и просто предлагаю использовать этот подход для частичного решения текущей. Можно рассмотреть такой пример текста: Для хитромудрого прайс-листа, конечно, доля ручной работы увеличится. И конечно же, надо дописать доп.проверку сложносоставных слов через дефис, точку и т.п.: IP-камера, |
|
|
11 дек 2019 00:14:46
Когда-то давным-давно, во времена благословенного Excel 2003, решал такую же задачу. Макроса уже нет, идею примерно помню.
Решал "от обратного": 1. Есть список "исконно русских" букв: БГДЁЖЗИЙЛПУФЦЧШЩЬЫЪЭЮЯбвгдёжзиёклмнптфцчшщьыъэюя 2. Если хоть одна буква встречается в проверяемом слове, то слово считается русским и все прочие латинские буквы меняются на русские аналоги. Список тоже есть, соответствует указанному в предыдущих ответах. 3. Есть список "исконно латинских" букв: DFGIJLNRSUVYZbdfghijklmnrstuvz. 4. Если русских букв нет, но есть хотя бы одна латинская буква из списка, то слово считается "латинским", с заменой также по списку. Возникали какие-то мелкие нюансы, типа считать ли одним словом набор букв с дефисом и т.п., с ходу их не помню, но они тоже были вполне решаемы. Понятно, что слова типа РЬl)|(ий кom, где одновременно есть и те, и те, и левые символы, считаются ошибкой и по ним исправляется вручную. То же касалось названий с цифрами.
Изменено: |
|
|
9 дек 2019 16:39:05
Вариант, конечно же, рабочий (я так думаю, проверить не могу). Но увы, как я писал с самого начала, вложенные запросы не работают.
Использую ADODB для получения данных из dbf. Если использовать строку Microsoft dBASE Driver (*.dbf), там вложенные запросы работают, но тогда вылетает ошибка "Внешняя таблица не имеет предполагаемый формат" В VBA выглядит примерно так:
Может, кто подскажет что-то правильное в части подключения? |
|||
|
8 дек 2019 03:19:24
Вопрос не совсем по Excel.
В VBA запросом к таблице получаю данные, потом обработка данных и на лист Excel. Хотелось бы больше обработки возложить на SQL, т.к. на листе Excel процесс сильнее тормозит, а полученный в VBA из результата запроса массив может быть большой и вплоть до нехватки памяти. Таблица с code и id. Значения code уникальные, id - нет. Из таблицы надо получить все строки и количество одинаковых id по каждому code. Пока у меня получаются данные только с одним (последним) code по каждому id. Проблема ещё в том, в для данной таблицы и провайдера не работают вложенные запросы. Но JOIN и UNION - работают, хотя и с ними не получилось. Возможно, решение простое, но сам никак не соображу. Пример таблицы для простоты - в Excel. |
|
|