Сделал макрос по удалению переносов и пробелов переносы 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
Есть макрос автосохранения в книге который работает каждые 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") - разницы не заметил ?
Нашел опробовал макрос - макрос обрабатывает диапазон 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
Нашел функцию Function FindAll для поиска работает - но как ее прикрутить в созданную форму для поиска в книге ? В форме TextBox1 - вводим текст для поиска ListBox1 - выводятся результаты поиска со ссылками результатов
Добрый день Написал макрос по след условиям В колонку Критерий вписываются слова "Истек срок действия" по условиям: 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 надо както в формате даты прописать - но как ?
Добрый день Как реализовать макрос который бы обрабатывал текст в выделенном диапазоне ячеек следующим образом: Просто текст 10 шрифтом, а цифры 14 шрифтом ?
те например в ячейке текст Телефон 8-902-3456677 ООО Прима при этом слова "Телефон" и "ООО Прима" - 10 шрифт а цифры 8-902-3456677 - 14 шрифт ?
Здравствуйте такой вопрос - как сделать так чтобы при закрасе определенным цветом ячейки в ней появлялся определенный текст при снятии заливки ячейки текст исчезал
Макрос - зебра (закрас столбцов через один) в "плавающем "диапазоне - заполненные столбцы будут дополнятся постоянно соответственно и зебра красится до последнего заполненного столбца Как в данном макросе ограничить закрас по строке 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 ?