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

Страницы: 1 2 3 4 5 6 7 8 9 След.
Формула для массива с суммами и датами
 
Цитата
Коллеги, перепробовал все данные тут способы
DMA1, добрый день.
Может быть, вас массивные формулы смущают?
Заменил не-массивными (которые на самом деле не совсем не-массивные) - взял заполненный пример у ув.Ham13.
Код
=ЕСЛИОШИБКА(--ИНДЕКС($4:$4;; СУММПРОИЗВ(НАИБОЛЬШИЙ(($I5:$ZZ5>0)*СТОЛБЕЦ($I5:$ZZ5); СЧЁТ($I5:$ZZ5)))); "")
=ЕСЛИОШИБКА(--ИНДЕКС($4:$4;; СУММПРОИЗВ(НАИБОЛЬШИЙ(($I5:$ZZ5>0)*СТОЛБЕЦ($I5:$ZZ5); 1))); "")
Формат текста при функции ВПР
 
Поправил код UDF-функции: может работать с объединёнными ячейками.
Использование:
Код
=ИНДЕКС_В(Ячейка_приемник; Ссылка; Номер_строки; Номер_столбца)
Ячейка_приемник - куда копировать.
Ссылка, Номер_строки, Номер_столбца - параметры как в функции ИНДЕКС().
Пример - в A9 (копирует в B9 полное содержимое Bnn, где nn - результат поиска A6 в столбце A, здесь B1):
Код
=ИНДЕКС_В(B9; B:B; ПОИСКПОЗ($A$6; A:A; 0))
Код функции:
Скрытый текст
проверка на полный расчёт формул эксель
 
Видимо, вот это:
Код
If Application.CalculationState = xlDone Then 
 MsgBox "Done" 
 Else 
 MsgBox "Not Done" 
 End If
Удалить часть строки после символа, обрезать left mid
 
Кстати, да, Павел \Ʌ/, спасибо за подсказку про не-массивную формулу!
Но я бы написал так:
Код
=СУММПРОИЗВ(--(ЛЕВСИМВ(B4:B6; ПОИСК("+"; B4:B6&"+")-1)&ПСТР(1/2;2;1)&"0"))
  1. Не зависит от кол-ва "+" в ячейках - всегда берётся левая часть: 100+200+300 => 100.
  2. Допускает отрицательные числа: -100+200+300 => -100.
  3. Не зависит от системного разделителя дробной части (например, у меня точка).
Формат текста при функции ВПР
 
Это-то да, но по F9 всё обновится.
Ошибка с библиотеками
 
Цитата
Попробовал и на версии 3.0 и 6.0  
А в "Tools - References" убрали чек со строки "MISSING: Microsoft XML 2.0"?
Макрос импорта строк из txt-файла
 
Цитата
написал:
Дайте, пожалуйста код без этой функции (L1)
Вот.
Формат текста при функции ВПР
 
Всем привет.
Если чуть глобальнее подойти - можно небольшую функцию сделать.
Код
=ИНДЕКС_В(Ячейка_приемник; Ссылка; Номер_строки; Номер_столбца)
Ячейка_приемник - куда копировать.
Ссылка, Номер_строки, Номер_столбца - параметры как в функции ИНДЕКС().

Пример - в A9 (копирует в B9 полное содержимое Bnn, где nn - результат поиска A6 в столбце A, здесь B1):
Код
=ИНДЕКС_В(B9; B:B; ПОИСКПОЗ($A$6; A:A; 0))
Код функции:
Код
Function ИНДЕКС_В(Ячейка As Range, Ссылка As Range, Optional Номер_строки As Long, Optional Номер_столбца As Long)
Application.Volatile ' для отслеживания изменений формата ячейки
    
    Dim lResult As Boolean
    
    lResult = (Номер_строки >= 0 And Номер_столбца >= 0 And Номер_строки + Номер_столбца > 0)
    lResult = lResult And (Номер_строки <= Ссылка.Rows.Count And Номер_столбца <= Ссылка.Columns.Count)
    
    Номер_строки = Номер_строки - 1
    Номер_столбца = Номер_столбца - 1
    '?( поведение ИНДЕКС(ссылка;строка;), ИНДЕКС(ссылка;;столбец)
    If Номер_строки < 0 Then Номер_строки = 0
    If Номер_столбца < 0 Then Номер_столбца = 0
    ')
    
    If lResult Then
        With Ссылка.Offset(Номер_строки, Номер_столбца)
            Ячейка.Value(xlRangeValueXMLSpreadsheet) = .Value(xlRangeValueXMLSpreadsheet)
            ИНДЕКС_В = .Value
        End With
    Else
        Ячейка.Value = WorksheetFunction.NA()
    End If

End Function
Изменено: andypetr - 15.05.2024 09:32:28
Ошибка с библиотеками
 
Подключусь к "Битве экстрасенсов"...
Может, попробовать убрать раннее связывание в заголовке?

Private Sub doLoadColumn( _
pColumnElem As Object, _
Optional pSetupColumnElem As Object = Nothing, _
Optional setupPresent As Boolean = False _
)
Макрос импорта строк из txt-файла
 
Chelovek, добрый день.
Хоть код и не мой, внёс правки.
В L1 сохраняется имя выбранного файла.
Если там пусто или файл не найден - появляется окно выбора файла.
Удалить часть строки после символа, обрезать left mid
 
Код
{=СУММ(ЕСЛИОШИБКА(--ЛЕВСИМВ(B4:B6; ПОИСК("+"; B4:B6&"+")-1); 0))}
А ваша формула превращает:
155+100 => 155155100
100+200 => 100100200
100         => 0
Изменено: andypetr - 15.05.2024 06:45:16
Формирование списка с уникальными значениями
 
Цитата
написал:
вы удивитесь, насколько вы не правы
Жду примера-сюрприза с нетерпением!  ;)
С наступающим Праздником!  
Ускорение расчета путем отказа от использования Select и расчет внутри макроса вместо расчета формулой
 
Пардоньте! Я хотел как лучше, а получилось как всегда! :)
Ускорение расчета путем отказа от использования Select и расчет внутри макроса вместо расчета формулой
 
Евгений Смирнов, или даже так - для копирования значений (не портим буфер обмена):
Код
Sub aaaвв()

    Range("P4").AutoFill Destination:=Range("P4").Resize(Range("A4").End(xlDown).Row - Range("P4").Row + 1) 'растянуть формулу
    Calculate 'пересчитать

    Range(Range("P5"), Range("P5").End(xlDown)) = Range(Range("P5"), Range("P5").End(xlDown)).Value

End Sub
Как сделать так, чтобы принтер не оставлял на странице одну-две строки?
 
Цитата
есть какая-то штатная команда в Эксель, удаляющая разрывы
"Разметка страницы - Разрывы - Сброс разрывов страниц".
Но в вашем случае, когда разрывы проставлены принудительно перед началом листов, лучше установить "Вид - Страничный режим" и скрыть пустые строки, которые "вылазят" за пунктирные линии, обозначающие переход на новый лист при печати.
Подстановка данных
 
В C2:
Код
=ЕСЛИ(B2=0; ЕСЛИОШИБКА(ИНДЕКС(E:E; ПОИСКПОЗ(C1;E:E;0)+1); E$2); C1)
Формирование списка с уникальными значениями
 
По-моему, "WorksheetFunction." излишество, можно использовать "Application.":
Код
Debug.Print "[" & Application.WorksheetFunction.Trim(" 12    345 ") & "]"    '[12 345]
Debug.Print "[" & Application.Trim(" 12    345 ") & "]"                      '[12 345]
Debug.Print "[" & Trim(" 12    345 ") & "]"                                  '[12    345]
Поправлюсь: после "WorksheetFunction." появляется список всех функций, поэтому его использование удобнее.
Но можно без "Application.":
Код
Debug.Print "[" & WorksheetFunction.Trim(" 12    345 ") & "]" '[12 345]
Изменено: andypetr - 07.05.2024 08:12:25
СЧЕТЕСЛИМН игнорирует условие "<>"&ТЕКСТ.
 
Код
=СЧЁТЕСЛИМН(D:D;H3;C:C;"<>2024*";C:C;"<>2024")
Забыл дописать Дисклеймер: "Формула не является универсальной и не содержит в себе решение всех проблем человечества."  ;)  
Выбор значения из таблицы по нескольким параметрам, находящихся в диапазоне
 
Вроде тоже работает, не массивная:
Код
=ПРОСМОТР(1; 1/(($I$3:$I$7=A3)*($J$3:$J$7<=B3)*($K$3:$K$7>=B3)); $L$3:$L$7)
СЧЕТЕСЛИМН игнорирует условие "<>"&ТЕКСТ.
 
Вариант:
Код
=СЧЁТЕСЛИМН(D:D;H3;C:C;"<>2024*")
Автоматический график сменности
 
natysik-333, добрый день.
Чтобы не усложнять формулы, я добавил лист График, в котором по своему разумению расписал выходы смен в день и ночь.
С 17.03.24:
2222: ДД ВВ НН ВВ...
2221: НН ВВ ДД ВВ ...
2219: ВВ ДД ВВ НН...
2220: ВВ НН ВВ ДД ...
А на рабочем листе Лист1 смены выставляются формулой по времени начала простоя.
Потом можно попробовать реализовать дальнейшие "хотелки":
Цитата
Но потом еще нужно будет связать их с производственными сменами, с которыми они пересекаются.
Объединение данных с одной таблицы в другую
 
ktyehf, добрый день.
По-моему, в том файле, который вы приложили, всё верно отрабатывает.
Из списка на листе Лист11 только Борщов есть на листе "выписка".
Добавил несколько человек из Лист11 в Выписку - по ним выходят суммы.

Только формулу слегка видоизменил + ещё нужно учитывать нижние границы Выписки, которые я сделал с избытком "9999" (см. выписка!E$12:E$9999, выписка!N$12:N$9999):
Код
=СУММПРОИЗВ(СЧЁТЕСЛИ(A4; СЖПРОБЕЛЫ(ПОДСТАВИТЬ(СТРОЧН(ПРАВБ(ПОДСТАВИТЬ(
выписка!E$12:E$9999; СИМВОЛ(10); ПОВТОР(" "; 99); 2); 99)); "индивидуальный предприниматель"; ""))&"*");
выписка!N$12:N$9999)
СУММПРОИЗВ позволяет записывать не-массивные формулы.
Добавление формулы каждый месяц с разрывами данных
 
Цитата
не думал, что эксель считывает последовательность каждого месяца через двоеточие
В формуле  =СУММ(Январь:Декабрь!C6) Эксель "считывает" не месяцы, а ячейки C6 с листов: "Январь", промежуточные листы, "Декабрь". Порядок листов очень важен, все другие листы должны находиться между указанными в формуле.
Имена промежуточных листов не важны - можно осмысленно назвать ("Февраль", ..., "Ноябрь"), можно оставить "Лист2", ..., "Лист11" - главное, чтобы они располагались между листов-границ, указанных в формуле.

Цитата
Что касается создания пустых листов с названием месяцев, к сожалению, формула сбивается и значение пишется "0"
При соблюдении вышеописанных условий ничего не должно сбиваться.
Замена однотипных задач на одну, Оптимизация макроса
 
mitya528, меня продолжает смущать неопределённость: Cells(Rows.Count, 25).End(xlUp).Row - это же к активному листу относится?
Может, лучше явно указать лист: Sheets("ИмяЛиста").Cells(Rows.Count, 25).End(xlUp).Row?

PS. Можно не считать номер столбца, а явно указывать букву: Cells(Rows.Count, "Y").End(xlUp).Row.
Изменено: andypetr - 02.05.2024 12:01:10
Замена однотипных задач на одну, Оптимизация макроса
 
Код
For iColOffset = 1 To 7 ' для 7 складов
    With Sheets("Доп")
        nYlast = Cells(Rows.Count, 25).End(xlUp).Row
        '??? или nYlast = Sheets("Склады").Cells(Rows.Count, 25).End(xlUp).Row
        .Range("DM" & n).Offset(0, iColOffset - 1) = _
            WorksheetFunction.Index(Sheets("Склады").Range("Y2:AG" & nYlast), _
            WorksheetFunction.Match(.Range("B" & n), Sheets("Склады").Range("Y2:Y" & nYlast), 0), _
            WorksheetFunction.Match(.Range("DM2").Offset(0, iColOffset - 1), Sheets("Склады").Range("Y1:AG1"), 0))
    End With
Next iColOffset
Сводная таблица. Сохранение шаблона, Создать шаблон сводной таблицы
 
tanya-22-77, добрый день.

Мой способ работы с шаблоном:
  • Лист Данные: хранит данные для сводной и организован максимально удобно для создания сводной: 1-я строка - заголовки столбцов, начиная со 2-ой строки - данные.
  • Лист Свод: сама сводная таблица.
В качестве источника данных для сводной я ссылаюсь на целые столбцы: "Данные!$A:$M" (при таком подходе в сводной появляется некрасивая строка "(пусто)", которую можно скрыть фильтром).

Для обновлении данных в шаблоне я переписываю целиком столбцы листа Данные из нового отчёта.
После чего нужно обновить сводную.
Эти 2 шага (если разом обновляются много файлов) можно автоматизировать - я на форуме уже давал ссылку на свою программу "TXT-XLS конвертация".
[ Закрыто] Написать макрос, макрос: напечатать файл и вместить всё в 1 лист.
 
Комбинации для макросов зависят от раскладки.
Если задать Ctrl-т и нажимать на английской раскладке, то сработает Ctrl-N (Новая книга).
[ Закрыто] Написать макрос, макрос: напечатать файл и вместить всё в 1 лист.
 
Макрорекордер не подходит?
Код
Sub Макрос1()
    With ActiveSheet.PageSetup
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    ActiveSheet.PrintOut
End Sub
Ввод данных из ячейки одного листа в ячейку другого листа
 
Разбить CT на 2 столбца: CT и CU.
Формула останется универсальной, в CT6:
Код
=ЕСЛИ(ИЛИ(ПЕЧСИМВ(CT$1)="Сумма за неделю"; И(CT$1=""; ПЕЧСИМВ(CS$1)="Сумма за неделю")); 
СУММЕСЛИ(CF$2:CS$2; ЕСЛИ(CT$1="";"Факт";"План"); CF6:CS6);
ИНДЕКС(Выполнение!$1:$1048576; СТРОКА(); (CT$1="")+ПОИСКПОЗ(ЕСЛИ(CT$1="";CS$1;CT$1); Выполнение!$1:$1; 0)))
Как посчитать ячейки с #N/A?, Как посчитать ячейки с #N/A?
 
Наверное, считать значения ошибки?
Код
=СЧЁТЕСЛИ(B:B; "#N/A")
=СЧЁТЕСЛИ(B:B; "#Н/Д")
Страницы: 1 2 3 4 5 6 7 8 9 След.
Наверх