Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 13 След.
Правильное распределение веса по динамически обновляемым диапазонам (округление без хвостов)
 
Добрый день!
В K2:
Код
=ЕСЛИ(СЧЁТЕСЛИМН($G:$G;$G2;$D:$D;">0") = СЧЁТЕСЛИМН($G:$G;$G2); $D2; ОКРУГЛ($J2*$C2;2))
Если позиций с заполненным вес-брутто (столбец D) столько же, сколько всего позиций (столбец G), то берём готовый вес-брутто, иначе вычисляем.
Правильное распределение веса по динамически обновляемым диапазонам (округление без хвостов)
 
Исправил столбец Q (чтобы минимум 0.01 разница была), формула даже проще стала, до этого чуть перемудрил.
Правильное распределение веса по динамически обновляемым диапазонам (округление без хвостов)
 
Исправил столбцы K (чтобы минимум 0.01 разница была) и Q.
Правильное распределение веса по динамически обновляемым диапазонам (округление без хвостов)
 
art_TD, приветствую.
Цитата
Проблема в том, что при обратном суммировании веса брутто отдельных строк (для проверки), вылезает хвост (на примере это 0,02 кг).
См. колонки Q и R.
В Q распределяется хвост (M) по 0.01 для первых строк, где "Разница между Н и Б" отлична от нуля.

Цитата
А вторая проблема - у некоторых строк нетто и брутто не отличаются - например, 0,16 кг (а такого не должно быть).
0,16 * 1,030264005 = 0,1648422408 = 0,16 (в столбце K стоит округление до 2-х знаков).
Правильное распределение веса по динамически обновляемым диапазонам (округление без хвостов)
 
Добрый день.
А можете прислать файл, где связка ПРОСМОТР+ВПР дает результат, отличающийся от ВПР?
Надстройка "nerv_DropDownList_1.6", мелкие неудобства
 
apfu,  приветствую.
Могу ошибаться, но мне кажется, что вы последние (2024 г.) сообщения в теме не читали.
Правильное распределение веса по динамически обновляемым диапазонам (округление без хвостов)
 
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 условия
 
Цитата
"Переносы" в дальнейшем будут в последующем также учитываться при производстве..их нужно будет выделять или отмечать другими цветами.
См. файл (формулы в декабре).
применение условного форматирования за исключением 1 условия
 
Я вместо И/ИЛИ использую */+, для краткости.
В арифметических выражениях ИСТИНА=1, ЛОЖЬ=0.
Функция ЕСЛИ воспринимает 0 как ЛОЖЬ, любое другое число как ИСТИНА.
Запись:
Код
=ЕСЛИ(((ДЕНЬНЕД(GI2;2)>5)+ЕЧИСЛО(ВПР(GI2;настройка!$A:$A;1;0))+ЕЧИСЛО(ВПР(GI2;настройка!$C:$C;1;0)))*(1-ЕЧИСЛО(ВПР(GI2;настройка!$E:$E;1;0))); "*"; "")
эквивалентна:
Код
=ЕСЛИ(И(ИЛИ(ДЕНЬНЕД(GI2;2)>5;ЕЧИСЛО(ВПР(GI2;настройка!$A:$A;1;0));ЕЧИСЛО(ВПР(GI2;настройка!$C:$C;1;0)));НЕ(ЕЧИСЛО(ВПР(GI2;настройка!$E:$E;1;0)))); "*"; "")
"1-ЕЧИСЛО(...)" = "НЕ(ЕЧИСЛО(...))", т.к. даёт 1 при ЕЧИСЛО()=ЛОЖЬ и 0 при ЕЧИСЛО()=ИСТИНА.
применение условного форматирования за исключением 1 условия
 
Следует избегать размещения в формулах УФ сложных вычислений.
Это приводит к головной боли при отладке и к тормозам на больших данных.
Вместо этого выделяйте под формулы столбец/строку и в УФ ссылайтесь на готовый результат.
Заполнил для примера декабрь (1-я строка идеально подошла).
автоматическое опредение нужного диапазона поиска
 
На закрытых файлах многие функции не работают, в т.ч. те функции, которыми можно удобно адресовать вычисляемый диапазон (ИНДЕКС и ДВССЫЛ).
Набросал ещё вариант, но работать он будет при сортированном столбце [2.xlsx]Sheet1!$B:$B (как в вашем примере).

PS. Обратите внимание, что формулы, начинающиеся с "=ПОИСКПОЗ(..." - массивные (вводятся через Ctrl-Shift-Enter).
А вот формулу "=СУММПРОИЗВ(..." можно вводить как обычную, т.к. функция СУММПРОИЗВ() сама массивная.
В обоих случаях нужно ограничивать размер массивов: пишем $B1:$B999 для обработки 999 строк (с запасом).
Если не указываем размер ($B:$B), то обычные формулы работают с заполненным диапазоном листа (34 строки в 2.xlsx), а массивные обработают все доступные строки (1048576), что приведёт к сильным тормозам.
Поиск значения в заданном массиве по ряду условий
 
С доп. столбцом - так проще и яснее.
автоматическое опредение нужного диапазона поиска
 
См. цветные формулы в M20:M21.
В формулы не погружался (да и ПРОСМОТРX у меня нет).

Насколько я понял, нужно отвязаться от явных B1:B17 в формуле:
Код
{=ПОИСКПОЗ(МИН(ЕСЛИ(
[2.xlsx]Sheet1!$B$1:$B$17 > H2;
[2.xlsx]Sheet1!$B$1:$B$17));
[2.xlsx]Sheet1!$B$1:$B$17; 0)}
Формула по четырем условиям сложный критерий
 
См. файл.
Заказы за месяц собираются с дневных листов 01, 02, ..., 31.
VBA usedrange.replace выдает ошибку 13 Неверный тип, при изменении текста на простой все работает
 
Цитата
кстати, обойти ограничение, наверное, можно
А можно не погружаться в алгоритмические пучины, а использовать 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
Удалить из ячейки ненужные слова/символы
 
Цитата
Можно загрузить на файлообменник
Не вижу смысла делать лишние телодвижения.
Если хотите посмотреть файл с новой формулой - скопируйте мой предыдущий файл (по ссылке выше в этой теме) и вставьте формулу в ячейку C2.
Удалить из ячейки ненужные слова/символы
 
Немного упростил формулу - сделал массивной (ввод по Ctrl-Shift-Enter):
Код
=ЛЕВСИМВ(B2; МАКС(ЕСЛИОШИБКА(ПОИСК(СИМВОЛ(2); ПОДСТАВИТЬ(B2; СТРОКА($A$1:$A$10)-1; СИМВОЛ(2); ДЛСТР(B2) - ДЛСТР(ПОДСТАВИТЬ(B2; СТРОКА($A$1:$A$10)-1; "")))); 0)))

Потом усложнил, чтобы учитывать индексы домов: "23а", "23 а", "23/а" (также ввод по Ctrl-Shift-Enter):
Код
=ЛЕВСИМВ(СЖПРОБЕЛЫ(B2); МАКС(ЕСЛИОШИБКА(
ПОИСК(СИМВОЛ(2); ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; СИМВОЛ(2); ДЛСТР(СЖПРОБЕЛЫ(B2)&" ") - ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; "")))) + ЕСЛИ(("А"<=ПСТР(СЖПРОБЕЛЫ(B2)&" ";
ПОИСК(СИМВОЛ(2); ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; СИМВОЛ(2); ДЛСТР(СЖПРОБЕЛЫ(B2)&" ") - ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; ""))))+1; 1))*("Я">=ПСТР(СЖПРОБЕЛЫ(B2)&" ";
ПОИСК(СИМВОЛ(2); ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; СИМВОЛ(2); ДЛСТР(СЖПРОБЕЛЫ(B2)&" ") - ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; ""))))+1; 1)); 1; ЕСЛИ(((" "=ПСТР(СЖПРОБЕЛЫ(B2)&" ";
ПОИСК(СИМВОЛ(2); ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; СИМВОЛ(2); ДЛСТР(СЖПРОБЕЛЫ(B2)&" ") - ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; ""))))+1; 1))+("/"=ПСТР(СЖПРОБЕЛЫ(B2)&" ";
ПОИСК(СИМВОЛ(2); ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; СИМВОЛ(2); ДЛСТР(СЖПРОБЕЛЫ(B2)&" ") - ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; ""))))+1; 1)))*(" "=ПСТР(СЖПРОБЕЛЫ(B2)&" ";
ПОИСК(СИМВОЛ(2); ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; СИМВОЛ(2); ДЛСТР(СЖПРОБЕЛЫ(B2)&" ") - ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; ""))))+3; 1))*("А"<=ПСТР(СЖПРОБЕЛЫ(B2)&" ";
ПОИСК(СИМВОЛ(2); ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; СИМВОЛ(2); ДЛСТР(СЖПРОБЕЛЫ(B2)&" ") - ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; ""))))+2; 1))*("Я">=ПСТР(СЖПРОБЕЛЫ(B2)&" ";
ПОИСК(СИМВОЛ(2); ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; СИМВОЛ(2); ДЛСТР(СЖПРОБЕЛЫ(B2)&" ") - ДЛСТР(ПОДСТАВИТЬ(СЖПРОБЕЛЫ(B2)&" "; СТРОКА($A$1:$A$10)-1; ""))))+2; 1)); 2; 0));
0)))

PS. Файл большой, не прикрепляется.
Удалить из ячейки ненужные слова/символы
 
Формула громоздкая получилась, ищет последнее вхождение цифры (0..9) и возвращает левую часть строки до него.
Не на всех срабатывает (см. в самом конце, где дата прилепилась):
"с Октябрьское 5-й пер А-Х Кадырова 12 Асовханов Руслан Увайсович/01/2024".
Выбрать номера телефонов из строки
 
Выбрал по 1 телефону (встречаются по 2-3, но пока лень думать).
Замена HTML тегов на реальное форматирование (жирный, курсив)
 
Цитата
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&quot;&quot;&gt;&quot;, Compare:=vbTextCompare)
        s = Replace(Replace(s, "&lt;b&gt;", "<B>", Compare:=vbTextCompare), "&lt;/b&gt;", "</B>", Compare:=vbTextCompare)
        s = Replace(Replace(s, "&lt;i&gt;", "<I>", Compare:=vbTextCompare), "&lt;/i&gt;", "</I>", Compare:=vbTextCompare)
        iCell.Value(xlRangeValueXMLSpreadsheet) = s
    Next
    
    Application.ScreenUpdating = True
End Sub
Создание новой книги с листом из старой + печать листов, vba. копия определенного листа из одной книги в другую и последующей печатью нескольких страниц из определенных листов.
 
Цитата
нужно чтобы новая книга сохранялась на рабочем столе
Код
ThisWorkbook.Path
замените на:
Код
CreateObject("WScript.Shell").SpecialFolders.Item("Desktop")
VBE. Не открывается редактор VBA, Ошибка VBE6EXT.OLD could not be loaded
 
Сам не сталкивался с таким.

Тут предлагают переименовать 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.

https://answers.microsoft.com/en-us/msoffice/forum/all/excel-vba-not-working/da9d9819-66ea-4261-8840...

Тут предлагают скачать VBE6EXT.OLB:
https://www.solvusoft.com/en/files/error-missing-download/olb/windows/microsoft/office/vbe6ext-olb/
Формула из формул в ячейке excel, Формула (ссылка на другой файл) собирается из значений других ячеек
 
Цитата
Если макрос повесить на событие 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, Формула (ссылка на другой файл) собирается из значений других ячеек
 
Цитата
нужно не открывать файл, а вытащить значение
Работать с текстовой строкой как с адресом может только ДВССЫЛ(), но она может обращаться только к открытым книгам.
Остаётся только вариант с макросом.
https://www.excel-vba.ru/chto-umeet-excel/kak-poluchit-dannye-iz-zakrytoj-knigi/
Правильное распределение веса по динамически обновляемым диапазонам (округление без хвостов)
 
art_TD, приветствую.
Формула в целом логичная.
Я бы вот так переписал (убрал мешающие ограничения в строках типа $B$9999, разбил на строки Alt-Enter и работаю на копии листа ВЕС):
Код
=ОКРУГЛ(
ВПР($B2;ВЕС_Тест!$A:$F;6;0) / СЧЁТЕСЛИ($B:$B;$B2) + ЕСЛИ(СЧЁТЕСЛИ($B$1:$B2;$B2)=1;
ВПР($B2;ВЕС_Тест!$A:$F;6;0) - СЧЁТЕСЛИ($B:$B;$B2) * ОКРУГЛ(
ВПР($B2;ВЕС_Тест!$A:$F;6;0) / СЧЁТЕСЛИ($B:$B;$B2); 2); 0); 2)
И у меня такой вопрос возник.
На остатках в 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. Тогда вот так можно:
Код
=ОКРУГЛ(
ВПР($B2;ВЕС_Тест!$A:$F;6;0) / СЧЁТЕСЛИ($B:$B;$B2) + ЕСЛИ(СЧЁТЕСЛИ($B$1:$B2;$B2) <= ОКРУГЛ(ABS(100*(
ВПР($B2;ВЕС_Тест!$A:$F;6;0) - СЧЁТЕСЛИ($B:$B;$B2) * ОКРУГЛ(
ВПР($B2;ВЕС_Тест!$A:$F;6;0) / СЧЁТЕСЛИ($B:$B;$B2); 2))); 0); ЗНАК(
ВПР($B2;ВЕС_Тест!$A:$F;6;0) - СЧЁТЕСЛИ($B:$B;$B2) * ОКРУГЛ(
ВПР($B2;ВЕС_Тест!$A:$F;6;0) / СЧЁТЕСЛИ($B:$B;$B2); 2)) / 100; 0); 2)
Изменено: andypetr - 25.07.2024 08:00:58
Как преобразовать 1 ч. 47 мин. в 1,78?
 
Цитата
Этот вариант не "осилила", выдает #ЗНАЧ.
Перемудрил с универсальностью (системные разделители дробной части), так должно работать:
Код
=24*СУММ(ПСТР(0&A1&"00000";ПОИСК({" ч";" м";" с"}; 0&A1&"-- ч м с")-2;2)/24/60^{0;1;2})
как в ВПР искать по второму значению, как в ВПР искать по второму значению
 
Вместо ВПР() - ИНДЕКС(ПОИСКПОЗ()+ПОИСКПОЗ()):
Код
=ИНДЕКС(B:B; ПОИСКПОЗ(G2;C:C;0) + ПОИСКПОЗ(G2; ИНДЕКС(C:C; ПОИСКПОЗ(G2;C:C;0)+1):ИНДЕКС(C:C;ЧСТРОК(C:C)); 0))
Как преобразовать 1 ч. 47 мин. в 1,78?
 
Идея не моя, добрые люди уже тут на форуме писали:
Код
=24*СУММ((ПСТР(0&A1; ПОИСК({" ч";" м";" с"}; 0&A1&"-- ч м с")-2; 2) & ТЕКСТ(0;".0"))/24/60^{0;1;2})
В A1 - строка времени вида: "12 час. 47 мин. 35 сек.", "1 ч 47 м 35 с", "1 ч. 47 мин.", "47 мин.", "47 м.", "35 сек.", "35 с.".
Это чтобы получить время в часах, для числового формата.
Чтобы получить время в нормальном виде (для формата Время "чч:мм:сс") - нужно убрать "24*".
Изменено: andypetr - 22.07.2024 12:53:41
Макрос. Копирование строк из одного листа одной книги в конец определенного листа другой книги
 
zhlobus, добрый день.
Отвечаю по вашей просьбе с другой темы.

У меня таких наработок по VBA нет, и сам я редко пишу на VBA.
Даже если надёргать готовых кусочков кода с этого форума, то наверное целый день займёт написание (я нетороплив).
И жалко не только само время, а ещё и то, что задача явно одноразово-специфичная, и впоследствии не вижу пользы для себя от неё.

Поэтому вижу 2 способа решения:

1. Простой и быстрый, но затратный - обратиться в раздел Работа.

Местные спецы помогут вам, причём скорость написания и качество кода будут на порядок выше, чем у меня.

2. Можно посмотреть в сторону моей программы (бесплатной), которая обновляет шаблонные XLS-файлы из других XLS-, TXT-файлов.

Что она в текущей версии не умеет (по вашей задаче):
  • добавлять в конец заполняемого листа (давно думал о такой возможности, но по моим практическим задачам это не нужно было).
  • обрабатывать книги с паролем - нужно обговорить подробнее, с примером.
В общем, это поправимо, можно будет внести в программу коррективы.
Однако как быстро будет - не могу оценить.

Вот ссылка на программу:
https://www.dropbox.com/scl/fi/ax2z73ue6oh0lnjt56oa2/TXT-XLS-1-80b.exe?rlkey=lwssvjdm140dbt8nilaqlxx...

Вот описание использования, с форума:
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=162115&a...

Цитата
Думаю пример файлов тут особо не нужен, ибо и так все понятно. Но если нужен, приложу.
Файлы-примеры нужны, и не забудьте про пароль.
Создать папку с именем ячейки, в эту папку сохранить открытую книгу
 
А сама папка "\\s-dat-03\personal$\azhloba\Desktop\25-КВ_ГТН_СД -Жлоба" создаётся командой MkDir?
Если нет, то попробуйте вместо MkDir (она может чудить на сетевых путях):
Код
With CreateObject("Scripting.FileSystemObject")
    .CreateFolder folderPath & oCell
End With
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 13 След.
Loading...