Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 След.
Искажение графических фигур при печати
 
Это, к сожалению, не лечится. Но можно попытаться убрать симптомы. Попробуйте выделить все объекты, скопировать, и, через специальную вставку, вставить как "расширенный метафайл". Это, возможно (зависит от версии Excel, параметров экрана, принтера), может помочь избежать "разбегания" объектов от растровой картинки при печати (но не от искажения масштаба по горизонтали и вертикали).
И да, не лучший выбор инструмента для совмещения растровой и векторной графики...
Решение уравнения с дробями!
 
Нет ошибки в предложенных формулах. Они вычисляют ровно то, что было в условиях задачи. А вот на картинке с решением - совершенно другие условия. В чем, по Вашему, отличие 100% от просто 100?

PS. Ігор Гончаренко, в Вашей, похоже есть, крайний делитель должен быть (R[1]C[2]+4)
Изменено: Alec Perle - 17 Май 2020 11:19:25
Формула определеяющая тип контрагента (как сделать из макроса функцию)
 
Можно тут же упростить
Код
Function Category(s$) As String
    s = " " & Trim(s)
    Select Case True
    Case s Like "* ООО *": Category = "Юр.лицо"
    Case s Like "* АО *": Category = "Юр.лицо"
    Case s Like "* ИП *": Category = "ИП"
    Case Else: Category = "Физ.лицо"
    End Select
End Function
Только вот что делать с ПАО (тот же Газпром), НАО, ФКУ, НОУ, ДОУ и т.д. Целый справочник получается...
как поменять в ячейке формулу на ее значение
 
Код
=If(g1<=0;функция(аргументы);значение)

И обратите внимание, чем отличается оформление кода (здесь, на форуме) у Вас и у других участников.
Можно ли ускорить работу Excel, заменив HDD на SSD?
 
Цитата
Jack Famous написал:
VBA очень шустрый
пока не загнать обработку ячеек в цикле. Еще лучше выделяя каждую.
Полагаю речь идет об обработке данных максимально возможно без обращения к объектной модели Excel, кроме как для получения данных и сохранения результата.
Вывести список уникальных значений используя коллекции VBA
 
Цитата
Mershik написал:
Collection.Add(Object, String, Object, Object)
Не так. Первый - может быть любым, второй - строка, третий и четвертый - число или строка.
Вывести список уникальных значений используя коллекции VBA
 
Цитата
Mershik написал:
без него
Имеется ввиду так?
Код
    If Not IsEmpty(cell) Then Kolekciya_unik.Add cell.Value
Второй параметр при добавлении в коллекцию - это ключ, он должен быть уникальным. Если пытаемся добавить элемент с уже имеющимся ключом, возникнет ошибка, которая в приложенном коде игнорируется и элемент (который не уникальный) не добавляется.
Если второй параметр не используется, никакой ошибки не возникает и элемент добавляется,  
Как можно организовать передачу значений переменных между процедурами.
 
Цитата
Фарит написал:
как организовать проверку условия и выполнять обработку данных 1 или 2 процедурой
Как это связано с темой сообщения?
И что, все-таки, Вы подразумеваете под передачу значений между процедурами? Процедура не живут сами по себе - она или выполняется, или нет, когда Вы вызвали вторую процедуру, первая продолжит выполняться только после завершения  второй.
У Вас в обеих процедурах организован цикл от 23 до 5000.  То есть вторая процедура будет при каждом вызове выполнять цикл от 23 до 5000. Даже если Вы ей каким-нибудь способом передадите переменную nrs.
Вам нужно переделать логику работы программы, например так (и, кстати, вариант обмена значениями между процедурами):
Код
Sub Макрос1()
  Dim nrs As Integer

  For nrs = 23 To 5000
    if (проверка условия) Then
      Call Обработка1(nrs)
'сюда вернется обработка после выполнения процедуры Обработка1
    Else
      Call Обработка2(nrs)
'сюда вернется обработка после выполнения процедуры Обработка2
    End If
  Next
End sub

Sub Обработка1(nrs As Integer)
'не используем For nrs ...!

End Sub

Sub Обработка2(nrs As Integer)
'не используем For nrs ...!

End Sub

Как можно организовать передачу значений переменных между процедурами.
 
Цитата
Фарит написал:
а второй затирает значения первого значения npp не передал во второй
Ну так пусть не затирает. У Вас в каждой процедуре  идет присваивание npp=1. Оставьте это присваивание только в той процедуре, которая вызывается первой.
Вопрос по определению последней строки vba, ActiveSheet.UsedRange.Rows.Count - 1 зачем вычитать единицу?
 
Цитата
artemkau88 написал:
Возник вопрос: для чего в выражении
Возник встречный вопрос - для чего выражение?
В Вашем случае - количество занятых ячеек минус один.
На самом деле такое вычитание используется, когда необходимо получить последнюю строку занятого диапазона, и выражение выглядит как:
Код
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
То есть первая строка плюс количество строк минус один. Если не вычитать - получится первая незанятая строка.
Цитата
artemkau88 написал:
То есть здесь  
ActiveSheet.UsedRange.Rows.Count = 12 мая
а  ActiveSheet.UsedRange.Rows.Count-1 = 11 мая
Верно?
Не совсем. В предложенном примере
Код
ActiveSheet.UsedRange.Rows.Count = 3 дня - длительность отпуска
ActiveSheet.UsedRange.Row = 9 мая - начало отпуска
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count = 9 + 3 = 12 - день выхода из отпуска
ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1 = 9 + 3 - 1 = 11 - последний день отпуска
СЧЕТЕСЛИ неправильно считает длинные числовые значения
 
Цитата
iVVS написал:
что я делаю не так
Как минимум, не пользуетесь поиском
PS. И да, поиск дает вполне разумное решение:
Код
=СЧЁТЕСЛИ($N$3:$N$14;"*"&N3)
Изменено: Alec Perle - 4 Май 2020 17:28:35
О чем ошибка: Expression too complex (Err 16)
 
У Вас в коде используется Not Not ИмяМассива для проверки инициализации динамического массива. Это, к сожалению, не фича VB (VBA), а баг, использование которого приводит к ошибкам. Попробуйте проверку проводить по-другому - через перехват ошибки при обращении к массиву.
Варианты округления в VBA, Поиск самого быстрого
 
Цитата
Jack Famous написал:
вычисление d - вообще ни в какие ворота
А что с ним не так? Ведь закомментировано же)) А скрин не раскомментируется никак, чтоб самому проверить...
Варианты округления в VBA, Поиск самого быстрого
 
Можно и WorksheetFunction.Round ускорить, правда на доли процента. Нужно второй параметр передавать сразу как Double:
Код
d = .Round(1 + i / nMax, 2#)
Варианты округления в VBA, Поиск самого быстрого
 
Можно еще чуть ускорить (своеобразный "дизельгейт"), если каждый раз не вычислять множитель:
Код
Public Function MyRoundFixStatic(X As Double, R As Long) As Double
  Static OldR As Long
  Static D As Double
  Dim i As Long
  If R <> OldR Then
    D = 1
    For i = 1 To R
      D = D * 10#
    Next i
    OldR = R
  End If
  MyRoundFixStatic = Fix(X * D + 0.5) / D
End Function

Результаты:
Код
WorksheetFunction.Round      5,78125 
VBA.Round                    0,203125 
MyRoundFix                   0,4375 
MyRoundFixStatic             0,296875 
И да, округление математическое, проверял с ОКРУГЛ() сравнением результатов на листе))
Изменено: Alec Perle - 18 Апр 2020 16:48:42
Варианты округления в VBA, Поиск самого быстрого
 
Цитата
МатросНаЗебре написал:
Как вариант, ещё есть функции Int()
Цитата
Jack Famous написал:
Fix пошустрее вроде,
Код
Public Function MyRoundFix(X As Double, R As Long) As Double
  Dim D As Double
  Dim i As Long
  D = 1
  For i = 1 To R
    D = D * 10#
  Next i
  MyRoundFix = (Fix(X * D + 0.5)) / D
End Function

Результаты по тесту из #3:
Код
WorksheetFunction.Round      5,765625 
VBA.Round                    0,203125 
MyRoundInt                   0,375 
MyRoundFix                   0,359375 

Правильное обращение к нужной книге/листу при нескольких открытых файлах
 
Цитата
Klavka1993 написал:
Первую часть с with он проходит хорошо
А вот на второй сбивается
Обратите внимание, что в первом случае Вы используете .Range - с точкой, а во втором Cells - без точки.  
Заливка фигур цветом условного форматирования формулой
 
Может, инструмент "камера" подойдет?
Удалить строку из двухмерного массива по условию VBA
 
Цитата
Duke2 написал:
какая-то проблема с размерностью массива
Обратите внимание на строку 16 кода, предложенного doober.
Склеить дату и время.
 
Цитата
Exo написал:
Как сравнить я понимаю.
То есть, Вы понимаете, как хранится дата/время? Достаточно сложить значение ячейки, содержащей дату, и ячейки, содержащей время. В результирующей ячейке выставить формат, отображающий дату и время ("ДД.ММ.ГГГГ ч:мм")
Указывать дату, в зависимости от времени печати документа
 
Off
Цитата

глория написал:
Все, уже не надо
Убивать?..
Указывать дату, в зависимости от времени печати документа
 
L7 был как пример дополнительного столбца на листе Лист2, чтобы растянуть и увидеть, как в зависимости от времени меняется и дата.
Во вновь выложенном файле у Вас в ячейку Лист1!E8 подтянуто время погрузки, поэтому в формулу можно подставить эту ячейку, т.е. в ячейку Лист1!C7
Код
=СЕГОДНЯ()+ОКРУГЛ((ЧАС(ТДАТА())-ЧАС(E8))/24;0)
PS. Пока писал, Вы выложили новый файл, но суть та же - в ячейку Лист1!B5
Код
=СЕГОДНЯ()+ОКРУГЛ((ЧАС(ТДАТА())-ЧАС(B6))/24;0)
Изменено: Alec Perle - 28 Фев 2020 13:40:01
Указывать дату, в зависимости от времени печати документа
 
Код
=СЕГОДНЯ()+ОКРУГЛ((ЧАС(ТДАТА())-ЧАС(F2))/24;0)
Формулу можно вставить в ячейку L2 и растянуть вниз
Указывать дату, в зависимости от времени печати документа
 
Тогда без условий:
Код
=ТДАТА()+ВРЕМЯ(4;0;0)

Некорректно открывается файл - в фомулах, появляется префикс _xlfn.IFS.
 
Цитата
Galina15 написал:
Некорректно открывается
Открывается, вероятно, максимально корректно в данных условиях. Дело в том, что функция IFS (ЕСЛИМН) появилась в Excel 2016.
Указывать дату, в зависимости от времени печати документа
 
Здесь макрос и не нужен (раз используется =сегодня()+1).
Удаление объектов (Shape) находящихся в конкретном диапазоне листа.
 
Перебор, в принципе, не так уж и долог, особенно, если не забыть вовремя выйти из цикла -  например, зачем продолжать перебирать, если объект найден и уничтожен.
Предполагаю, что Intersect не самый быстрый метод для установления факта совпадения ячеек. Например, даже сравнение адресов (а они String) дает прирост скорости примерно на треть:
Код
Shape.TopLeftCell.Address = Cell.Address
ка ведь можно сравнить и номера строк и столбцов (не проверял).
Цитата
БМВ написал:
вставляется разово пачка значений,
Можно внутри цикла перебора объектов написать цикл перебора вставляемых значений, например, хранимых в коллекции и удаляемых оттуда по мере нахождения нужных объектов. Холостой цикл будет только один...
Макрос скрывает или показывает нужные строки, если в первых ячейках написано слово "УБРАТЬ", почему тормозит макрос?
 
У Вас для каждой строки из перебираемых изменяется признак скрытия/отображения независимо от необходимости. Попробуйте проверять необходимость скрытия,отображения (пример только для первого цикла):
Код
   For i = 104 To 116
      With .Rows(i)
        If .Cells(1, 2) = "УБРАТЬ" Then
           If Not .Hidden Then .Hidden = True
        Else
           If .Hidden Then .Hidden = False
        End If
      End With
    Next

И нет необходимости объявлять вторую переменную i2, если и i и i2 используются только в циклах, достаточно использовать одну (это, правда, не влияет на скорость).
VBA. Неверно считается кол-во столбцов, range("C5:E5,G5,I5:M5").columns.count
 
Это уже зависит от постановки задачи - что именно нужно. Например, я вижу выделенные две таблицы, и не факт, что пересечение их столбцов имеет смысл. А так, повторюсь
Цитата
Alec Perle написал:
Ради справедливости
VBA. Неверно считается кол-во столбцов, range("C5:E5,G5,I5:M5").columns.count
 
Ради справедливости, пример из справочной системы:
Код
This example displays the number of columns in the selection on 
Sheet1. If more than one area is selected, the example loops through each 
area.Worksheets("Sheet1").Activate
areaCount = Selection.Areas.Count
If areaCount <= 1 Then
    MsgBox "The selection contains " & _
        Selection.Columns.Count & " columns."
Else
    For i = 1 To areaCount
        MsgBox "Area " & i & " of the selection contains " & _
            Selection.Areas(i).Columns.Count & " columns."
    Next i
End If
А так да, идея со строкой интересная
Страницы: 1 2 3 4 5 6 След.
Наверх