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

Страницы: 1
Несколько условий в формуле
 
Добрый день!

В работе использую следующую формула:
Код
=ЕСЛИ(ИЛИ(RC[-15]="ООО ""123""";RC[-14]="ООО ""123""");"ООО ""123""";
ЕСЛИ(ИЛИ(RC[-15]="ООО ""456""";RC[-14]="ООО ""456""");"ООО ""456""";
ЕСЛИ(ИЛИ(RC[-15]="ООО ""789""";RC[-14]="ООО ""789""");"ООО ""789""";"")))

Пытаюсь автоматизировать работу в excel, и необходимо чтобы эта формула вставлялась в ячейку при выполнении макроса.
Однако в коде vba выскакивает ошибка, перебрал уже кучу вариаций, проблему так и не решил. Прошу помощи в решении вопроса.
Код
=IF(OR(RC[-15]=""ООО ""123"",RC[-14]=""ООО ""123""),""ООО ""123"",
IF(OR(RC[-15]=""ООО ""456"",RC[-14]=""ООО ""456""),""ООО ""456"",
IF(OR(RC[-15]=""ООО ""789"",RC[-14]=""ООО ""789""),""ООО ""789"";"""")))
Вывод в msgbox текст из ячяек
 
Добрый день!

Есть макрос, который по столбцу "М" осуществляет поиск по ключевому слову "Оставлено без движения". Найдя, ячейки, в которых есть указанное словосочетание необходимо вывести в msgbox текст из ячеек столбца "J".
Т.е. если макрос нашел, что в ячейках "М9" и "М11" содержится "Оставлено без движения", то в msgbox выводится текст из ячеек "J9" и "J11".
В настоящее время получилось только добиться, что макрос дает ссылки на ячейки в которых осуществляет поиск.
Код
Sub FindererBezDvizheniya()
Dim FD, firstAddress, adrs
FD = "Оставлено без движения"
If FD = "" Then Exit Sub
Dim c As Range: Set c = Range("M:M").Find(FD)

If c Is Nothing Then MsgBox "В базе данных excel отсутствуют признаки о наличии заявлений, оставленных без движения!", vbInformation: Exit Sub
firstAddress = c.Address
c.Select
Do
    adrs = adrs & vbLf & c.Address(0, 0)
    Union(Selection, c).Select
    Set c = Range("M:M").FindNext(c)
Loop While c.Address <> firstAddress

MsgBox "Имеются дела с признаком """ & FD & """" _
& vbCr & "" _
& vbCr & "В связи с этим рекомендуется проверить сроки и устранить недостатки!" _
& vbCr & "" _
& vbCr & adrs, vbExclamation
End Sub
Изменено: SevenZZ - 09.04.2022 20:37:18
Несколько логический условий в формуле
 
Добрый день!
Написал следующую формулу:
Код
=ЕСЛИ(ИЛИ(M9="В удовлетворении требований отказано";M9="Требования удовлетворены частично")*И(ИЛИ(O9="Подана АЖ";O9="Подана КЖ"));"Снято с контроля";"Контроль подачи АЖ/КЖ")
Все работает, но в ячейки "M9"  могут быть другие значения (т.е. те, которые не прописаны в формуле), в связи с этим не могу сообразить как переписать формулу, чтобы при любом другом значении из ячейки "M9" формула отражала результат пустоты (""), а не как сейчас "Контроль подачи АЖ/КЖ"

Если короче, то если в ячейке "M9" выбрано "В процессе", то в ячейке "N9" должно быть пусто.

Кто подскажет или поможет в корректировке формулы.
Цикл по строкам отфильтрованного списка, Оптимизация макроса
 
Добрый день!
Имеется макрос, который необходимо оптимизировать.
Оптимизация заключается в следующем.
При выполнении макроса, отфильтрованные строки (скрытые строки / невидимые), должны пропускаться, и как следствие не выводится в элемент формы ListView. Т.е. обрабатыванию подлежат только те строки, которые отражаются.
Бюджет 700 ₽.
Фильтрация данных в элементе ListView
 
Здравствуйте!
Использую в работе элемент ListView.
И возник вопрос, можно ли реализовать в нем фильтр? На сколько это сложно?
Необходимо чтобы фильтр был на дату и исполнителя.
Изменено: SevenZZ - 13.03.2021 17:24:55
При переводе функций из кириллических названий на английские формула не работает
 
Всем доброе утро!
Написал для использования в работе русскоязычную формулу
Код
=ЕСЛИ(И(A2=1;ЕПУСТО(B2));"Необходимо подписать";"")
Все работает, но теперь нужна эта же формула в англоязычном формате.
Пробовал так:
Код
=IF(AND(A2=1,ISBLANK(B2)),"Необходимо подписать","")
Но формула не работает. Кто подскажет, что не так?
Запуск Word из Excel поверх всех окон
 
Здравствуйте!
Для запуска документа word из Excel использую несколько макросов:
Код
‪Sub Zapusk_Word_iz_Excel()
Dim objWrdApp As Object
Dim objWrdDoc As Object
On Error Resume Next
Set objWrdApp = GetObject(, "Word.Application")
If objWrdApp Is Nothing Then
Set objWrdApp = CreateObject("Word.Application")
Set objWrdDoc = objWrdApp.Documents.Open("C:\Users\mrche\Desktop\1.docx")
objWrdApp.Visible = True
End If
Set objWrdDoc = objWrdApp.Documents.Open("C:\Users\mrche\Desktop\1.docx")
Set objWrdDoc = Nothing
Set objWrdApp = Nothing
End Sub
Код
Sub Zapusk_Word_iz_Excel2()
Dim objWord As Object, objDocument As Object
    Set objWord = CreateObject("word.application")
    Set objDocument = objWord.Documents.Open(Filename:="C:\Users\mrche\Desktop\1.docx")
    objWord.Visible = True
    Set objDocument = Nothing: Set objWord = Nothing
End Sub
Но открываемый word открывается позади Excel. Есть ли возможность, чтобы после выполнения макроса, word файл открывался поверх всех окон? Т.е., чтобы открываемый файл был сразу перед глазами.
Изменено: SevenZZ - 04.06.2020 07:20:12
Ввод критериев фильтра по дате через TextBox
 
Всем добрый день!
Пытаюсь сделать фильтр через UserForm.
Необходимо чтобы при заполнении тектбокс1 значение фильтр становился ">=", а при заполнении тектбокс2 значение фильтр становился "<="
Создал UserForm
Написал код:
Код
Private Sub CommandButton1_Click()
            ActiveSheet.Range("$A$3:$E$7").AutoFilter Field:=4, Criteria1:= _
        ">=" & TextBox1.Value, Operator:=xlAnd, Criteria2:="<=" & TextBox2.Value
        Unload UserForm2
End Sub
НО на выходе результат не выводится.
В чем ошибка?
Изменено: SevenZZ - 09.04.2020 11:35:02
Если активный лист = листу1, то ..., в противном случае ...
 
Добрый день.
Состряпал небольшой макрос, но по результату получил "Run-time error '438'.
Может кто-нибудь сориентирует где ошибка?
Код
Sub h()
If ActiveSheet.Name = Sheets("Лист1") Then
MsgBox "1"
Else
MsgBox "2"
End If
End Sub
Подсчет суммы в столбце до определенной ячейки и далее новый подсчет
 
Добрый день!
Есть таблица. Необходимо в ней, чтобы происходил подсчет суммы до определенной ячейки, а после производился новый подсчет.

Ранее подобную тему размещал в бесплатной ветке форума. Одним из пользователей форума было предложено решение. Очень ему за это благодарен. При этом при эксплуатации макроса столкнулся с несколькими проблемами. Одну из них решил доп. макросом. Вторая по сей день не решена.
Проблема в том, что если под таблицей находится еще одна таблица, то расчеты в самой первой таблице корректные, а во второй и последующих таблицах формула захватывает ячейки из таблицы вышестоящей, соответственно расчеты становятся некорректными.

Быть может кто-то доработает макрос пользователя skais675, а быть может он и сам же возьмется за доработку. Или же быть может исполнителем будет предложено полностью иное решение (другой макрос).
Файл с примером таблицы прилагаю.
Бюджет 1 000 ₽.
Поиск последней ячейки в таблице, содержащей дату
 
Здравствуйте!
Подскажите, существует ли способ поиска (определения) последней ячейки в таблице, содержащей именно дату?
Пример таблицы во вложении. Согласно вложенному примеру, последняя ячейка с датой - это "D5".
Подсчет суммы в столбце до определенной ячейки и новый подсчет
 
Всем добрый день!
Прошу содействия!

Суть проблемы:
Есть таблица. Необходимо в ней, чтобы происходил подсчет суммы до определенной ячейке, а после новый подсчет.

Пытался решить задачу с помощью следующего:
Код
Sub Summ1()
ActiveCell.Formula = "=SUM(" & Range(ActiveCell.Offset(-1), ActiveCell.Offset(-1).End(xlUp)).Address & ")"
End Sub
Код
Sub Summ2()
ActiveCell = Application.WorksheetFunction.Sum(Range(ActiveCell.Offset(-1, 0), Cells(2, ActiveCell.Column)))
End Sub
При данных способах новый подсчет поглощает первоначальный.
Т.е. при выполнении макроса из первой пустой ячейки - все хорошо, но при выполнении макроса из второй и последующей пустой ячейки макрос считает полной диапазон. Соответственно расчет становится некорректным. Кстати второй макрос на правильно считает на рубль. Почему так, не понял еще.

Возможно описал не совсем понятно. Но приложил файл с примером, думаю, сразу все станет ясно.
Положение пустых ячеек всегда разное.

Есть ли возможность решить данную проблему?  
Если ячейка содержит одно, то отображается следующее, если ячейка содержит другой текст, то отображается второе и т.д., Формула
 
Всем добрый день!
Не получается никак составить формулу, которая бы заменяла текст на заданный в зависимости от содержащегося текста в исходной ячейке, а точнее не получится это достигнуть единой формулой.
Пример, во вложенном файле.

Пытался решить задачу след. формулой:
Код
=ЕСЛИ(ПОИСК(A2;"ООО");ПОДСТАВИТЬ(A2;"ООО";"общество с ограниченной ответственность");ЕСЛИ(ПОИСК(A2;"ПАО");ПОДСТАВИТЬ(A2;"ПАО";"публичное акционерное общество");))
Но даже с двумя лог. выражениями не работает.

Буду благодарен всем кто отзовется помочь!
Сохранение исключительно через кнопку-макрос
 
Имеется два макроса.
Один запрещает сохранение, всем кроме одного пользователя, другой назначен на кнопку и сохраняет активный лист без макросов и всего остального лишнего.
Нужно, чтобы макрос, который висит на кнопке не зависел от макроса запрещающий сохранение всем, кроме одного прописанного в коде пользователя.
Коды сейчас конфликтуют. Не могу сообразить как разрешить казус. Прошу у знатоков содействия.
Фильтр через checkbox
 
Всем здравствуйте! Пытаюсь сделать фильтр через чекбоксы на рабочем листе. Из тех знаний, которые имеются смог только реализовать задачу частично.
Проблема в том, что чекбоксы не работают во взаимосвязи, т.е. если включить чекбокс1, то все отфильтровалось, но если дополнительно включить чекбокс2, не выключая чекбокс1, то фильтр с чекбокс1 снимается.

Для наглядности файл с примером во вложении.
InputBox при закрытии книги
 
Товарищи, нуждаюсь в помощи.
С помощью вспомогательных источников написал макрос, который сохраняет файл в формате xlsx и в сохраненном файле удаляет все кнопки и все листы кроме активного. Цель такого макроса, чтобы в сохраненном файле не было ни макросов, ни кнопок

Собственно сам код:
Код
Sub Макрос3()
Dim s As Object
  On Error Resume Next
  Application.DisplayAlerts = False
    ChDir "C:\Users\Seven\Desktop"
    ActiveWorkbook.SaveAs Filename:=InputBox("Введите имя для сохраняемого файла") & ".xlsx", FileFormat:= _
        xlOpenXMLWorkbook, CreateBackup:=False
        For Each s In Sheets
    If Not s Is ActiveSheet Then s.Visible = xlSheetVisible: s.Delete
  Next
  ActiveSheet.DrawingObjects.Delete
  ActiveWorkbook.Save
  MsgBox ("Расчет неустойки сохранен на рабочий стол!")
        ActiveWorkbook.Close False
        Application.DisplayAlerts = True
End Sub
Но в коде существует изъян, который у меня не получается разрешить.

Когда выскакивает InputBox и если нажать cancel или крестик, то файл не сохраняется, но удаляются листы в основной книге, которая потом сохраняется и закрывается.
По сути при нажатии cancel или крестика ничего не должно происходить!
Изменено: SevenZZ - 08.05.2019 13:25:39
Msgbox при переходе на скрытый лист
 
В книге существует ряд кнопок, к которым привязаны макросы, на подобии такого:
Код
Sub Макрос1()
ThisWorkbook.Sheets("Лист2").Activate
End Sub
При этом в книге есть очень скрытые листы, например, лист 2.

Таким образом, при нажатии на кнопку, к которой привязан макрос 1, открывается лист 3, а необходимо, чтобы выскакивала сообщение, например, "Доступ ограничен" и при этом пользователь оставался на листе 1.

Одного Msgbox ("Доступ ограничен"), явно недостаточно.

Кто чем поможет?
если дата приходится на выходной день, то отображается первый рабочий день.
 
Прошу помощи с формулой.
Существует несколько условий для определения необходимой даты.
Первое условие
Документы должны быть предоставлены не позднее 5 числа месяца следующего за месяцем, указанного в ячейке А
Второе условие:
Если день приходится на субботу или воскресенье, то последним днем предоставления документов считается первый рабочий день (понедельник).

Формулу составил, но проблема возникла с выходными.
Пример во вложении.
Объединение ячейки при добавлении новой строки макросом
 
Товарищи, добрый день!
Не могу сообразить как дописать макрос, чтобы при добавлении новой строки, ячейки в столбце А объединялись.

Собственно сам макрос, который добавляет новую строку:
Код
Sub Add_()
If ActiveCell.Row < 6 Or _
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 <= ActiveCell.Row Then Exit Sub
NewRow = ActiveCell.Row + 1
Rows(NewRow).Insert Shift:=xlDown
End Sub

В данной вариации, объединяются ячейки в разрезе конкретной строки, т.е. по горизонтали:
Код
Sub Add_()
If ActiveCell.Row < 6 Or _
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 <= ActiveCell.Row Then Exit Sub
NewRow = ActiveCell.Row + 1
Rows(NewRow).Insert Shift:=xlDown
Range(Cells(NewRow, 1), Cells(NewRow, 2)).Merge
End Sub
А необходимо объединение по вертикали
Выборочное отображение листов для пользователей
 
На просторах интернета нашел очень интересный и полезный макрос
Код
Private Sub Workbook_Open() 
  If Environ("USERNAME") <> "Nikolay" Then 'если логин пользователя не Nikolay  
     Worksheets("Лист1").Visible = False 'скрываем Лист1 
     Worksheets(3).Visible = xlVeryHidden 'делаем 3-й лист суперскрытым 
  Else
      For i = 1 To Worksheets.Count 'в противном случае 
        Worksheets(i).Visible = True 'проходим в цикле по всем листам 
      Next i 'и делаем их видимыми 
  End If
End Sub

собственно вот ссылка на первоисточник.

Пытался добавить в макрос еще несколько пользователей через оператор Or
Код
If Environ("USERNAME") <> "Nikolay" Or "Ivan"  Then 'если логин пользователя не Nikolay или Ivan
но Excel ругается

Вообще пытаюсь добиться следующего:
Код
'если логин пользователя не Nikolay, Ivan, Petr 
'скрываем Лист1 
'делаем 3-й лист суперскрытым 
'в противном случае
'если логин пользователя Nikolay 
'проходим в цикле по всем листам 
'и делаем их видимыми 
'если логин пользователя Ivan, Petr
'делаем видимыми лист 1 и лист 3
Кто подскажет как правильно все-таки добавить нескольких пользователей?
Если одна из ячеек пустая, то результат не отображать
 
Не получается составить формулу.
Формула должна быть следующая: Если одна из ячеек B или D пустая, то ячейка E ничего не отражает. (в самой ячейке E стоит формула =D19-B19+1)

Пытался сделать так: =ЕСЛИ(ИЛИ(ЕПУСТО(B19;ЕПУСТО(D19)));"";D19-B19+1). Вылезает ошибка, что слишком много аргументов для этой функции
.
Кто что подскажет?
Суммирование по ключевым фразам
 
Добрый день!
Как можно решить следующую задачу?
Необходимо сложить ячейки с лева от которых имеется определенная фраза.
Думаю без макроса не обойтись.
То есть макрос должен сложить только те ячейки рядом с которыми (в той же строке) имеется фраза "итого по разнарядке". Полученная сумма должна вывестись внизу таблицы в столбце H.
Фраза "итого по разнарядке" всегда располагается в объединенных строках (с A по G)

Или кому-то известны иные способы такого сложения?
Вставка скопированных строк с сохранением всех форматов (высота, объединения, границы и т.д.)
 
Имеется макрос, который копирует первые пять строк и вставляет их вниз таблицы, но при вставке сбивается высота, объединения, границы. Пробовал через специальную вставку делать, не получилось. Может кто-то подскажет как можно разрешить это проблему?
Код
Sub Add_Razdel()
Dim LastRow As Long
    With Sheets("Пени")
        LastRow = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Range(Cells(1, 1), Cells(1, 8)).Copy .Cells(LastRow + 1, 1)
        LastRow = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Range(Cells(2, 1), Cells(2, 8)).Copy .Cells(LastRow + 1, 1)
        LastRow = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Range(Cells(3, 1), Cells(3, 8)).Copy .Cells(LastRow + 1, 1)
        LastRow = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Range(Cells(4, 1), Cells(4, 8)).Copy .Cells(LastRow + 1, 1)
        LastRow = .Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
        Range(Cells(5, 1), Cells(5, 8)).Copy .Cells(LastRow + 1, 1)
    End With
End Sub

Поиск необходимых значений в таблице и копирование строк в новую таблицу, Макрос
 
Есть таблица, в которой необходимо выявить в колонке E значения, которые больше 30, далее согласно выявленным значениям необходимо скопировать строки в новый лист с сохранением структуры таблицы. При этом колонка F должна перезаписываться на значение 10% и пересчитываться колонка H.

Пытался записать макрос, получилось следующее:
Код
Sub Макрос1()
'
' Макрос1 Макрос
'

'
    ActiveSheet.Range("$A$11:$H$16").AutoFilter Field:=5, Criteria1:=">=30", _
        Operator:=xlAnd
    Range("A12:H16").Select
    Selection.Copy
    Sheets("Лист2").Select
    Range("A12").Select
    ActiveSheet.Paste
    Range("F12").Select
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "10%"
    Selection.AutoFill Destination:=Range("F12:F14"), Type:=xlFillDefault
    Range("F12:F14").Select
    Range("H12").Select
    ActiveCell.FormulaR1C1 = "=PRODUCT(RC[-7],RC[-2],RC[-3])"
    Range("H12").Select
    Selection.AutoFill Destination:=Range("H12:H14"), Type:=xlFillDefault
    Range("H12:H14").Select
End Sub

но это совершенно не то, что необходимо.

Во-первых, получилась привязка к конкретным диапазонам. Хорошо бы, если в коде можно было прописать, чтобы он самостоятельно определял границы таблицы.
Во-вторых, я искал значения больше 30 через фильтр,при этом считаю это не лучшим способом, поскольку к таблице применяется фильтр, который необходимо потом убирать.
В третьих, с таким совершено работать нельзя.

Кто, что думает?

Во вложении пример.  
Добавление новой строки таблицы с сохранением формул из предыдущей (макрос)
 
Добрый день!

Необходим макрос, который добавлял бы к таблице новую строку с сохранением формул из предыдущей строки и с сохранением структуры таблицы.

В ячейках E12, F12, G12, H12 прописаны формулы. По выполнению макроса необходимо, чтобы появилась новая 13 строка с сохранением всех объединений и границ предыдущей строки, а также с сохранением формул ячеек E12, F12, G12, H12. При повторном выполнении макроса 14 новая строка должна уже взять формулы из ячеек E13, F13, G13, H13, и так по кругу.
Кроме того, новая добавляемая строка должна вставать перед итоговой.

Таблица во вложении.
За помощь буду признательно благодарен!
Изменено: SevenZZ - 30.09.2018 09:48:51
Макрос который перенесет даные из одной ячейки в другую
 
Из программы в которой приходится работать некорректно выгружается табличка. Данные которые должны быть в одной строки разбросаны в 2 строки. Нужен макрос который собирет разбросанное в 2 строки в 1 строку.
Прикрепил образец. Слева табличка как выгружается изначально, а с права, то как должно получится после использования макроса.

Такое возможно?
Макрос который найдет в таблице кратные числа и их оставит, а остальные удалит
 
Нужен макрос который найдет в таблице кратные числа, например 777, а все остальные будут удалены. или чтобы кратные числа 777 были выделены цветом.

Для примера:
таблица примерно такая
ААА I777 I0
БББ I850 I0
ВВВ I0 I1554
Нужно 1 и 3 строка осталась, а вторая удалилась

должно стать так:
ААА I777 I0
ВВВ I0 I1554
Страницы: 1
Наверх