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

Страницы: 1
Убрать переносы и пробелы в тексте ячеек из диапазона
 
Здравствуйте всем !

Сделал макрос по удалению переносов и пробелов
переносы 2 видов: Chr(10) и Chr(13) - появляются при копировании из разных источников
пробелы - Application.WorksheetFunction.Trim (пробелы внутри строки) и WorksheetFunction.Trim (пробелы снаружи строки)
Работать то работает - только медленно очень тк диапазон  в 500-1000 ячеек медленно все крутит
Как его переделать чтоб быстрее работал ?
Код
Public AdrE As String
Sub УбираемПереносыПробелыE_Лист ()
Application.ScreenUpdating = False
Application.EnableEvents = False
AdrE = ActiveCell.Address

Dim LastRow As Long, rng As Range
With ActiveSheet.UsedRange

LastRow = ActiveSheet.UsedRange.Rows.Count
'Убираем_пробелы_переносы 4 столбец
ActiveSheet.Range("E4", Cells(LastRow, 5)).Select
Dim RangeE As Range, CellE As Range
Set RangeE = Intersect(Selection, ActiveSheet.UsedRange)

 'переносы 2 видов 4 столбец
RangeE.Replace What:=Chr(10), Replacement:=" ", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
RangeE.Replace What:=Chr(13), Replacement:=" ", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

For Each CellE In RangeE 'пробелы 4 столбец
CellE.Value = Application.WorksheetFunction.Trim(CellE.Value) 'пробелы внутри строки
CellE.Value = WorksheetFunction.Trim(CellE.Value) 'пробелы снаружи строки
Next 

End With

ActiveSheet.Range(AdrE).Select

Application.EnableEvents = True
Application.ScreenUpdating = True 
End Sub
Изменено: igrek2 - 16.06.2018 11:04:00
Запретить автосохранение во время выполнения макроса
 
Здравствуйте всем !

Есть макрос автосохранения в книге который работает каждые 15 мин
Но заметил что могут идти конфликты - когда происходит выполнение любого другого макроса1 и автосохранение (тоже получается макрос2)
Те по сути когда два макроса сталкиваются по времени - книга мертво зависает
Как запретить автосохранение  во время выполнения другого любого макроса (или отложить его на время выполнения любого макроса в книге)
Макрос автосохранения ниже - что прилепить к нему чтобы выполнить это условие ?

В книгу
Код
Private Sub Workbook_Open()
'сохраняем книгу при открытии и по таймеру в каждые 15 мин
Call АвтосохранениеКнига 'сохраняем книгу по таймеру в каждые 15 мин
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
'при закрытии книги автосохранение выключается (может открываться книга в закрытом состоянии )
 On Error Resume Next
Application.OnTime EarliestTime:=TimeAvto, Procedure:="АвтосохранениеКнига", Schedule:=False
End Sub 

В модуль

Код
Public TimeAvto As Date
Sub АвтосохранениеКнига()
TimeAvto = Now + TimeValue("00:15:00")
Application.OnTime TimeAvto, "АвтосохранениеКнига"
End Sub 
Формат даты в активной ячейке
 
Здравствуйте !

Столкнулся с корректным форматированием активной ячейки как даты пользуясь рекодером
что увидел при форматировании ячейки в окне "Формат ячеек"
1)  Дата - Язык русский - тип выдает со звездочкой вида *12.04.2013    рекодер пишет формат .NumberFormat = "m/d/yyyy"

Делаем обратную задачу - макросом
пишу в макросе .NumberFormat = "dd.mm.yyyy;@"  - проверяю что записано в ячейке Дата-Язык азербайджанский (кириллица) -тип без звездочки 12.04.2013
Тогда так
пишем в макросе .NumberFormat = "d/m/yyyy;@"  - проверяю что записано  в ячейке Дата-Язык английский (зимбабве) -тип без звездочки 2.04.2013
Тогда так
пишу в макросе .NumberFormat = "m/d/yyyy;@"  - проверяю что записано  в  ячейке Дата-Язык английский (зимбабве) -тип без звездочки 4.02.2013
Соображаю вроде что значек @ вроде переводит в другой язык ладно (хотя если просто сделать "@" - это просто текстовый формат  и что тогда m/d/yyyy;@ - может перевод даты в другой юникод ??)

Смотрю на запись рекодера с русским языком -  .NumberFormat = "m/d/yyyy" и вижу почемуто перепутаны месяцы и дни в последовательности
Делаю так вроде как надо
пишу в макросе .NumberFormat = "d/m/yyyy"  - проверяю что записано  в   ячейке Дата-Языка нет(все форматы Д.М.ГГГГ) -тип без звездочки 2.4.2013

2)Понимаю что Ничего не понимаю  :)   делаю как рекодер записал в п.1 выше
пишу в макросе .NumberFormat = "m/d/yyyy"  - проверяю что записано  в    ячейке Дата-Язык русский -тип со звездочкой вида *12.04.2013 то что надо

вопросы такие:
Почему в русском формате m/d/yyyy перепутаны дни и месяцы местами - а отображает как надо день-месяц-год
Что означает @ в макросе при прописывании формата - это перевод в другую кодировку или что ?
В чем разница ActiveCell.NumberFormat = "m/d/yyyy"   и  ActiveCell.Value = Format(ActiveCell.Value, "m/d/yyyy")  - разницы не заметил ?
Изменено: igrek2 - 11.06.2018 08:24:19
Сортировка дат в массиве по возрастанию с выгрузкой в ComboBox1.List
 
Здравствуйте !

Нашел опробовал макрос - макрос обрабатывает диапазон 3-го столбца с 4 строки,  и должен сортировать по возрастанию даты - после это выгрузка в  ComboBox1.List. Но вот беда с датами именно - не встают они в список по возрастанию непонятно почему - именно с датами такое
Как поправить макрос именно под правильную сортировку дат ?
Код
Private Sub UserForm_Initialize()

Dim Arr(), i As Long, s As String, iLastRow As Long, x
iLastRow = Cells(Rows.Count, 2).End(xlUp).Row
Arr = Range(Cells(4, 3), Cells(iLastRow, 3))
    On Error Resume Next
    With New Collection
        For Each x In Arr()
            s = Trim(x)
            If Len(s) > 0 Then
                If IsEmpty(.Item(s)) Then
                    For i = 1 To .Count
                        If s < .Item(i) Then Exit For
                    Next
                    If i > .Count Then .Add s, s Else .Add s, s, Before:=i
                End If
            End If
        Next
    ReDim Arr(1 To .Count)
        For i = 1 To .Count
            Arr(i) = .Item(i)
        Next
    End With

Me.ComboBox1.List = Arr

End Sub
  
Перенос данных из листа одной книги в лист другой книги ниже заполненной строки
 
Здравствуйте !

Есть 2 книги: ТаблицаКО.xlsm  и ТаблицаКО2.xls - обе в одной папке
Нужно с ТаблицаКО2.Лист(1)  перенести данные в ТаблицаКО.Лист(1)
Оба листа идентичны по колонкам и переносимому диапазону - надо диапазон A4:F ТаблицаКО2  перенести в A4:F ТаблицаКО

Только вот условия переноса для меня трудные не могу сделать -
перенести надо с дописыванием (ниже последней заполненной строки)
и проверить еще на дубли переносимый диапазон из листа ТаблицаКО2
- если в переносимом диапазоне в строках по столбцу E есть совпадения  со столбцом E куда переносим то эти строки не переносятся - а удаляются просто
те переносятся не дубли

Пока хватило только на то чтобы массивы определить откуда куда переносим - но эти условия не знаю как сделать
Пример на всякий случай приложил с 2 файлами
Код
Sub test()
Dim sht As Worksheet, sht1 As Worksheet
Dim arr(), arr1(), i&, j&, x&
Set sht = Workbooks("ТаблицаKO.xlsm").Sheets(1)
Set sht1 = Workbooks("Новая_выгрузка.xls").Sheets(1)
With sht
    i = .Cells(.Rows.Count, "b").End(xlUp).Row
    'j = .Cells(3, .Columns.Count).End(xlToLeft).Column
    arr = .Range(.Cells(4, "a"), .Cells(i, 6))
End With
With sht1
    i = .Cells(.Rows.Count, "b").End(xlUp).Row
    'j = .Cells(3, .Columns.Count).End(xlToLeft).Column
    arr1 = .Range(.Cells(4, "a"), .Cells(i, 6))
For i = LBound(arr1) To UBound(arr1)

 'както надо перенести здесь

Next i
End With
End Sub
Найти и пересортировать дубликаты строк по значению столбца
 
Всем здравствуйте !

Как справится с большой таблицей в 10000 строк ?
В таблице 2 листа - "Таблица" и "Работа"
В обоих листах надо проверить строки на наличие дубликатов по значению (текст+цифры - регистр текста дб неважен) столбца "D3:D"
в диапазоне автофильтра "A6:V10000"  и пересортировать только одинаковые строки таблицы на обоих листах - дубли поставить рядом в нижних строках
те "подтянуть" только одинаковые строки по значению столбца D снизу вверх
остальные строки не сортируются-их порядок то же остается
MSGbox "На листе "" найдено N совпадений" где N это  число блоков строк с совпадениями в конце
Ума хватило только чтоб начало и конец макроса сделать ..
Файл с примером во вложении
Код
Sub Sort()
Application.ScreenUpdating = False
Dim LastRow As Long, i As Long, N As Long, N2 As Long
'N и N2 - количество блоков совпадений на листах Таблица и Работа
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 6 To LastRow
'If Cells(i, 6).Value = Cells(i + 1, 6).Value Then


'как здесь пересортировать только одинаковые строки
'(подтянуть только одинаковые строки по значению столбца  D снизу вверх)
'остальные строки не сортируются
'и N,N2  посчитать

'End If
If N > 0 Or N2 > 0 Then
MsgBox "На листе Таблица найдено" & " " & N & " " & "блоков дубликатов по ФИО" & vbCrLf & _
"На листе Работа найдено" & " " & N2 & " " & "блоков дубликатов по ФИО" & vbCrLf & "", 64, "Итоги поиска дубликатов по ФИО"
End If
If N = 0 And N2 = 0 Then
MsgBox "Ничего не найдено !" & vbCrLf & "Дубликатов нет." & vbCrLf & "", 64, "Итоги поиска дубликатов по ФИО"
End If
Next
Sheets("Работа").Select
Rows("7:10000").EntireRow.AutoFit 'высота строки
Sheets("Таблица").Select
Rows("7:10000").EntireRow.AutoFit 'высота строки
Range("C7").Select
Application.ScreenUpdating = True
End Sub

Изменено: igrek2 - 01.09.2017 23:45:53
Как прикрутить функцию поиска в форму
 
Добрый день всем !

Нашел  функцию Function FindAll для поиска работает  - но как ее прикрутить в созданную форму для поиска в книге ?
 В форме
TextBox1 - вводим текст для поиска  
ListBox1   - выводятся результаты поиска со ссылками результатов

Пример с формой во вложении
Изменено: igrek2 - 21.01.2017 14:54:54
Ошибка в макросе по условию разница дат
 
Добрый день
Написал макрос по след условиям
В колонку Критерий вписываются слова  "Истек срок действия" по условиям:
1) J4 : посл.зап.строка  > 1
2) Q4 : посл.зап.строка  > 1
3)Дата в колонке R  минус сегодняшняя дата
больше 365 дней
Код
Sub Srok()
Dim LastRow As Long, i As Long, Num As Long, lDaysCnt As Long
    LastRow = Cells(Rows.Count, 2).End(xlUp).Row
    lDaysCnt = DateDiff("d", Cells(i, 18).Value, Now)
    For i = 4 To LastRow
        If Cells(i, 10) > 1 And Cells(i, 17) > 1 And lDaysCnt > 365 Then
            Cells(i, 6) = "Истек срок действия"
        End If
    Next
End Sub
но ругается на строку
lDaysCnt = DateDiff("d", Cells(i, 18).Value, Now)
видимо Cells(i, 18).Value надо както в формате даты прописать - но как ?  

Файл приложил.
Изменено: igrek2 - 15.01.2017 12:27:25
Макрос который изменяет размер шрифта на цифрах
 
Добрый день
Как реализовать макрос который бы обрабатывал текст в выделенном диапазоне ячеек следующим образом:
Просто текст 10 шрифтом, а цифры 14 шрифтом ?

те например в ячейке текст
Телефон 8-902-3456677 ООО Прима
при этом слова "Телефон" и "ООО Прима" - 10 шрифт
а цифры 8-902-3456677 - 14 шрифт ?
Появление текста в ячейке при заливке цветом
 
Здравствуйте
такой вопрос - как сделать так чтобы при закрасе определенным цветом ячейки в ней появлялся определенный текст
при снятии заливки ячейки текст исчезал

пример приложил
Как правильно активировать книгу
 
Как правильно активировать книгу в заданной директории  ? VBA ругается на этот код...
Код
Dim wb As Workbook
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\ПАПКА_1\Файл1_" & Format(Date, "dd.mm.yyyy") & "_" & Format(Time, "HH.mm") & ".xlsm")
    Workbooks(wb).Activate
    'Windows(wb).Activate

Макрос - зебра (закрас столбцов через один) в "плавающем "диапазоне
 
Добрый день всем !

Макрос - зебра (закрас столбцов через один) в "плавающем "диапазоне - заполненные  столбцы  будут  дополнятся постоянно  соответственно и зебра красится до последнего заполненного столбца
Как в данном макросе ограничить закрас  по строке 26 (закрас дб только в диапазоне таблицы) ??
пример и макрос прилагаю
Код
Function RepeatRange(ByRef SourceRange As Range, ByVal Count As Long, _
                     ByVal Offset As Long, ByVal Direction As XlDirection) As Range
    ' функция получает в качестве параметра диапазон SourceRange,
    ' количество повторений диапазона Count, и шаг смещения Offset
    ' Возвращает диапазон, являющийся объединением копий диапазона SourceRange,
    ' смещённого на Offset ячеек Count раз в направлении Direction.

    Select Case Direction
        Case xlDown: OffsetX = 0: OffsetY = Offset
        Case xlUp: OffsetX = 0: OffsetY = -Offset
        Case xlToRight: OffsetX = Offset: OffsetY = 0
        Case xlToLeft: OffsetX = -Offset: OffsetY = 0
    End Select
 
    Set RepeatRange = SourceRange
    For i = 1 To Count - 1
        Set RepeatRange = Union(RepeatRange, SourceRange.Offset(OffsetY * i, OffsetX * i))
    Next i
End Function


Sub Зебра()
a = Cells.Find(What:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
RepeatRange(Columns(3), a / 2, 2, xlToRight).Interior.ColorIndex = 15
End Sub
Как макросом пронумеровать строки ?
 
Приветствую всех !

Вопрос вроде простой но не знаю как сделать ?
Как макросом на листе под названием "Список" пронумеровать по порядку в столбце A только те строки в которых есть данные в столбце B ?
Страницы: 1
Loading...