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

Страницы: 1 2 3 След.
Извлечение символов из строки, соответствующих заданному набору допустимых
 
Всем привет!
Есть столбец с кодами товара. В некоторых ячейках присутствуют ненужные символы. В соседний столбец надо вынести все, что вписывается в этот набор: 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -.#_+
Пробовал так:

regexpextract(C4;"[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -.#_+]{10}")

Проблема в количестве символов. как только их получается меньше 10, идет ошибка. А их количество всегда разное в исходном столбце.

И вторая проблема, все это работает только если ненужный символ стоит в конце строки, а не в середине например.

По идее надо вот такое: "ABC//DE//" превратить в "ABCDE"

Уместно ли вообще тут regexpextract? Если нет, то чем заменить

Отображение массива в msgbox в обратном порядке
 
Всем привет! Есть простой код, отображающий весь массив в msgbox:
Код
Sub Test()   
Dim arr(3) As String
arr(1) = "Test"
arr(2) = "Test 2"
arr(3) = "Test 3"
MsgBox Join(arr, vbCrLf)
End Sub
А можно ли его отобразить в обратном порядке? Попробовал вообще вот так:
Код
Sub Test()
    
Dim arr(3) As String

arr(1) = "Test"
arr(2) = "Test 2"
arr(3) = "Test 3"
a = ""
For i = UBound(arr) To LBound(arr)
    a = a & arr(i)
Next i
MsgBox a

End Sub
Но не получилось. Переменная после выполнения цикла остается пустой. Почему? Какой код можно доработать для получения результата? Первый или второй? Или использовать сначала что-то типа вот этого:
Код
For Ndx = LBound(arr) To ((UBound(arr) - LBound(arr) + 1) \ 2)
    Temp = arr(Ndx)
arr(Ndx) = arr(Ndx2)
arr(Ndx2) = Temp
    Ndx2 = Ndx2 - 1
Next Ndx
Линия тренда для части графика
 
Народ, подскажите пожалуйста, есть ли способ построить линейную линию тренда не для всех данных в графике, а для части? Например последние 30 записей. Или последний календарный месяц?
Вставить в формулу действие ("*" или "/"), указанное в другой ячейке
 
Всем привет!
Допустим в двух ячейках содержатся числа. В файле-примере A1 и A2 В третьей A3 надо их либо перемножить, либо разделить. Есть ли способ в формуле использовать действие, которое прямо указано в какой-то другой ячейке? Например в C1 может стоять символ "*" или символ "/"
Пробовал так: =A1&C1&A2 но в таком случае значения трех ячеек просто соединяются в одну строку, без вычислений
Сравнение значения с элементами диапазона (формула)
 
Всем привет! Помогите пожалуйста с формулой.

Есть ячейка, допустим "A1", которая может содержать любое число. В другую ячейку, пусть будет "A2" надо внести коэффициент, который определяется в зависимости от значения "A1" по справочнику (на картинке). В справочнике Есть столбец со списком значений от 0 до 4, а слева коэффициенты. Если "A1" = 1.7 (1 >= "A1" < 2), то коэффициент равен 0.3. Если "A1" = 3.4, то коэффициент = 0.5 и т.д. Конечно же можно все сделать с помощью формулы:
=ЕСЛИ(A1>=1;ЕСЛИ(A1>=2;ЕСЛИ(A1>=3;ЕСЛИ(A1>=4;0.6;0.5);0.4);0.3);0.2)
но она и так громоздкая, а если еще и справочник будет больше, то вообще станет гигантской. Есть ли альтернатива? Макросом сделать легко, там простой цикл, но в данном случае нужна именно формула.
Изменено: IvanMantrov - 23.07.2022 12:56:39
Вызов формы с использованием переменной вместо имени
 
Всем привет!
скажем есть переменная uf
Есть ли возможность присвоить переменной имя существующей формы и вызвать форму вот таким образом примерно:
Вместо:
Код
Userform1 .Show
Что-то типа:
Код
uf="Userform1 "
uf.Show
Подставить переменную в тело запроса xml
 
Выполняю запрос к бирже с указанием нескольких параметров после .send
Код
With OBJHTTP
        .Open "POST", Url, False
        .setRequestHeader "Accept", "*/*"
        .setRequestHeader "Content-type", "application/json"
        .setRequestHeader "Origin", "https://p2p.binance.com&quot;
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"
        .send "{""page"":1,""rows"":1,""payTypes"":[],""asset"":""USDT"",""tradeType"":""BUY"",""fiat"":""RUB"",""transAmount"":1000,""publisherType"":null,""merchantCheck"":false}"
        bin_answer_buy = .ResponseText
End With
Сейчас параметр transAmount имеет значение 1000. Подскажите пожалуйста как вместо этого значения подставить переменную?
Работа макроса в неактивном окне
 
Настроил запуск макроса через определенные интервалы. Для примера сделал просто вставку текущего времени в следующую ячейку.
Все работает, но стоит свернуть окно и переключиться на что-то другое, данные перестают вставляться, а когда открываешь окно - продолжают, но в них появляется разрыв. То есть переменная lr продолжает менять значение пока окно не активно, а вот данные не записываются.

Код
Dim TimeToRun

Sub MyMacro()
Dim abook As Workbook
Set abook = ThisWorkbook
lr = abook.Sheets("Report").Cells(Rows.Count, 1).End(xlUp).Row
abook.Sheets("Report").Cells(lr + 1, 1) = Format(Now, "hh:mm:ss")
Call NextRun 
End sub

Sub NextRun()

    TimeToRun = Now + TimeValue("00:00:02")
    Application.OnTime TimeToRun, "MyMacro"

End Sub
Вставить в формулу переменную
 
Всем доброго дня!

Есть переменная CFile, содержащая путь к файлу и его имя. Нужно вставить ее в формулу ВПР в качестве координатов таблицы.
Пробовал так:
Код
[I2].FormulaR1C1 = "=VLOOKUP(R[-1]C[4],'" & CFile & "]Лист1'!C1:C9,9,0)"
не получается
Запуск макроса, хранящегося в другой книге (без импорта в текущую)
 
Всем привет!
Есть книга Библиотека.xlsm, в ней модуль TestModule, а в нем макрос Test()
Помогите пожалуйста прописать путь к нему чтобы можно было запустить из другой книги (скажем книги А)
Получится ли запустить, если в книге А создать макрос с кодом:
Код
Application.Run "C:\Users\IMantrov\Desktop\......" 'полностью не получается прописать путь к макросу
И параллельно возник вопрос, есть ли смысл хранить код в книге? Или лучше просто экспортировать модуль на рабочий стол например в файле .bas. Если да, то как должен выглядеть путь к нему?
Условие: если ячейка определенного цвета (градиент)
 
Всем привет! Пытаюсь макросом посчитать количество ячеек в каждой строке определенного цвета. В исходнике используется градиентная заливка.
Код получился такой:
Код
With Лист1
        lr = .Cells(.Rows.Count, 1).End(xlUp).Row
        lc = .Cells(5, .Columns.Count).End(xlToLeft).Column
        For r = 6 To lr
            i = 0
            For c = 8 To lc
                If 'здесь должно содержаться условие, что ячейка определенного цвета
                    i = i + 1
                End If
            Next
            .Cells(r, lc + 1) = i 'В конце каждой строки ставится количество ячеек с обусловленным цветом
        Next
    End With

Не зная как обозначить цвет, я попробовал макрорекодером записать процедуру фильтрации по этому цвету. Вот что вышло:
Код
ActiveSheet.ListObjects("Графики").Range.AutoFilter Field:=14, Criteria1:= _
        RGB(0, 0, 0), Operator:=xlFilterCellColor
    With ActiveSheet.ListObjects("Графики").AutoFilter.Filters(14).Criteria1
        .Pattern = xlPatternRectangularGradient
        .Gradient.RectangleLeft = 0.5
        .Gradient.RectangleRight = 0.5
        .Gradient.RectangleTop = 0.5
        .Gradient.RectangleBottom = 0.5
        .Gradient.ColorStops.Clear
    End With
    With ActiveSheet.ListObjects("Графики").AutoFilter.Filters(14).Criteria1. _
        Gradient.ColorStops.Add(0)
        .Color = 16777215
        .TintAndShade = 0
    End With
    With ActiveSheet.ListObjects("Графики").AutoFilter.Filters(14).Criteria1. _
        Gradient.ColorStops.Add(1)
        .Color = 7434613
        .TintAndShade = 0
    End With

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

Код
[A3:H3].AutoFilter Field:=4, Criteria1:=Array("Первый критерий", "Второй критерий", "Третий критерий", "Четвертый критерий"), Operator:=xlFilterValues

Но в реале они не на столько короткие как в примере. Есть ли способ вместо них использовать хотя бы первое слово или его часть?
Например вместо "Первый критерий", вносить что-то вроде "Перв*" Вариант со звездочкой вместо неопределенного количества символов в случае с фильтрацией не катит.
Копировать несколько листов в новые книги с присвоением имен
 
Всем привет! Пытаюсь перебрать несколько листов, скопировать их в новые книги и присвоить книгам имена этих листов.
Перебор работает на других задачах, с этим все хорошо. Проблема только с созданием книги и присвоением имени.
Код
Dim WsAr, i&    
WsAr = Array("СФ", "ЮФ", "МФ")
    For i = LBound(WsAr) To UBound(WsAr)
        With Worksheets(WsAr(i))
            iPath = ActiveWorkbook.Path
            newbookname = .Name
           'Сюда нужно вставить операцию по созданию новой книги с присвоением ей имени переменной newbookname
           'и сохранять ее в iPath (папка с исходной книгой)
        End With
    Next
Изменено: IvanMantrov - 01.08.2019 16:54:00
Перебор файлов в папках
 
Всем привет! Раньше для работы сразу с несколькими файлами (копирование, редактирование и т.д.) в одной папке использовал такой код:
Код
Dim abook As Workbook
    Set abook = ActiveWorkbook
    Dim daway As String, item As String
    Dim somebook As Excel.Workbook
    With Application.FileDialog(msoFileDialogFolderPicker)
        .ButtonName = "OK"
        .Title = "Выбери папку с файлами, которые надо перебрать"
        If .Show = 0 Then
            Exit Sub
        End If
        daway = .SelectedItems(1)
    End With
    item = Dir(PathName:=daway + "\*.xls*")
    Do Until item = ""
        Set somebook = Workbooks.Open(daway + "\" + item)
        'Действия с книгой
        somebook.Close
        item = Dir
    Loop
    Set somebook = Nothing

Теперь условия изменились. В целевой папке содержатся не файлы, а много папок, в каждой из которых несколько файлов, которые надо обработать. Т.е. надо перебирать папки, а потом уже файлы внутри. Вложенный цикл должен получиться. Что-то вроде for each %переменная, обозначающая папку% in daway
Помогите пожалуйста его организовать.
Доступ к части кода определенному кругу пользователей
 
Всем привет!
При написании макросов иногда выделяю отдельно операции, которые будут выполняться только на моем компьютере, например так:
Код
    Dim objNetwork As Object
    Set objNetwork = CreateObject("WScript.Network")
    ComputerName = objNetwork.ComputerName
    Set objNetwork = Nothing
    If ComputerName Like "IMANTROV-NB" Then
        'Операции для меня    
    else        
        'Операции для других пользователей
    End If

А что если нужно дать доступ нескольким пользователям. Как сформировать небольшой список из имен (4-5 шт.) и сравнивать имя пользователя с этим списком?
Изменено: IvanMantrov - 28.06.2019 10:31:07
Произвольное количество символов в ячейке
 
Доброго всем дня!
Как в функции ЕСЛИ задать в качестве критерия значения наподобие *АБВ, где звездочка - это любое количество любых символов.
В макросах и поиске это делается именно так, но в формулу вставить не выходит:

=ЕСЛИ(A1="*ВИ";1;0)

Цикл при переборе пропускает часть элементов
 
Доброго всем дня!
Цикл по идее должен удалять колонки, с определенными заголовками. Но по факту всегда остается несколько, хотя они удовлетворяют условиям. Полностью все удаляется только при повторном запуске макроса. Конкретно в файле примера должны удаляться вообще все колонки, но этого не происходит
Код
For cl = 1 To .UsedRange.Columns.Count
      If .Cells(1, cl).Value Like "Скидка*" Then .Cells(1, cl).EntireColumn.Delete
      If .Cells(1, cl).Value Like "*999*" Then .Cells(1, cl).EntireColumn.Delete
Next
Копирование данных из книг с определенным названием
 
Добрый день!
Пытаюсь перебрать файлы в папке и копировать данные только из тех, чье имя содержит "20", например.
Код
Dim abook As Workbook
    Set abook = ActiveWorkbook
    Dim fileway As String, Objct As String
    Dim xlfile As Excel.Workbook
    With Application.FileDialog(msoFileDialogFolderPicker)
        .ButtonName = "OK"
        .Title = "Выбери папку"
        If .Show = 0 Then
            Exit Sub
        End If
        fileway = .SelectedItems(1)
    End With
    Objct = Dir(PathName:=fileway + "\*.xlsx")
    Do Until Objct = ""
        Set xlfile = Workbooks(fileway + "\" + Objct)
        nm = xlfile.Name
        If nm Like "*20*.xlsx*" Then
            lrg = abook.Sheets("Svod").Cells(Rows.Count, 1).End(xlUp).Row
            Sheets("List1").Select
            [A1].Copy abook.Sheets("Svod").Cells(lrg + 1, 1)
        End If
        xlfile.Close
        Objct = Dir
    Loop
    Set xlfile = Nothing

Вот тут:
Код
Set xlfile = Workbooks(fileway + "\" + Objct)
возникает ошибка Subscript out of range
Можно конечно сделать так:
Код
Set xlfile = Workbooks.Open(fileway + "\" + Objct)
все работает, но макрос открывает по очереди все книги, а это долго.
Подскажите, пожалуйста какой метод использовать вместо Open
Автофильтр с критериями - указанием первых букв значений
 
Всем доброго дня!
При фильтрации с темя критериями вот так
Код
.[A:Q].AutoFilter Field:=4, Criteria1:=Array("A", "B", "C"), Operator:=xlFilterValues
или вот так:
Код
.[A:Q].AutoFilter Field:=1, Criteria1:="abc*"
все получается. Первый фильтр использует сразу три критерия, а второй отображает значения, начинающиеся с определенных букв. Но если попытаться таким же методом действовать в первом случае (в каждом критерии указать только начало значения ячейки), то фильтр не работает.
Код
.[A:Q].AutoFilter Field:=4, Criteria1:=Array("A*", "B*", "C*"), Operator:=xlFilterValues
Вернее работает, но скрывает все.
Потеря знаков при приобразовании текста в число
 
Доброго всем дня!
При экспорте данных в Excel источник выдает одну из колонок в которой содержатся только числа (кроме заголовка) в текстовом формате.
Пример: 121000011507605455
При попытке преобразовать в число результат получается такой: 121000011507605000
Последние три знака превращаются в нули! Почему так происходит и как с этим бороться?
Ошибка при фильтрации по датам
 
В качестве критериев фильтрации использую значения ячеек с другого листа:
Код
With Sheets("Расхождения")
    datapi = Sheets("Макрос").Range("B3") - 1
    datai = Sheets("Макрос").Range("F5")
    For u = 1 To .UsedRange.Columns.Count
        If .Cells(1, u).Value Like "Дата учета" Then
            .Range("A:X").AutoFilter Field:=u, Criteria1:= _
            "<=" & CDbl(CDate(datapi)), Operator:=xlAnd, Criteria2:=">=" & CDbl(CDate(datai))
        End If
    Next
    End With
При попытке фильтрации выдает ошибку. Обычно этот метод работает. В этом можно убедиться если в файле-примере поменять в коде "Расхождения" на "Расхождения 2". На листе "Расхождения 2" схожие данные. При этом ошибки там не возникает.
Ошибка при копировании видимых ячеек после фильтрации
 

Здравствуйте! При попытке скопировать после фильтрации видимые строки выдается ошибка:

"Не найдено ни одной ячейки, удовлетворяющей указанным условиям"

Код
With List4
        lrv = Application.CountA(.Columns(1).SpecialCells(12))
        If lrv > 2 Then
            .Range(.Cells(2, 1), .Cells(lrv, 3)).SpecialCells(12).Copy List3.[A1]
        End If
End With
Код фильтрации по времени по-разному ведет себя на разных данных
 
Здравствуйте! Возникла проблема с фильтрацией:
Код
With Лист2
    threecol = Лист1.[I6]
    .[A:S].AutoFilter Field:=3, Criteria1:="Товар оприходован"
    .[A:S].AutoFilter Field:=11, Criteria1:=">" & threecol
End With
Первый шаг работает, а на втором фильтр убирает все данные. Но если открыть его вручную, то в нем будет стоять необходимое значение
Срабатывает он только после нажатия ОК.
Примечательно то, что этот затык наблюдается не у всех пользователей. Версии Excel разные. Может в этом причина?
На всякий случай сделал файл с примером.
Изменено: IvanMantrov - 22.06.2018 16:01:50
Редактирование макроса для Excel в Visual Studio
 
Здравствуйте!
Заранее прошу прощения, если вопрос идиотский.
Кто знает возможно ли для разработки/редактирования макросов в документах Excel использовать не встроенную среду, а MS Visual Studio?
Хотя бы чисто теоретически. Нужно обосновать начальству зачем мне нужно на рабочий ноут установить VS. Изучение C# с нуля в мои обязанности не входит, а вот макросы для всего департамента одобряют всегда. Вот я и подумал не попростить ли эту программу и не убить ли двух зайцев.
Удаление промежуточных итогов из сводной таблицы
 
Доброго всем дня!
Если создавать сводную таблицу с записью кода макрорекодером, то удаление промежуточных итогов выглядит так:
Код
ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Корзина").Subtotals = _
        Array(False, False, False, False, False, False, False, False, False, False, False, False)
ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Дата корзины"). _
        Subtotals = Array(False, False, False, False, False, False, False, False, False, False, _
        False, False)
Здесь на форуме прочитал, что все можно упростить до такого варианта, чтобы избавиться от этого множества false:
Код
ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Корзина").Subtotals(1) = False
ActiveSheet.PivotTables("СводнаяТаблица2").PivotFields("Дата корзины").Subtotals(1) = False
В связи с этим появился вопрос, а можно ли пойти дальше и разом отключить итоги для всех полей таблицы. В этом примере их всего два, но бывает значительно больше. Или все же нужно прописывать это для каждого в отдельности?
Квадратные скобки вместо "Range" в коде
 
Доброго всем дня!
Решил упростить код, и вообще освоить более простые методы его написания. Например:
Код
.[C1] = "Сумма"
вместо
Код
.Range("C1") = "Сумма"
В связи с этим возник вопрос как с помощью этого же принципа переделать вот это:
Код
.Range("E2:E" & lr) 'тут переменная обозначает нижний край выделения
и это:
Код
.Range("J2", .Range("K2").End(xlDown))
Можно ли, используя квадратные скобки, полностью избавиться от всех этих "Range"?
Преобразование значения в формулу (подстановка знака равенства)
 
Здравствуйте!
Подскажите пожалуйста: есть ячейки со значениями наподобие: "355+675" Но это не формула, так как знака равенства в начале нет.
Как макросом вставить в заданном диапазоне знак равенства в начале значения каждой ячейки. И будут ли они восприниматься как формулы?
Файл .xlsm на 30КБ открывается минуты три
 
Здравствуйте! Есть небольшой файлик с макросом, который очень долго открывается. При этом сохраняется моментом, да и весит совсем чуть-чуть.
Иногда так бывает, если он сетевой принтер пытается найти, но принтер по умолчанию выбрал PDFCreator, обычно помогает, но не в этот раз.
В чем еще может быть причина? Миллионов пустых строк нет. Листа всего 2. Сам макрос проще некуда. Ссылок на другие книги в формулах тоже нет.
Определение последней строки с данными (если неизвестно какой столбец больше)
 
Доброго всем дня!
Обычно пользуюсь вот такой функцией:
Код
lr = .Cells(.Rows.Count, 1).End(xlUp).Row
Однако это работает только для конкретного столбца, первого в данном примере, а есть ли способ определить последнюю заполненную ячейку, если неизвестно в каком она столбце, т.е. нужно максимальное значение из всех.
Счет непустых строк: почему и при 1, и при 0 результат ноль?
 
Всем доброго дня!
При копировании использую переменную (lrdk), в которой заложено количество непустых строк в столбце, однако даже если столбец пустой, то значение переменной равно единице. Пример во вложении.
Код
With Лист1
lr = .Cells(.Rows.Count, 1).End(xlUp).Row
lrdk = Sheets("ДопКорзины").Cells(Rows.Count, 1).End(xlUp).Row
    For j = 1 To .UsedRange.Columns.Count
        If .Cells(1, j).Value Like "Номер" Then
            If lrdk > 0 Then
            .Range(.Cells(1, j), .Cells(lr, j)).Copy Sheets("ДопКорзины").Cells(lrdk + 1, 1)
            Else
            .Range(.Cells(1, j), .Cells(lr, j)).Copy Sheets("ДопКорзины").Range("A1")
            End If
        End If
    Next
End With
Изменено: IvanMantrov - 09.03.2018 23:00:48
Страницы: 1 2 3 След.
Наверх