Проблема в том, что при обратном суммировании веса брутто отдельных строк (для проверки), вылезает хвост (на примере это 0,02 кг).
См. колонки Q и R. В Q распределяется хвост (M) по 0.01 для первых строк, где "Разница между Н и Б" отлична от нуля.
Цитата
А вторая проблема - у некоторых строк нетто и брутто не отличаются - например, 0,16 кг (а такого не должно быть).
0,16 * 1,030264005 = 0,1648422408 = 0,16 (в столбце K стоит округление до 2-х знаков).
Правильное распределение веса по динамически обновляемым диапазонам (округление без хвостов)
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
17.09.2024 08:16:00
Добрый день. А можете прислать файл, где связка ПРОСМОТР+ВПР дает результат, отличающийся от ВПР?
Надстройка "nerv_DropDownList_1.6", мелкие неудобства
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
11.09.2024 18:49:27
apfu, приветствую. Могу ошибаться, но мне кажется, что вы последние (2024 г.) сообщения в теме не читали.
Правильное распределение веса по динамически обновляемым диапазонам (округление без хвостов)
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
08.08.2024 08:59:57
art_TD, добрый день. Количество товара (ВЕС_Тест!B:B, Тест!D:D) в моих формулах не учитывается. На листе ВЕС_Тест учитываю только 2 красных столбца (A и F - Артикул и Брутто ОБЩИЙ). Точно так же и в вашей формуле в столбце I, которую я подробно рассмотрел - на листе 'ВЕС для ВПР из упак.листа' используется 6-й столец, F (ВПР(B2;'ВЕС для ВПР из упак.листа'!A:F;6;ЛОЖЬ)):
Код
=ОКРУГЛ(ПРОСМОТР(9^9;ВПР(B2;'ВЕС для ВПР из упак.листа'!A:F;6;ЛОЖЬ))/СЧЁТЕСЛИ($B$2:$B$9999;B2)+ЕСЛИ(СЧЁТЕСЛИ($B$1:B2;B2)=1;ПРОСМОТР(9^9;ВПР(B2;'ВЕС для ВПР из упак.листа'!A:F;6;ЛОЖЬ))-СЧЁТЕСЛИ($B$2:$B$9999;B2)*ОКРУГЛ(ПРОСМОТР(9^9;ВПР(B2;'ВЕС для ВПР из упак.листа'!A:F;6;ЛОЖЬ))/СЧЁТЕСЛИ($B$2:$B$9999;B2);2);0);2)
применение условного форматирования за исключением 1 условия
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
31.07.2024 10:59:03
Цитата
"Переносы" в дальнейшем будут в последующем также учитываться при производстве..их нужно будет выделять или отмечать другими цветами.
См. файл (формулы в декабре).
применение условного форматирования за исключением 1 условия
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
31.07.2024 10:49:14
Я вместо И/ИЛИ использую */+, для краткости. В арифметических выражениях ИСТИНА=1, ЛОЖЬ=0. Функция ЕСЛИ воспринимает 0 как ЛОЖЬ, любое другое число как ИСТИНА. Запись:
"1-ЕЧИСЛО(...)" = "НЕ(ЕЧИСЛО(...))", т.к. даёт 1 при ЕЧИСЛО()=ЛОЖЬ и 0 при ЕЧИСЛО()=ИСТИНА.
применение условного форматирования за исключением 1 условия
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
31.07.2024 08:34:27
Следует избегать размещения в формулах УФ сложных вычислений. Это приводит к головной боли при отладке и к тормозам на больших данных. Вместо этого выделяйте под формулы столбец/строку и в УФ ссылайтесь на готовый результат. Заполнил для примера декабрь (1-я строка идеально подошла).
автоматическое опредение нужного диапазона поиска
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
31.07.2024 07:53:04
На закрытых файлах многие функции не работают, в т.ч. те функции, которыми можно удобно адресовать вычисляемый диапазон (ИНДЕКС и ДВССЫЛ). Набросал ещё вариант, но работать он будет при сортированном столбце [2.xlsx]Sheet1!$B:$B (как в вашем примере).
PS. Обратите внимание, что формулы, начинающиеся с "=ПОИСКПОЗ(..." - массивные (вводятся через Ctrl-Shift-Enter). А вот формулу "=СУММПРОИЗВ(..." можно вводить как обычную, т.к. функция СУММПРОИЗВ() сама массивная. В обоих случаях нужно ограничивать размер массивов: пишем $B1:$B999 для обработки 999 строк (с запасом). Если не указываем размер ($B:$B), то обычные формулы работают с заполненным диапазоном листа (34 строки в 2.xlsx), а массивные обработают все доступные строки (1048576), что приведёт к сильным тормозам.
Поиск значения в заданном массиве по ряду условий
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
30.07.2024 13:34:57
С доп. столбцом - так проще и яснее.
автоматическое опредение нужного диапазона поиска
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
30.07.2024 12:39:28
См. цветные формулы в M20:M21. В формулы не погружался (да и ПРОСМОТРX у меня нет).
Насколько я понял, нужно отвязаться от явных B1:B17 в формуле:
См. файл. Заказы за месяц собираются с дневных листов 01, 02, ..., 31.
VBA usedrange.replace выдает ошибку 13 Неверный тип, при изменении текста на простой все работает
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
30.07.2024 10:38:30
Цитата
кстати, обойти ограничение, наверное, можно
А можно не погружаться в алгоритмические пучины, а использовать VBA.Replace:
Код
Sub Test()
Dim aValue, r As Long, c As Long
'ActiveSheet.UsedRange.Replace "Рразд1", Range("A1").Value
With ActiveSheet
aValue = .UsedRange.Value
For r = LBound(aValue, 1) To UBound(aValue, 1)
For c = LBound(aValue, 2) To UBound(aValue, 2)
aValue(r, c) = Replace(aValue(r, c), "Рразд1", .Range("A1").Value, compare:=vbTextCompare)
Next
Next
.UsedRange.Value = aValue
End With
End Sub
Удалить из ячейки ненужные слова/символы
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
30.07.2024 09:28:20
Цитата
Можно загрузить на файлообменник
Не вижу смысла делать лишние телодвижения. Если хотите посмотреть файл с новой формулой - скопируйте мой предыдущий файл (по ссылке выше в этой теме) и вставьте формулу в ячейку C2.
Удалить из ячейки ненужные слова/символы
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
30.07.2024 09:01:12
Немного упростил формулу - сделал массивной (ввод по Ctrl-Shift-Enter):
Формула громоздкая получилась, ищет последнее вхождение цифры (0..9) и возвращает левую часть строки до него. Не на всех срабатывает (см. в самом конце, где дата прилепилась): "с Октябрьское 5-й пер А-Х Кадырова 12 Асовханов Руслан Увайсович/01/2024".
Выбрать номера телефонов из строки
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
30.07.2024 07:05:04
Выбрал по 1 телефону (встречаются по 2-3, но пока лень думать).
Замена HTML тегов на реальное форматирование (жирный, курсив)
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
30.07.2024 06:13:47
Цитата
Sanja, написал: Длина текста в ячейке не должна быть больше 255 символов. Ограничения Excel.
Ограничение Excel - 32К, а это какое-то непонятное ограничение от Characters().Delete.
Всем привет, соединил идею от sokol92, (заменив "<Cell><Data ss:Type=""String"">" на "<Data ss:Type=""String"">" - так у меня сработало) с перебором ячеек от Sanja,. Вот такой "кентаврик" получился.
Код
Sub Bold_Italic_Tags()
Dim iCell As Range
Dim iRng As Range
Dim s As String
On Error Resume Next
Application.ScreenUpdating = False
With ActiveSheet
'для изменения стилей шрифта выбран столбец 'A'
Set iRng = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
End With
For Each iCell In iRng
s = iCell.Value(xlRangeValueXMLSpreadsheet)
s = Replace(s, "<Data ss:Type=""String"">", "<ss:Data ss:Type=""String"" xmlns=""http://www.w3.org/TR/REC-html40"">", Compare:=vbTextCompare)
s = Replace(Replace(s, "<b>", "<B>", Compare:=vbTextCompare), "</b>", "</B>", Compare:=vbTextCompare)
s = Replace(Replace(s, "<i>", "<I>", Compare:=vbTextCompare), "</i>", "</I>", Compare:=vbTextCompare)
iCell.Value(xlRangeValueXMLSpreadsheet) = s
Next
Application.ScreenUpdating = True
End Sub
Создание новой книги с листом из старой + печать листов, vba. копия определенного листа из одной книги в другую и последующей печатью нескольких страниц из определенных листов.
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
29.07.2024 08:49:25
Цитата
нужно чтобы новая книга сохранялась на рабочем столе
VBE. Не открывается редактор VBA, Ошибка VBE6EXT.OLD could not be loaded
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
26.07.2024 06:28:01
Сам не сталкивался с таким.
Тут предлагают переименовать vbe6ext.olb (такое расширение) в vbe6ext.old (имитировать удаление) в папках: C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6 C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT. OLB
Далее запустить Excel, VBE и попробовать выполнить процедуру восстановления. Если не получится - попробовать скопировать C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB в C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB.
Тут предлагают скачать VBE6EXT.OLB:
Формула из формул в ячейке excel, Формула (ссылка на другой файл) собирается из значений других ячеек
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
25.07.2024 10:36:45
Цитата
Если макрос повесить на событие Worksheet_Calculate или Worksheet_Change, то это существенно замедлит работу (экспериментировал).
В файле Книга1.xlsm нет таких действий по событиям, нашёл лишь:
Код
Sub Макрос3()
ActiveCell.FormulaR1C1 = _
"=""='""&Кнопки!R9C2&""[""&Кнопки!R10C2&""]""&""1_В'!$C$6"""
'...
End Sub
В этом случае следует сначала проверять содержимое ActiveCell.FormulaR1C1 и менять его только при необходимости:
Код
sFormula = "=""='""&Кнопки!R9C2&""[""&Кнопки!R10C2&""]""&""1_В'!$C$6"""
If ActiveCell.FormulaR1C1 <> sFormula Then
ActiveCell.FormulaR1C1 = sFormula
End If
Формула из формул в ячейке excel, Формула (ссылка на другой файл) собирается из значений других ячеек
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
25.07.2024 08:10:51
Цитата
нужно не открывать файл, а вытащить значение
Работать с текстовой строкой как с адресом может только ДВССЫЛ(), но она может обращаться только к открытым книгам. Остаётся только вариант с макросом.
Правильное распределение веса по динамически обновляемым диапазонам (округление без хвостов)
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
25.07.2024 06:15:08
art_TD, приветствую. Формула в целом логичная. Я бы вот так переписал (убрал мешающие ограничения в строках типа $B$9999, разбил на строки Alt-Enter и работаю на копии листа ВЕС):
И у меня такой вопрос возник. На остатках в 1 коп. формула работает хорошо (10/3): 10-3*3,33 = 0,01. Результат: 3.34, 3.33, 3.33. А если будет такой вариант? 9/8 = 1,125 ≈ 1,13 9-8*1,13 = -0,04. Результат: 1,09 + 7 раз по 1,13. Или даже так: 270/240 = 1,125 ≈ 1,13 270-240*1,13 = -1,2. Первый результат будет отрицательным? Если такие варианты возможны в вашей задаче, давайте попробуем по-другому распределять копейки. UPD. Тогда вот так можно:
В A1 - строка времени вида: "12 час. 47 мин. 35 сек.", "1 ч 47 м 35 с", "1 ч. 47 мин.", "47 мин.", "47 м.", "35 сек.", "35 с.". Это чтобы получить время в часах, для числового формата. Чтобы получить время в нормальном виде (для формата Время "чч:мм:сс") - нужно убрать "24*".
Изменено: - 22.07.2024 12:53:41
Макрос. Копирование строк из одного листа одной книги в конец определенного листа другой книги
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
05.07.2024 07:30:02
zhlobus, добрый день. Отвечаю по вашей просьбе с другой темы.
У меня таких наработок по VBA нет, и сам я редко пишу на VBA. Даже если надёргать готовых кусочков кода с этого форума, то наверное целый день займёт написание (я нетороплив). И жалко не только само время, а ещё и то, что задача явно одноразово-специфичная, и впоследствии не вижу пользы для себя от неё.
Поэтому вижу 2 способа решения:
1. Простой и быстрый, но затратный - обратиться в раздел Работа.
Местные спецы помогут вам, причём скорость написания и качество кода будут на порядок выше, чем у меня.
2. Можно посмотреть в сторону моей программы (бесплатной), которая обновляет шаблонные XLS-файлы из других XLS-, TXT-файлов.
Что она в текущей версии не умеет (по вашей задаче):
добавлять в конец заполняемого листа (давно думал о такой возможности, но по моим практическим задачам это не нужно было).
обрабатывать книги с паролем - нужно обговорить подробнее, с примером.
В общем, это поправимо, можно будет внести в программу коррективы. Однако как быстро будет - не могу оценить.
Вот ссылка на программу:
Вот описание использования, с форума:
Цитата
Думаю пример файлов тут особо не нужен, ибо и так все понятно. Но если нужен, приложу.
Файлы-примеры нужны, и не забудьте про пароль.
Создать папку с именем ячейки, в эту папку сохранить открытую книгу
Пользователь
Сообщений: Регистрация: 08.12.2023
Excel 2016
02.07.2024 12:27:01
А сама папка "\\s-dat-03\personal$\azhloba\Desktop\25-КВ_ГТН_СД -Жлоба" создаётся командой MkDir? Если нет, то попробуйте вместо MkDir (она может чудить на сетевых путях):
Код
With CreateObject("Scripting.FileSystemObject")
.CreateFolder folderPath & oCell
End With