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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 290 След.
Вытащить последнюю цифру из текста со скобками
 
Код
Option Explicit

Sub Вытащить_из_выделенных_ячеек()
    Dim cl As Range
    For Each cl In Intersect(Selection, ActiveSheet.UsedRange).Cells
        cl.Cells(1, 2).FormulaR1C1 = "=ВЫТАЩИТЬ(RC[-1])"
        If cl.Cells(1, 2).Value = "" Then cl.Cells(1, 2).Value = Empty
    Next
End Sub

Function ВЫТАЩИТЬ(ByVal строка As String) As Variant
    ВЫТАЩИТЬ = ""
    If InStr(строка, "[""") > 0 Then
        строка = Mid(строка, InStr(строка, "[""") + 2)
    Else
        ВЫТАЩИТЬ = ""
        Exit Function
    End If
    
    If InStr(строка, """]") > 1 Then
        строка = Mid(строка, 1, InStr(строка, """]") - 1)
    Else
        ВЫТАЩИТЬ = ""
        Exit Function
    End If
    
    Dim res As Variant
    res = ""
    строка = Replace(строка, " ", "")
    Dim arr As Variant
    arr = Split(строка, """,""")
    Dim ya As Long
    For ya = LBound(arr) To UBound(arr) - 1
        If (arr(ya) = "-") And (arr(ya + 1) <> "-") Then
            res = arr(ya + 1)
        ElseIf arr(ya + 1) <> "-" Then
            ВЫТАЩИТЬ = ""
            Exit Function
        End If
    Next
    ВЫТАЩИТЬ = res
End Function
Заполнение таблицы данными из формы, Первая строка не полностью заполняется
 
mtb.ListRows.Add приводит к срабатыванию события на изменение. Макросы, выполняемые по этому событию, сбрасывают значение ComboBox3. Запоминаем значение, потом возвращаем. Как-то так.
Заполнение таблицы данными из формы, Первая строка не полностью заполняется
 
Скрытый текст
Скопировать данные во все книги папки
 
Код
Private Const sInitialFileName = "E:\Сервер\Сервер 1\Сервер 2\Сервер 3\Сервер 4\РАБОЧИЕ\Журнал выездов\"
 
Sub Копировать_по_журналам()
    Dim wb As Workbook, c As Range, arrWB(), w
    arrWB = ShowFileDialog()
    With Application
       .EnableEvents = False
       .Calculation = xlCalculationManual
       .ScreenUpdating = False
       .Visible = False
           
        For Each w In arrWB
  
            Set wb = Workbooks.Open(w)  ' Этот метод копирует данные в книги находящиеся по пути с главной
            ThisWorkbook.Worksheets("Средства измерений").Cells.Copy wb.Worksheets("Средства измерений").Cells 'копируем все данные с активного листа
            For Each c In wb.Worksheets("Средства измерений").Cells.SpecialCells(xlCellTypeFormulas, 23)
                c.FormulaLocal = Replace(c.FormulaLocal, "[" & ThisWorkbook.Name & "]", "")
            Next c
            wb.Close (True)
        Next w
           
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
        .Visible = True
    End With
    MsgBox "Готово"
End Sub
 
Private Function ShowFileDialog() As Variant
    Dim arr As Variant
    Dim sName As String
    sName = Dir(sInitialFileName & "*.xl*")
    Do
        If sName = "" Then Exit Do
        If Left(sName, 2) <> "~$" Then
            If sName <> ThisWorkbook.Name Then
                If IsEmpty(arr) Then
                    ReDim arr(1 To 1)
                Else
                    ReDim Preserve arr(1 To UBound(arr) + 1)
                End If
                arr(UBound(arr)) = sInitialFileName & sName
            End If
        End If
        sName = Dir
        DoEvents
    Loop
    ShowFileDialog = arr
End Function
Как макросом удалить строки из объединённых ячеек
 
Неправильно. Широкую на широкую.
Код
Range("A100").Resize(ActiveSheet.UsedRange.Rows.Count).UnMerge
Это отдельная строка кода. Если вставить, например, сюда Set myRange = Range("A100").Resize(ActiveSheet.UsedRange.Rows.Count).UnMerge, то работать не будет.
Скопировать данные во все книги папки
 
Код
Option Explicit
Private Const sInitialFileName = "E:\Сервер\Сервер 1\Сервер 2\Сервер 3\Сервер 4\РАБОЧИЕ\Журнал выездов\"

Sub Копировать_по_журналам()
    Dim wb As Workbook, c As Range, arrWB(), w
    arrWB = ShowFileDialog()
    With Application
       .EnableEvents = False
       .Calculation = xlCalculationManual
       .ScreenUpdating = False
       .Visible = False
          
        For Each w In arrWB
 
            Set wb = Workbooks.Open(w)  ' Этот метод копирует данные в книги находящиеся по пути с главной
            ThisWorkbook.Worksheets("Средства измерений").Cells.Copy wb.Worksheets("Средства измерений").Cells 'копируем все данные с активного листа
            For Each c In wb.Worksheets("Средства измерений").Cells.SpecialCells(xlCellTypeFormulas, 23)
                c.FormulaLocal = Replace(c.FormulaLocal, "[" & ThisWorkbook.Name & "]", "")
            Next c
            wb.Close (True)
        Next w
          
        .EnableEvents = True
        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
        .Visible = True
    End With
    MsgBox "Готово"
End Sub

Private Function ShowFileDialog() As Variant
    'ShowFileDialog = Application.FileDialog(msoFileDialogFolderPicker)
    
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Dim oFD As FileDialog
    Dim lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Title = "Выбрать файлы" 'заголовок окна диалога
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xls*", 1 'устанавливаем возможность выбора только файлов Excel
        '.Filters.Add "Text files", "*.txt", 2 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = sInitialFileName
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Function 'показывает диалог
        Dim arr As Variant, sName As String
        'цикл по коллекции выбранных в диалоге файлов
        For lf = 1 To .SelectedItems.Count
            sName = fso.GetFileName(.SelectedItems(lf))
            If Left(sName, 2) <> "~$" Then
                If sName <> ThisWorkbook.Name Then
                    If IsEmpty(arr) Then
                        ReDim arr(1 To 1)
                    Else
                        ReDim Preserve arr(1 To UBound(arr) + 1)
                    End If
                    arr(UBound(arr)) = .SelectedItems(lf)  'считываем полный путь к файлу
                End If
            End If
        Next
        ShowFileDialog = arr
    End With
End Function
Как макросом удалить строки из объединённых ячеек
 
Код
Range("A100").Resize(ActiveSheet.UsedRange.Rows.Count).UnMerge
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Комбинация двух подходов, приведённых выше.
Скрытый текст
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Цитата
sfs написал:
Я так понимаю это только валидация что введено значение из списка
Нет. Это макрос, срабатывающий на изменение ячейки. И в него можно запихать обновление валидации, как это сделано в сообщении #38, или проверку на наличие на листе Unc, как это сделано в сообщении #42.
Цитата
написал:
а выбор из выпадающего списка этих же уникальных значений макросом никак не реализовать?
Такое можно реализовать. Предположим, что "выбор этих же значений" означает, "если не совпало, поставьте первое из списка". Тогда так:
Код
вместо
cl.Value = Empty
вставьте 
cl.Value = aValidation.Keys()(0)
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Скрытый текст
Изменено: МатросНаЗебре - 05.11.2025 15:16:37
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Перевожу, что делает этот макрос.
При изменении на листе Report, изменяется проверка данных ячеек на листе Report.
Не проверяется, есть ли значения на листе на листе Unc, а изменяется проверка данных.
Меня терзают смутные сомнения, Вам же не это было нужно.
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Цитата
написал:
я думаю примерно так должно быть, но не работает:
Код вставили в модуль листа "Unc" или "Report"?
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Цитата
написал:
без принудительного запуска макроса
Если под принуждением имеется в виду запуск макроса пользователем,
то можно запускать по событию. Например, по изменению значения в ячейках:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Sheets("Лист2").ListObjects("Таблица2").ListColumns("Колонка2").DataBodyRange) Is Nothing Then
        ВалидэйшнДеКолон
    End If
End Sub
Этот код нужно вставить в модуль листа 2.
Изменено: МатросНаЗебре - 05.11.2025 14:13:51 (Is Nothing)
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Цитата
написал:
Добавил макрос, но ... я ожидаю что без запуска макроса
Надеюсь, хоть один запуск предполагается  :D  
При вводе значения в ячейку, нужно автоматическое появление значение в соседней ячейке
 
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rng As Range
    If Not Intersect(Target, Range("A2:A1000")) Is Nothing Then
        If Target.Cells.CountLarge = 1 Then
            With Sheets("Лист2")
                Set Rng = .Columns(1).Find(what:=Target, LookIn:=xlValues, lookAt:=xlWhole)
                If Not Rng Is Nothing Then
                    Target.Offset(0, 1) = Rng.Offset(0, 1)
                Else
                    MsgBox "Такого значения не найдено.", 48, "Ашыпка!"
                    Target.Offset(0, 1) = ""
                End If
            End With
        End If
    End If
End Sub
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
С небольшими изменениями сообщение #26

Скрытый текст
как проставить определенное значение для всей категории при его наличии в категории
 
Код
=ЕСЛИ(СЧЁТЕСЛИМН(A:A;A:A;B:B;"текст3");"текст3";"")
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Цитата
Sanja написал:
Для скрытия длинных листингов можно использовать тэги.
Поправил. С недавних пор изменилось отображение кода на форуме. Теперь видно 30 строк, остальные строки нужно прокрутить. Теперь длинные листинги отображаются не такими уж и длинными - собственно поэтому и решил, что требования обрамлять спойлерами отпали.
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Этот макрос изменит проверку данных в ячейке H13, используя данные из столбца с1 умной таблицы Т1.
Скрытый текст
Цитата
написал:
Если возможно обойтись вообще без функционала проверки данных только макросом
Что макрос должен делать? Проверять, имеется ли значение в диапазоне "с1" и удалять, если значения нет?
Изменено: МатросНаЗебре - 05.11.2025 12:16:55 ([SPOILER])
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Цитата
написал:
использовать более оптимальные формулы
Можно указать не весь столбец, а конкретный диапазон:
Код
=ИНДЕКС($A$1:$A$8115;ПОИСКПОЗ(СТРОКА();$B$1:$B$8115;0))
Подсчёт цепочек ячеек с одинаковыми значениями
 
Код
=СЧЁТЕСЛИМН(C5:AF5;"Отпуск";D5:AG5;"<>Отпуск")
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
Цитата
написал:
вы предлагаете во вспомогательный столбец поставить только впервые встретившееся значение
Да.
Цитата
написал:
а для остальных дубликатов оставить пустым?
Нет.
-----------------------------------------------------------------------------------
Допустим, Ваши данные находятся в диапазоне A2:A10.
В ячейку B2 вставьте формулу и протяните до ячейки B10:
Код
=B1+(СЧЁТЕСЛИМН(A$1:A2;A2)=1)

В ячейку C1 вставьте формулу и протяните до ячейки C10:
Код
=ИНДЕКС(A:A;ПОИСКПОЗ(СТРОКА();B:B;0))
В ячейку с проверкой данных вставьте формулу:
Код
=СМЕЩ($C$1;0;0;МАКС(B:B);1)
Как по условию из ячейки выбрать только часть данных в другой ячейке
 
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(" "&C2;СИМВОЛ(10);ПОВТОР(" ";1000));НАЙТИ(" "&D2&".";ПОДСТАВИТЬ(" "&C2;СИМВОЛ(10);ПОВТОР(" ";1000)))+ДЛСТР(D2)+2;1000))
Как по условию из ячейки выбрать только часть данных в другой ячейке
 
Код
=СЖПРОБЕЛЫ(ПСТР(ПОДСТАВИТЬ(C2;СИМВОЛ(10);ПОВТОР(" ";1000));НАЙТИ(" "&D2&".";ПОДСТАВИТЬ(C2;СИМВОЛ(10);ПОВТОР(" ";1000)))+3;1000))
Использование умных таблиц в проверке данных, Умные таблицы, проверка данных
 
- Вывести уникальные значения во вспомогательный столбец.
- Проверку данных настроить на этот диапазон.
Сцепить текст, но если в ячейке 0 не выводить значение, Сцепление ячеек, но если значение 0 то в тексте не показывать
 
Код
="ХР 14 "&ЕСЛИ(ИЛИ(наборка!I16="0";наборка!I16=0);"";наборка!I16&" ")&ЕСЛИ(ИЛИ(наборка!G16="0";наборка!G16=0);"";наборка!G16&" ")&ЕСЛИ(ИЛИ(наборка!H16="0";наборка!H16=0);"";наборка!H16&" ")&ЕСЛИ(ИЛИ(наборка!I17="0";наборка!I17=0);"";наборка!I17&" ")&ЕСЛИ(ИЛИ(наборка!G17="0";наборка!G17=0);"";наборка!G17&" ")&ЕСЛИ(ИЛИ(наборка!H17="0";наборка!H17=0);"";наборка!H17&" ")&ЕСЛИ(ИЛИ(наборка!I18="0";наборка!I18=0);"";наборка!I18&" ")&ЕСЛИ(ИЛИ(наборка!G18="0";наборка!G18=0);"";наборка!G18&" ")&ЕСЛИ(ИЛИ(наборка!H18="0";наборка!H18=0);"";наборка!H18&" ")&ЕСЛИ(ИЛИ(наборка!B3="0";наборка!B3=0);"";наборка!B3&" ")&ЕСЛИ(ИЛИ(наборка!B4="0";наборка!B4=0);"";наборка!B4&" ")
Заменить ячейки с определенной формулой на значения
 
Код
Option Explicit
'v3
Sub ttARM_ActiveWorkbook()
    ttARMwb ActiveWorkbook
End Sub

Sub ttARMwb(wb As Workbook)
    Dim sh As Worksheet
    For Each sh In wb.Sheets
        ttARMsh sh
    Next
End Sub

Sub ttARMsh(sh As Worksheet)
 
Dim Rng As Range
  
For Each Rng In sh.UsedRange.SpecialCells(xlCellTypeFormulas)
    If InStr(Rng.Formula, "INDIRECT") > 0 And Len(Rng.Formula) > 30 Then Rng.Value = Rng.Value
Next
  
End Sub

Изменено: МатросНаЗебре - 01.11.2025 09:01:40 (Sub ttARM_ActiveWorkbook())
Добавление префикса к числу с условием, Необходимо добавить префикс к числу с разным количеством символов
 
Код
=ПОВТОР(ЛЕВСИМВ(A1;1);$D$1-ДЛСТР(A1)-ДЛСТР(B1)+1)&ПСТР(A1;2;ДЛСТР(A1)-1)&B1
Конкретно для этого примера работает.
Но, вангую, что пример неправильный.
Код
=ПРАВСИМВ(ПОВТОР(ЛЕВСИМВ(A1);$D$1)&A1&ПРАВСИМВ(B1;$D$1);$D$1)
=ПОВТОР(ЛЕВСИМВ(A1);МАКС(0;$D$1-ДЛСТР(A1)-ДЛСТР(B1)))&ПРАВСИМВ(A1;МАКС(0;$D$1-ДЛСТР(B1)))&ПРАВСИМВ(B1;$D$1)
Изменено: МатросНаЗебре - 31.10.2025 11:44:38
Посчитать количество строк содержащих интервал времени
 
Цитата
написал:
Сегодня до 6-00 утра и Вчера с 18-00 до 24-00
Код
=СЧЁТЕСЛИМН(A:A;">="&(СЕГОДНЯ()-1+ВРЕМЯ(18;0;0));A:A;"<="&(СЕГОДНЯ()+ВРЕМЯ(6;0;0)))
Посчитать количество строк содержащих интервал времени
 
Цитата
написал:
Сегодня до 6-00 утра
Код
=СЧЁТЕСЛИМН(A:A;">="&СЕГОДНЯ();A:A;"<="&(СЕГОДНЯ()+ВРЕМЯ(6;0;0)))
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 290 След.
Наверх