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

Страницы: 1 2 След.
Ускорение расчета путем отказа от использования Select и расчет внутри макроса вместо расчета формулой
 
Добрый день!
Часто замечал комментарии опытных пользователей о том что Select лучше не использовать, а расчеты можно произвести внутри макроса и привычными формулами не пользоваться вообще. Решил прислушаться, изменить свой расчетный файл, столкнулся с проблемой значительного увеличения затрачиваемого на расчеты времени.
например,
в ячейке P4 прописана формула =ЕСЛИОШИБКА(ОКРУГЛ(СРЗНАЧЕСЛИ($C4:$O4;">0");1);0)
макросом данная формула растягивается на весь диапазон, делается расчет, формулы переводятся в значения (на 200 тысяч строк затрачивается 1 секунда)
Код
Sub aaa()
Range("P4").AutoFill Destination:=Range("P4").Resize(Range("A4").End(xlDown).Row - Range("P4").Row + 1) 'растянуть формулу
    Calculate 'пересчитать
      Range("P5").Select 'выбрать ячейку
        Range(Selection, Selection.End(xlDown)).Select 'выделить вниз
          Selection.Copy 'копировать
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
              :=False, Transpose:=False 'вставить только значения
End Sub

После замены макроса на
Код
Sub AA()
On Error Resume Next 'в случае ошибки продолжить
PosStr = Sheets("Доп").UsedRange.Rows.Count 'переменная - количество строк
For n = 5 To PosStr 'с какой по какую строку
  Sheets("Доп").Range("P" & n) = Round(Application.AverageIfs(Sheets("Доп").Range("C" & n & ":O" & n), Sheets("Доп").Range("C" & n & ":O" & n), ">0"), 1) 
Next
End Sub
время выполнения расчета точно тех же данных в том же объеме возросло до 43 секунд.

неудачно подобрано решение для выполнения расчета? его следует чем либо дополнить,  чтобы ускорить процесс?
Спасибо!
Замена однотипных задач на одну, Оптимизация макроса
 
Добрый день, подскажите, как можно оптимизировать код
Код
Sheets("Доп").Range("DM" & n) = WorksheetFunction.Index((Sheets("Склады").Range("Y2:AG" & Cells(Rows.Count, 25).End(xlUp).Row)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("B" & n), Sheets("Склады").Range("Y2:Y" & Cells(Rows.Count, 25).End(xlUp).Row), 0)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("DM2"), Sheets("Склады").Range("Y1:AG1"), 0))) 'потребность по складу 1

Sheets("Доп").Range("DN" & n) = WorksheetFunction.Index((Sheets("Склады").Range("Y2:AG" & Cells(Rows.Count, 25).End(xlUp).Row)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("B" & n), Sheets("Склады").Range("Y2:Y" & Cells(Rows.Count, 25).End(xlUp).Row), 0)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("DN2"), Sheets("Склады").Range("Y1:AG1"), 0))) 'потребность по складу 2

Sheets("Доп").Range("DO" & n) = WorksheetFunction.Index((Sheets("Склады").Range("Y2:AG" & Cells(Rows.Count, 25).End(xlUp).Row)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("B" & n), Sheets("Склады").Range("Y2:Y" & Cells(Rows.Count, 25).End(xlUp).Row), 0)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("DO2"), Sheets("Склады").Range("Y1:AG1"), 0))) 'потребность по складу 3

Sheets("Доп").Range("DP" & n) = WorksheetFunction.Index((Sheets("Склады").Range("Y2:AG" & Cells(Rows.Count, 25).End(xlUp).Row)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("B" & n), Sheets("Склады").Range("Y2:Y" & Cells(Rows.Count, 25).End(xlUp).Row), 0)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("DP2"), Sheets("Склады").Range("Y1:AG1"), 0))) 'потребность по складу 4

Sheets("Доп").Range("DQ" & n) = WorksheetFunction.Index((Sheets("Склады").Range("Y2:AG" & Cells(Rows.Count, 25).End(xlUp).Row)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("B" & n), Sheets("Склады").Range("Y2:Y" & Cells(Rows.Count, 25).End(xlUp).Row), 0)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("DQ2"), Sheets("Склады").Range("Y1:AG1"), 0))) 'потребность по складу 5

Sheets("Доп").Range("DR" & n) = WorksheetFunction.Index((Sheets("Склады").Range("Y2:AG" & Cells(Rows.Count, 25).End(xlUp).Row)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("B" & n), Sheets("Склады").Range("Y2:Y" & Cells(Rows.Count, 25).End(xlUp).Row), 0)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("DR2"), Sheets("Склады").Range("Y1:AG1"), 0))) 'потребность по складу 6

Sheets("Доп").Range("DS" & n) = WorksheetFunction.Index((Sheets("Склады").Range("Y2:AG" & Cells(Rows.Count, 25).End(xlUp).Row)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("B" & n), Sheets("Склады").Range("Y2:Y" & Cells(Rows.Count, 25).End(xlUp).Row), 0)), _
                               (WorksheetFunction.Match(Sheets("Доп").Range("DS2"), Sheets("Склады").Range("Y1:AG1"), 0))) 'потребность по складу 7
по сути в 7 соседних столбцов через индекс(поискпоз) подставляются данные из одной таблицы, наверняка можно каким то образом заменить запись для 7 строк (по строке на каждый столбец) на одну универсальную запись, вот только не нашел информации как это сделать
Спасибо!
Выведение результатов макроса на рабочий лист, отображение / не отображение результата расчета ( 0 и пусто )
 
Всем доброго дня,
при использовании макроса заметил один момент, например:
Код
Sheets("Первый").Range("P" & n) = Round(Application.AverageIfs(Sheets("Первый").Range("C" & n & ":O" & n), Sheets("Первый").Range("C" & n & ":O" & n), ">0"), 1)
работает корректно, все замечательно, но, если все ячейки строки которая используется в расчете пустые (начиная со столбца "С" и до столбца "О") - в результат расчета не выводится ничего, то есть пусто (что меня вполне устраивает)
Однако, при другом расчете:
Код
Sheets("Первый").Range("R" & n) = Sheets("Второй").Range("Y" & n) + Sheets("Второй").Range("AB" & n)
используемые ячейки также могут быть абсолютно пустыми, но в результате расчета в ячейке отобразится "0".
От чего зависит такое выборочное отображение "0" и можно ли на это как то повлиять?
Мне например хотелось бы, чтобы при сложении двух пустых ячеек результат также оставался пустым (расчетов очень много, лишние нули только занимают используемые ресурсы), опять же, если скрытие "0" сильно усложнит сам код макроса и время его выполнения - от затеи можно и отказаться.
Спасибо!
Макрос с формулами, Как прописать в макросе формулу, чтобы после его выполнения в ячейках уже был итог расчета, а не формула
 
Доброго дня!
Прошу помощи перевести формулы в макрос, чтобы по нажатию кнопки нужные значения рассчитывались на весь массив и в конкретных ячейках был прописан итог расчета, а не формула по которой он посчитан

Сейчас формулы рассчитываются с 4 строки и до конца массива (он все время меняется, бывает 1 000 строк, бывает 200 000 строк) в качестве переменной для определения последней строки обработки на данный момент используется "PosStr" - последняя строка рабочей таблицы, ну или же можно ориентироваться на последнюю заполненную ячейку в столбце А, ниже уже расчеты не нужны

Пытался разобраться сам, но уже на простых формулах посыпалось все, до сложных даже не добрался, в 1 ячейке прописать сумму двух других не так сложно, а вот когда речь идет о целых столбцах....

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

сами формулы:
1. в столбец P, начиная с 4 строки
=ЕСЛИОШИБКА(ОКРУГЛ(СРЗНАЧЕСЛИ($C4:$O4;">0");1);0)

2.в столбец R, начиная с 4 строки
=Лист2!$Y4+Лист2!$AB4

3.в столбец U, начиная с 4 строки
=ЕСЛИОШИБКА(ВПР($A4;Лист5'!$A:$X;24;0)+ВПР($A4;'Лист5'!$A:$AA;27;0);0)

4.в столбец Z, начиная с 4 строки
=Лист2!$W4+Лист2!$AB4/'Лист7'!$R$3

5.в столбец AC, начиная с 4 строки
=ЕСЛИОШИБКА(ВПР($A4;'Лист5'!$A:$V;22;0)+ВПР($A4;'Лист5'!$A:$AA;27;0)/'Лист7'!$R$6;0)

6.в столбец AJ, начиная с 4 строки
Код
=ГИПЕРССЫЛКА("https://www.wildberries.ru/catalog/"&Лист2!E4&"/detail.aspx?targetUrl=GP";"открыть")
*прописал в виде кода, чтобы не отображалось в виде ссылки. если такое вообще возможно, чтобы в ячейке отображалась сама ссылка, или слово "открыть", но не формула гиперссылки

7.в столбец AG, начиная с 4 строки
=ЕСЛИ($R4=0;"";ЕСЛИ($Z4>$AA4*1,25;"Рост";ЕСЛИ($Z4<$AA4*0,75;"Падение";"")))

8.в столбец AW, начиная с 4 строки
=СУММ($AP4:$AV4)

9.в столбец AX, начиная с 4 строки
=ЕСЛИОШИБКА(ИНДЕКС(Лист3!$O$W;ПОИСКПОЗ($A4;Лист3!$O:$O;0);ПОИСКПОЗ(Лист1!$BA$2;Лист3!$O$1:$W$1;0));0)

10.в столбец Y, начиная с 4 строки
=ЕСЛИОШИБКА(ВПР($A4;'Лист5'!$A:$W;23;0);0)
Очистка данных, Очистка данных
 
Код
Sub aa()
Sheets("один").Select
   With Sheets("один").Range("A5:CX" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
     .ClearContents
     .ClearFormats
   End With

Sheets("два").Select
   With Sheets("два").Range("A5:EN" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
     .ClearContents
     .ClearFormats
   End With

            
End Sub
чистит все как и положено
Код
Sub aa()

   With Sheets("один").Range("A5:CX" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
     .ClearContents
     .ClearFormats
   End With

   With Sheets("два").Range("A5:EN" & Cells(Rows.Count, 1).End(xlUp).Row + 1)
     .ClearContents
     .ClearFormats
   End With

            
End Sub
чистит на листе "один" (с него и запускается макрос) как положено, а на листе "два" чистит только первую строку нужного диапазона.
Почему?
хотел обойтись без "Sheets("два").Select", но почему то не работает
Быстрая очистка диапазона с данными (макрос), Оптимизация удаления (очистки) данных (макрос)
 
Доброго времени суток, прошу помощи в оптимизации макросов.
Есть расчетный файл, в него ежедневно добавляются обновленные исходные данные, по этим данным производится расчет, результаты сохраняются в отдельный файл, исходные данные и расчеты из расчетного файла удаляются (на следующий день все тоже самое повторяется).
Данные удаляются именно очисткой содержимого ( и формата ячеек), а не путем удаления ячейки совсем.
Чистятся все строки кроме заголовка и первой строки с формулами и исходными данными.

Изначально, расчет производился по одной большой и сложной формуле, она охватывала не все случаи, усложнять формулу было с каждым разом все сложнее. Было принято решение определять какой именно случай представлен в исходных данных (каждая строка отдельно) и в зависимости от случая применять конкретную формулу для этого случая, а не одну большую универсальную.

Изначально, расчет производился по формуле, которая "растягивалась" на весь массив данных макросом:
Код
Sub Было_расчет()
Range("B2").AutoFill Destination:=Range("B2").Resize(Range("A4").End(xlDown).Row - Range("B2").Row + 1) 'растянуть формулу
Calculate
End Sub
после того как формулу разделили на несколько более простых такой вариант уже не подходил, на этом форуме добрый человек подобрал решение:
Код
Sub Стало_расчет() 'ВПР основных формул
   Dim lastRow As Long 'пременная для определения нижней границы диапазона
     lastRow = Cells(Rows.Count, 1).End(xlUp).Row 'последняя строка по столбцу 1 (A)
       Application.ReferenceStyle = xlR1C1 'стиль ссылок R1C1
         FillFormulasRange Range(Cells(2, 2), Cells(lastRow, 2)), Range(Cells(2, 16), Cells(lastRow, 16)), Sheets("Стало").Range("T2:U6") 'подстановка формул по условию
           Calculate
       Application.ReferenceStyle = xlA1 'стиль ссылок А1
End Sub

Private Sub FillFormulasRange(rTarget As Range, rCondition As Range, rDictionary As Range) 'вспомогательное для ВПРа основных формул
    Dim dic As Object
    Set dic = GetDic(rDictionary)
    
    Dim aTrg As Variant
    Dim aCon As Variant
    aCon = rCondition.Value
    ReDim aTrg(1 To UBound(aCon, 1), 1 To 1)
    
    Dim yc As Long
    For yc = 1 To UBound(aCon, 1)
        If dic.Exists(aCon(yc, 1)) Then
            aTrg(yc, 1) = dic.Item(aCon(yc, 1))
        End If
    Next
    
    rTarget.Cells(1, 1).Resize(UBound(aTrg, 1), 1).FormulaR1C1 = aTrg
End Sub

Private Function GetDic(rr As Range) As Object 'вспомогательное для ВПРа основных формул
    Dim arr As Variant
    arr = rr.Columns(1).Resize(, 2).FormulaR1C1
    
    Dim dic As Object
    Set dic = CreateObject("Scripting.Dictionary")
    
    Dim ya As Long
    For ya = 1 To UBound(arr, 1)
        dic.Item(arr(ya, 1)) = arr(ya, 2)
    Next
    Set GetDic = dic
End Function
Все работает, основной расчет стал значительно точнее. НО, после того как расчет произведен, расчетный файл нужно почистить, изначально использовался макрос:
Код
Sub Было_очистка()
Rows("3:250000").Select 'выбрать строку
      Selection.Clear 'очистить   
End Sub
данный макрос стал в разы дольше выполнять свою задачу, обычно диапазон в 200 тысяч строк он чистил за считанные секунды, но после обновления макроса для расчета время выполнения очистки увеличилось до десятков минут.
Методом тыка макрос был изменен:
Код
Sub Стало_очистка()
Rows("3:250000").Select 'выбрать строку
      Selection.ClearContents 'очистить
      Selection.ClearFormats 'очистить
End Sub
Если сначала почистить содержимое ячейки а затем её формат - процесс протекает быстрее, но все равно занимает несколько минут. Основное время затрачивается именно на очистку столбца в который макросом были подставлены формулы для расчета, проверял неоднократно. Если перевести формулы в значения, процесс протекает быстрее, но на то чтобы "зазначить" формулы, тоже тратится время.

Внимание вопрос: можно ли каким то образом ускорить очистку ячеек? главное - не удалять ячейки/строки насовсем, а очистить их содержимое. как вариант зазначить диапазон перед очисткой, или вообще приравнять каждую ячейку к 0, а потом очистить диапазон. главное чтобы это было быстро

Заранее спасибо!
Изменено: mitya528 - 24.04.2024 15:44:37
Предупреждение о том, что книга уже открыта, макрос
 
Есть книга  "Работа" с макросом, при запуске макроса открывается книга "Отбор" (тоже с макросами), в книге "Отбор" удаляются данные, на их место из книги "Работа" вставляются новые данные.

Но, если книга "Отбор" открыта другим пользователем, то через макрос книга "Отбор" открывается в режиме чтения (без каких либо предупреждений и всплывающих окон) - в дальнейшем все идет не по плану, старая информация не удаляется, новая не сохраняется....

Нужен макрос (часть макроса) которая будет останавливать текущий процесс, при этом должно появиться всплывающее окно - "Книга открыта пользователем "........" , нажмите "да", чтобы продолжить".

я увижу что книга открыта, и кем она открыта, попрошу пользователя закрыть книгу, нажму "да" и процесс продолжится

Код
Sub aaa()

  Application.ScreenUpdating = False  'отключаем обновление экрана для скорости

  Workbooks.Open Filename:="\\s\Files_server\Отдел\_ОБЩАЯ\С\Отбор.xlsm" 'открыть книгу
    Workbooks("Отбор.xlsm").Windows(1).WindowState = xlMaximized 'на первый план
      Workbooks("Отбор.xlsm").Activate 'на первый план

  Sheets("ОП").Select 'выбрать лист
    Call Application.Run("'Отбор.xlsm'!Модуль.Очистка") 'запустить макрос
      Excel.ActiveWorkbook.Save 'сохранить книгу
        ActiveWorkbook.Close True 'закрыть книгу без подтверждения

  Sheets("Доп").Select 'выбрать лист
    Range("B4").Select 'выбрать ячейку
      Range(Selection, Selection.End(xlDown)).Select 'выделить вниз
        Selection.Copy 'копировать
          Sheets("Отбор").Select 'выбрать лист
            Range("A2").Select 'выбрать ячейку
              Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                   :=False, Transpose:=False 'вставить только значения
     
  Sheets("Доп").Select 'выбрать лист
    Range("CA4").Select 'выбрать ячейку
      Range(Selection, Selection.End(xlDown)).Select 'выделить вниз
        Selection.Copy 'копировать
          Sheets("Отбор").Select 'выбрать лист
            Range("B2").Select 'выбрать ячейку
              Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                   :=False, Transpose:=False 'вставить только значения
                   
  Sheets("Авто").Select 'выбрать лист
    Range("BZ4").Select 'выбрать ячейку
      Range(Selection, Selection.End(xlDown)).Select 'выделить вниз
        Selection.Copy 'копировать
          Sheets("Отбор").Select 'выбрать лист
            Range("C2").Select 'выбрать ячейку
              Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                   :=False, Transpose:=False 'вставить только значения

  Range("A2:C2").Select 'выбрать диапазон
    Range(Selection, Selection.End(xlDown)).Select 'выделить вниз
      Selection.Copy 'копировать

  Workbooks.Open Filename:="\\s\Files_server\Отдел\_ОБЩАЯ\С\Отбор.xlsm" 'открыть книгу
    Workbooks("Отбор.xlsm").Windows(1).WindowState = xlMaximized 'на первый план
      Workbooks("Отбор.xlsm").Activate 'на первый план

  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
      :=False, Transpose:=False 'вставить только значения
    Range("A2").Select 'выбрать ячейку
  
  Excel.ActiveWorkbook.Save 'сохранить книгу
  
    If Weekday(Date, 2) = 1 Then 'если сегодня понедельник
      Dim x As String
        strPath = "\\s\Files_server\Отдел\_ОБЩАЯ\С\Архив\Отбор"     'папка для сохранения резервной копии
      On Error Resume Next
        x = GetAttr(strPath) And 0
          If Err = 0 Then ' если путь существует - сохраняем копию книги, добавляя дату-время
            strDate = Format(Now, "dd.mm.yy hh.mm") 'формат сегодняшней даты и времени
              FileNameXls = strPath & "\" & "Отбор" & " " & strDate & ".xlsm" 'название и формат сохраняемого файла
                ActiveWorkbook.SaveCopyAs Filename:=FileNameXls 'сохранить объединив условия
          Else 'если путь не существует - выводим сообщение
            MsgBox "Папка " & strPath & " недоступна или не существует!", vbCritical 'сообщение в случае ошибки
          End If 'конец блока если
     End If 'конец блока если
     
  ActiveWorkbook.Close True 'закрыть книгу без подтверждения
    Application.ScreenUpdating = True 'включаем обновление экрана
End Sub 'конец
Подстановка формул в столбец в зависимости от условия в соседнем столбце через макрос
 
Доброго времени суток!
Подскажите, как через макрос подставлять формулы в зависимости от условия в соседнем столбце?
Есть 5 различных формул, каждая формула применяется при соблюдении определенного условия. Нужно чтобы макрос в каждую строку вставил нужную для этой строки формулу
В примере наглядно показал
Запрос подтверждения на удаление строк / блокировка удаления строк
 
Доброго дня, подскажите, возможно ли например через макрос настроить запрос подтверждения при попытке удалить строку (или полностью заблокировать удаление строк на листе) ?
Есть лист с данными, данные периодически могут меняться, на эти данные ссылаются формулы с других листов, иногда (по невнимательности и забывчивости) вместо очистить содержимое пользователь удаляет строки целиком (так ведь быстрее и проще), а формулы слетают, вообще перестают работать или уменьшается диапазон охвата данных для обработки (что еще хуже, формула ведь работает, а факт того что она обрабатывает не все данные может долгое время быть не выявленным).
Хотелось бы запретить удаление строк на конкретных листах книги (в крайнем случае во всей книге), при этом, ограничение должно быть только на удаление строк и ни на что больше - данные можно менять как угодно, столбцы можно удалять ....
Как вариант - при попытке удалить строку - появляется всплывающее окно  с запросом подтверждения на удаление - пользователь видит, что это может повлиять на формулы и отказывается от удаления строк (вроде как напоминание, что так делать не стоит)
Макрос: Удаление строк на основании множественного отбора, Макрос: Удаление строк на основании множественного отбора
 
Доброго дня!
На одном листе есть таблица с данными, в столбце A данной таблицы указаны номера, на соседнем листе в столбце A также указаны номера. Если на листе с таблицей строка начинается (столбец A) с номера который встречается на соседней вкладке (имена листов постоянны), то такую строку необходимо удалить.
Сама таблица имеет порядка 200 тысяч строк, из которых в конечном итоге будет удалено примерно 70 %.
Необходим макрос, который максимально быстро сможет удалить строки которые соответствуют условию (встречаются в столбце A на соседнем листе).
Все данные представлены значениями, формул, фильтров, группировок или разрывов данных нет
Спасибо!
P.S. если вдруг это как то повлияет на скорость удаления - список номеров которые должны быть удалены можно заменить на список номеров которые должны остаться
Изменено: mitya528 - 16.02.2024 11:47:08
Макрос в личной книге макросов который запишет макрос в модуль открытой книги, Макрос который создает другой макрос
 

Доброго дня!
возможно ли это, чтобы один макрос из личной книги макросов сам создавал другой макрос?

Код
Function AverageByColor(DataRange As Range, ColorSample As Range) As Double
    Dim cell As Range, total As Double, n As Long
     
    For Each cell In DataRange
        If IsNumeric(cell) And cell.Interior.Color = ColorSample.Interior.Color Then
            total = total + cell.Value
            n = n + 1
        End If
    Next cell
    AverageByColor = total / n
End Function

есть функция которая будет считать среднее по цвету, каждый раз добавлять ее в используемый файл не вариант (пользователь этого не умеет, научить не вариант), напрямую из личной книги макросов функция не работает (может я что делаю не так). подскажите, есть ли способ написать макрос, добавить кнопку запуска этого макроса на панель задач, и чтобы этот макрос добавлял в текущий файл вышеуказанную функцию? ну или может есть другой вариант решения данной задачи...
Спасибо!
Изменено: mitya528 - 13.02.2024 09:35:22
Запуск макроса в зависимости от значения ячейки, Запуск макроса в зависимости от значения ячейки
 
Помогите решить проблему. Не работает, может оформил не верно?
Код
Sub Проверка()
If [a1] = "Один" Then 
     Call Один 
     Exit Sub 
   End If 
If [a1] <> "Один" Then 
      Call Два 
      Exit Sub 
     End If 
End Sub 


Sub Один()
Range("A2").Select 
ActiveCell.FormulaR1C1 = "Один" 
End Sub 

Sub Два()
Range("A3").Select 
ActiveCell.FormulaR1C1 = "Два"
End Sub 
Динамический выбор диапазона (макрос), Выбор диапазона от активной ячейки до указанной в условии через макрос
 
Доброго дня, теоретический вопрос по VBA - как через макрос выбрать (выделить) диапазон от текущей активной ячейки до конкретной (на постоянной основе прописанной в условии) ячейки, например L1048576 ?
Выполнение различных действий в зависимости от введенного значения InputBox
 
Доброго дня!
Подскажите пожалуйста (если это вообще возможно реализовать),
как в зависимости от введенного значения в всплывающем окне InputBox выполнить различные действия ?
пытался вот так но это не работает:
Код
Sub Сохранить()
Сколько = InputBox("Сколько часов ты работал?", , "1")
If Сколько = "1" Then 'если 1 , то
ActiveWorkbook.SaveAs (Путь & Имя & " " & Дата & " (" & Last_Row & " шт) " & Сколько & "час" & ".xlsm") 'сохранить книгу с именем
 End If 
ActiveWorkbook.SaveAs (Путь & Имя & " " & Дата & " (" & Last_Row & " шт) " & Сколько & "часа" & ".xlsm") 'сохранить книгу с именем
End Sub
Изменено: mitya528 - 08.12.2023 09:41:04
Фильтр по дате с последующим удалением строк (макрос)
 
Доброго времени суток! Нужна помощь в написании макроса.
Есть таблица с данными, один из столбцов представляет из себя дату. Данные которые по дате старше сегодняшнего дня на 3 месяца и более считаются устаревшими, их необходимо отфильтровать и удалить (либо просто удалить, без использования фильтра). Главное, чтобы остались только те строки в которых дата не более чем на 3 месяца отличается от сегодняшней. В идеале данный параметр указать в днях, чтобы при необходимости можно было указать не 92 дня, а 110 дней например.
Файл пример прилагаю.
Спасибо!
Макрос открывающий гиперссылки, который можно поставить на паузу
 
Доброго времени суток.
Есть файл с с гиперссылками (гиперссылки в столбце J по одной штуке в ячейке, начиная с ячейки J2 и до J38000 ).

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

Открыл гиперссылку - небольшая пауза - открывает следующую (небольшая пауза необходима для того чтобы ссылка успела прогрузиться в браузере и оператор мог принять решение что перед ним, паузы в 4-5 секунд вполне достаточно).

При необходимости, оператор нажимает на кнопку и макрос ставится на паузу (прекращает открывать гиперссылки). Оператор подписывает комментарий напротив последней открытой  гиперссылки (было бы неплохо, если бы при постановке на паузу активной становилась соседняя ячейка в столбце К напротив последней открытой гиперссылки), затем оператор  нажимает на кнопку и действие макроса продолжается с того момента на котором остановилось

Спасибо!
Одновременный расчет нескольких несвязанных диапазонов с последующим переводом формул в значения
 
Доброго времени суток, нужна помощь в написании макроса который растянет формулы из 10 строки до строки в которой заканчиваются значения в столбце M, в дальнейшем, часть столбцов начиная с 11 строки необходимо перевести в значения, часть столбцов оставить в виде формул. Более подробно и наглядно в файле примере.
Спасибо!
(создавал уже подобную тему, но не достаточно точно описал суть проблемы, чтобы посетителям форума не вникать в лишнюю информацию решил создать новую тему)
Вывод списка соответствий значений первого столбца значениям последующих столбцов с разделением значений в столбцах, Текст по столбцам с последующим одъединением в один столбец друг за другом
 
Доброго времени суток !
значению в первом столбце соответствует несколько значений во втором столбце, нужно разделить значения второго столбца сохранив соответствие с первым столбцом. но это лишь часть задачи, таких столбцов как второй столбец несколько (до 12) и каждое значение необходимо соотнести со значением первого столбца.
Не получается сформулировать задачу более понятным языком, в файле примере задача расписана более наглядно, так же прописаны доп. условия
Спасибо !
Изменено: mitya528 - 02.11.2023 14:23:13
Зазначить раздельные диапазоны через макрос, Перевести формулы в значения используя макрос
 
Здравствуйте!  прошу помощи
Имеется файл в котором необходимо формулы заменить на значения с помощью макроса. При этом сделать это нужно одним действием (несколько раздельных диапазонов) и оставить самые верхние расчетные значения в виде формулы, не меняя их на значения (кстати говоря, они всегда на этом месте и их расположение не меняется - выше/ниже не смещаются). Столбцы всегда одни , количество строк меняется. Пример прилагаю.
Спасибо!
Изменено: mitya528 - 20.10.2023 16:01:53
Всплывающее окно при запуске макроса, Динамичное сообщение при запуске макроса
 
Доброго времени суток,
Есть макрос который запускает цепочку расчетов. В зависимости от значения ячейки A13 расчеты могут быть разными. Иногда возникает ситуация, когда значение в ячейке A13 забыли поменять, соответственно расчеты при запуске макроса будут не верные.
Добавил в начало макроса всплывающее окно, с уточнением, действительно ли нужно произвести расчеты, но хотелось бы, чтобы в этом сообщении фигурировало значение из той самой ячейки A13 при том что оно может меняться.
Возможно ли это сделать? Если да то как?
файл пример прикладываю
Автозамена значений по определенным условиям, Автозамена значений по определенным условиям
 
Приветствую!
Нужна помощь в написании формулы или макроса результатом работы которого будет замена единиц на двойки или нули по нескольким условиям.
Каждая позиция формируется к отправке на 7 складов, у каждой позиции на каждый склад прописана доля к отправке, суммарно 100% по всем 7 складам.
Если к отправке посчиталось 1 шт, то это значение нужно заменить на 2 (по 1 шт не отправляем). Но если на 2 склада посчиталось по 1 то у одного склада 1 нужно заменить на 2, а у другого на 0. при этом, предпочтение для замены на 2 отдается тому складу у которого процентное распределение для данной позиции наибольшее, если процентное распределение совпадает - предпочтение отдается тому складу который имеет наименьший порядковый номер. При этом 1 заменяются на 0 на складах с меньшим процентом распределения или с наибольшим порядковым номером (при равном процентном распределении). Если на 1 посчиталось на 1, 3, 5 или 7 складов 1 без пары просто заменяется на 2.
Наиболее наглядно в файле примере
Спасибо!
Снижение скорости расчетов, Резко снизилась скорость расчетов
 
Доброго времени суток.
Столкнулся с такой проблемой:
на основном листе есть столбцы для отбора информации  (учитывать/не учитывать) на вспомогательной странице данные по которым производится отбор. Отборы производятся различными формулами, часть например через ВПР, часть через СЧЁТЗ (если искомое значение встречается в конкретном столбце более 0 раз то учитывать). Данные формулы растягиваются на 100 тысяч строк, обработка (пересчет) длится около минуты. 100 тысяч строк ВПРятся на 7 тысяч строк, например. все работает. В определенный момент, возникает необходимость обновить условия для отбора, 7 тысяч строк удаляются, на их место вставляются другие значения (часть те же самые, часть новые). Новых значений может быть даже меньше чем было до обновления условий отбора. Однако процесс пересчета резко увеличивается до 1 часа или даже больше.
Формулы прописаны без закрепления конкретных ячеек (на весь столбец сразу).данные могут быть представлены как числом так и текстом новые данные были скопированы и вставлены на место старых и именно после этого процесс пересчета увеличился в десятки раз. прочие условия не менялись.
Складывается впечатление что эксель не распознает новые значения или тратит на это "Распознование" много дополнительного времени.
Также замечен странный факт - если из первого листа взять все 100 тысяч значений и вставить ниже 7 тысяч строк на втором листе - впр (ну или через индекс+поискпоз) посчитает примерно так же быстро как это было до обновления условий

Пробовал приводить данные к одному формату/внешнему виду, пробовал удалять строки в эксель в которых нет данных (с 7001 строки и до конца листа) - не помогает

Может кто сталкивался с подобной проблемой и знает пути ее решения?
Изменено: mitya528 - 22.08.2023 15:48:38
Макрос для нажатия на гиперссылку (запуска), Создание макроса для перехода по динамической гиперссылке
 
Доброго времени суток, прошу помощи в написании макроса, который будет запускать гиперссылку. Гиперссылка динамическая, необходимо написать макрос так, чтобы он не фиксировал начальное значение гиперссылки, а просто переходил по ней, какой бы она не была.
Сама гиперссылка меняется в зависимости от значения в ячейке рядом. Важный момент - значение в ячейке поменять проще и быстрее, чем заходить в макрос и менять адрес гиперссылки в нем.

#Sub Переход()
'
' Переход Макрос
'

'
   Range("I1").Select
   Application.Goto Reference:="R10C1"
End Sub
Макрос для удаления строк, Удаление заданного количества строк через макрос
 
Доброго времени суток!
Нужен макрос который будет удалять строки из эксель всегда самые нижние (в эксель входит чуть больше миллиона строк, я хочу удалить например 300 тысяч строк, значит макрос удалит начиная со строки 700 тысяч и до конца листа эксель) количество строк для удаления всегда разное, и задается числом например в ячейке А1. Файл не прикрепляю, задача расписана на мой взгляд весьма понятно.
Заранее спасибо за помощь!
Дополнительный столбец в сводной таблице, Дополнительный столбец в сводной таблице
 
Доброго времени суток.
нужна помощь в добавлении дополнительных столбцов в сводную таблицу (если это вообще возможно)
в сводной таблице необходимо часть данных поделить по столбцам (городам), а часть данных записать общим числом.
При этом варианты выводв двнных через 2 стоящих рядом сводных таблицы или добавления столбцов которые не будут являться частью сводной таблицы не рассматриваются. (из двух сводных не удобно копировать данные, столбцы вне сводной таблицы считаются обычными формулами (очень долго на больших массивах, и не обновляются автоматом одновременно со сводной таблицей).
Более понятно в файле примере.
Спасибо!
Вывод списка числовых значений которым соответствуют ошибки, В результате подстановки (ВПР) возникают ошибки, хотелось бы получить список ошибок
 
Доброго времени суток!
В результате применения формулы ВПР не все значения находят соответствие, хотелось бы автоматически получать список таких значений. Общий список значений может достигать 100-200 тысяч, искать #Н/Д через фильтр проблемно и не удобно. Более подробно в файле примере.
Большое спасибо!
сумма ячеек конкретного цвета, каждая ячейка нужного цвета умножается на соответствующий коэффициент и суммируется с другими подобными ячейками
 
Доброго времени суток, нужно посчитать сумму зеленых ячеек, перед этим каждую ячейку нужно разделить на коэффициент месяца, к которому эта ячейка относится.
Спасибо!
Деление на целые части в зависимости от процентного распределения, Общее значение необходимо разделить на целые части без остатка (каждая часть имеет процентную долю от общего значения)
 
Доброго времени суток, нужна помощь в решении задачи
необходимо разделить одно общее значение на целые части, так чтобы сложив эти части вместе можно было получить исходное значение. Каждая часть изначально имеет свою долю от общего, выраженную в процентах, в результате округления частей до целого могут теряться либо наоборот появляться излишки, именно с излишками и недостатками нужно разобраться путем вычитания их из какой либо части либо наоборот добавления к какой либо части.
Более наглядно в файле примере
Формула для вычленения из текста значений для последующего перемножения, Нужно из текстовой ячейки вычленить числовые значения для их последующего перемножения
 
Доброго времени суток!
Нужна помощь с подбором формулы, которая выберет из текстовой ячейки числовые значения и перемножит их. Ячейки имеют различный вид, искомые значения могут быть в любой части текста (начало/середина/конец), значения всегда идут друг за другом, между ними символ"*", без пробелов. значения бывают двух/трех/четырехзначные. Более наглядно в файле примера.
Заранее благодарен!
Подстановка значения для дубликатов, Если условие применимо к к одной строе, то нужно прописать его для всех дубликатов
 
Доброго времени суток!

Создавал уже подобную тему, но по вопросу условного форматирования, решение подсказали, но на деле этого оказалось мало.


Заказ имеет статус "Оформлен", а элемент из которого (частично или полностью) состоит заказ отсутствует - значит напротив ячейки нужно подставить переоформить ---- с этим я справится.
Но как быть с другими элементами заказа который нужно переоформить?
---
В примере задача должна быть более понятной.

Заранее спасибо!
Страницы: 1 2 След.
Наверх