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

Страницы: 1
Копирование строки ниже, если в ячейке есть определённый текст
 
Всем добрый день!
Есть файл с несколькими листами, на которых присутствует список кодов, и данные для каждого из них.
В некоторых ячейках указывается один код, а в некоторых идёт перечисление кодов через запятую ",".

Подскажите пожалуйста, как с помощью макроса можно перенести значения после запятой на новую строку и скопировать в неё все данные из исходной строки, а так же в исходной строке оставить только первое значение до запятой. Пустые строки должны остаться пустыми.

Без макроса решил это с помощью вкладки "данные -> текст по столбцам -> разделитель запятая", потом собрал все получившиеся значения в 1 столбец и через формулу
Код
=ВПР(СЦЕПИТЬ("*";$A9;"*");'Исх. список 1'!$A$9:$AQ$50;СТОЛБЕЦ(Результат_1!B$8);0)
все собрал на новом листе.
Можно было бы оставить и этот алгоритм, но таких листов в файле может быть от 2 до 30 и обрабатывать каждый из них руками очень долго.

p.s. Пробовал записать свои действия через "Запись макроса", получается очень много мусора и при внесении в него изменений перестает работать =(.
Ку-Ку мой мальчик!..
Внесение данных по значению в ячейке и их защита
 
Добрый день уважаемые знатоки EXCEL и гости сайта!
Помогите пожалуйста в решении задачи.
Есть некий файл по заказу лицензий, в котором ведется их учёт, куда нужна, в каком количестве, когда заказана, когда принята и выдана и тд.
Так вот, нужно следующее:
1) чтоб при внесении каких либо данных в строке, в последнем столбце проставлялось имя пользователя который менял эту самую строку, и соответственно имя пользователя в последней строке могло изменяться, в зависимости от того кто внес изменения.
2) При изменении значения в колонке со статусом заказа, дата изменения вносилась в соответствующие столбцы, но при повторном изменении статуса, данные не перезаписывалась и их нельзя было удалить (например поставить защиту на листе)

За основу взял макрос из темы

Во вложенном файле пробовал ставить пароль на лист, как советовали в комментариях из вышеуказанной темы, но данные в столбец с именем пользователя перестают записываться.
Так же брал за основу вот такой вид макроса,
Код
Private Sub Worksheet_Change(ByVal Target As Range)
        For Each cell in Target
         If Not Intersect(cell, Range("A2:A100")) Is Nothing And _
                                       Target.Offset(0,1)="" Then
                With Target.Offset(0, 1)
                    .Value = Now
                    .EntireColumn.AutoFit
                End With
       End If
    Next cell
End Sub
Но в этом случае, данные не перезаписываются даже в последнем столбце, а при удалении нескольких строк или данных из нескольких ячеек вываливается ошибка

На данный момент имею следующее:
Ку-Ку мой мальчик!..
Удаление всех листов и данных с листа оглавления
 
Добрый день, помогите пожалуйста с макросом.
За год скопилось большое количество информации, 300+ файлов, в каждом порядка 40 листов.
Необходимо удалить все листы в файлах, кроме первого (оглавление), а на первом листе необходимо удалить все данные с 3 строки в столбце "B" и все данные с 4 строки в столбце "A".

Есть вот такой макрос:
Код
Sub удаление_листов()
    On Error Resume Next
    Dim folder$, coll As Collection
    Dim StartFolder As String
   StartFolder = CreateObject("WScript.Shell").SpecialFolders("Desktop")
  Set oFD = Application.FileDialog(msoFileDialogFolderPicker)
  With oFD
        .Title = "Выбрать папку"
        .ButtonName = "Выбрать папку"
        .Filters.Clear
        .InitialFileName = StartFolder
        .InitialView = msoFileDialogViewLargeIcons
        If oFD.Show = 0 Then Exit Sub
        folder$ = .SelectedItems(1) 'считываем путь к папке
    End With
   
    If Dir(folder$, vbDirectory) = "" Then
        MsgBox "Не найдена папка «" & folder$ & "»", vbCritical, "Нет папки"
        Exit Sub
    End If

    Set coll = FilenamesCollection(folder$, "*.xlsx") ' расширение файлов
    
    If coll.Count = 0 Then
        MsgBox "В папке «" & Split(folder$, "\")(UBound(Split(folder$, "\")) - 1) & "» нет ни одного подходящего файла!", _
               vbCritical, "Что-то пошло не так!!!"
        Exit Sub
    End If
    
    Dim lLastRow As Long
    Dim LName As String
    Dim i As Integer
    Dim y As String
     Dim s As String
    i = 2
    LName = InputBox("Введите название листа: ")
    If LName Like "" Then
        MsgBox "Название листа Карл!!!", vbCritical, "Что-то пошло не так!!!"
        Exit Sub
    End If
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set PrWb = ActiveWorkbook
    PrWb.Worksheets.Add After:=Sheets(1)
    ActiveSheet.Name = ("Результат по " + LName)
    PrWb.Worksheets(2).Select
    PrWb.Worksheets(2).Cells(1, 1) = "Обработанные файлы:"
    For Each File In coll
        Set wb = Workbooks.Open(File)
        y = wb.Worksheets(1).Range("B:B").Find(LName).Address
        If y Like "" Then
            wb.Close False
        Else
            s = wb.Worksheets(1).Range(y).Hyperlinks(1).SubAddress
            s = Replace(s, "'", "")
            s = Replace(s, "#", "")
            s = Left(s, (InStr(1, s, "!", vbTextCompare) - 1))
            wb.Worksheets(1).Range(y).Rows.Delete Shift:=xlUp
            wb.Sheets(s).Delete
            wb.Close True
            PrWb.Worksheets(2).Cells(i, 1) = File
            i = i + 1
        End If
        wb = Empty
        y = Empty
    Next
    Application.DisplayAlerts = True
End Sub

Но он удаляет данные по информации введенной при запросе.
Не знаю как его адаптировать под вышеописанную ситуацию.

Помогите пожалуйста!
Изменено: S.K. - 10.01.2019 16:52:30
Ку-Ку мой мальчик!..
График отпусков с учетом праздничных дней 2019
 
Всем доброго!
Возникла следующая проблема. Благодаря сайту www.planetaexcel.ru, нашел форму (шаблон) для создания графика отпусков.
Столкнулся со следующей проблемой. Если дата отпуска попадает на праздничный день, в графике это никак не отображается. Т.е. по логике, день отпуска, который выпал на праздник,должен приплюсовываться к основному отпуску. На графике никак не могу этого добиться. Отпуск помечается поверх праздничного дня.

Сложность еще заключается в том, что файл должен быть без макросов и каких-либо не стандартных решений, т.к. будет выкладываться в общий доступ через OneDrive, а в облочном хранилище ничего из этого (макросы, функции и не стандартные формулы) не работает =(

Помогите пожалуйста с решением проблемы.
Ку-Ку мой мальчик!..
Поиск диапазона данных и перенос в новые листы книги
 
Всем доброго времени суток!
Уважаемые профессионалы VBA, форумчане и гости сайта, помогите пожалуйста с решением задачи. Все что смог найти на форуме, не помогло решить задачу. Не исключаю тот факт, что нужная информация есть, тем не менее, найти не смог :(

Есть некий файл, на одном листе размещена информация по разным производителям, 40+ производителей. Все они записаны в одном формате, один под другим, без каких либо разделителей между собой. У каждого производителя заполнено разное количество строк. Требуется выделить диапазон по каждому из них, и перенести информацию на новый лист, т.е. один лист = данные от одного производителя.

Прикладываю 2 файла:
файл 123 - информация поступает в данном виде
файл 123_итог - как должно быть на выходе

В идеале, в итоговом файле, имена листов должны соответствовать наименованию производителей, т.е. производитель 123 → имя листа 123
Ку-Ку мой мальчик!..
Расстояние между адресами, Расчет расстояния от
 
Здравствуйте ВСЕ!
Подскажите и если можете помогите.
Возможно ли в Эксель, реализовать следующее:
Есть несколько столбцов, в которых указывается Дата, ФИО, Адрес отправки, Адрес прибытия, Расстояние, в дальнейшем могут быть добавлены еще столбцы. Адресов около 300 шт., выбираются они из выпадающего списка. Нужно чтобы в столбце расстояние, проставлялся километраж от Адреса отправки до Адреса прибытия. (возможно с привязкой координат для yandex.maps или google.maps, координаты адресов имеются)
Если возможно, то подскажите пожалуйста, как это сделать?
Ку-Ку мой мальчик!..
Снятие и защита всех листов паролем
 
Добрый день.
Помогите пожалуйста с решением проблемы.
Имеется макрос, при котором на всех листах книги снимает или ставится одинаковый пароль.
При вызове макроса в 1 окне вводим пароль для снятия защиты, во 2 окне для защиты листа.
Но вот какая проблема, если надо просто снять пароль, то во втором окне нажимаем "Cancel" или "Отмена", но защита на листы все равно ставится, правда без пароля.
Как решить это недоразумение?
Код
Sub Пароль_на_все_листы()
Dim PS As String
Dim Pss As String

PS = InputBox("Пароль", "Снять защиту листа")
Pss = InputBox("Пароль", "Защита листа")

Application.ScreenUpdating = False
For i = 1 To Sheets.Count - 1
Sheets(i).Unprotect Password:=PS
Sheets(i).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=Pss
Sheets(i).EnableSelection = xlUnlockedCells
Next

End Sub
Ку-Ку мой мальчик!..
Строка "FilenamesCollection" выдает ошибку "sub or function not defined"
 
Добрый день всем!
Помогите пожалуйста решить проблему.
На одном и том же компьютере, один и тот же макрос, в одной учетке работает нормально, а во второй выдает ошибку:
"sub or function not defined" причем ругается на конкретную строчку "Set coll = FilenamesCollection(folder$, (i3 + "*.xlsx"))"
Разрешение на выполнение макросов и элементов ActiveXстоит. Solver включен.
В чем может быть проблема?
Ку-Ку мой мальчик!..
Вставка данных из с нескольких листов одной книги. Макрос.
 
Добрый день, помогите пожалуйста с макросом.

Имеется один общий файл компании, в котором сводится вся информация по работе с поставщиками. 1 лист - 1 поставщик
Требуется определить имя листа и из этого файла скопировать данные, с каждого листа, и вставить с заменой имеющихся данных в отдельные файлы поставщиков, на основании определенного имени. Кол-во файлов со временем будет добавляться.
Пример:
"Общий документ" - В документе 10 листов (Лист1 , Лист2, Лист3, ... , Лист10)
В папке 10 документов (Поставщик Лист1, Поставщик Лист2, ... , Потсавщик Лист10)
Надо данные из "Общий документ" с "Лист1" скопировать в документ "Поставщик Лист1", с "Лист2" скопировать в документ "Поставщик Лист2" и тд.

На данный момент есть вот такой макрос, все данные вводятся  в ручную:


Код
Sub Копируем_листы_в_другую_книгу()


    Dim bookconst As Workbook
    Dim abook As Workbook
    Set abook = ActiveWorkbook 'присваиваем перменную активной книге
    Set bookconst = Workbooks.Open("C:\Users\User\Desktop\Документы\Поставщик1.xlsx") 'присваиваем перменную книге куда необходимо копировать данные
         'переходим в активную книгу откуда необходимо скопировать данные
    abook.Worksheets("Лист1").Activate
    Range("A:I").Copy 'копируем определенный диапазон листа
    bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные
    Range("A:I").Select 'встаем на ячейку А1
    'вставляем данные ячеек
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
        'вставляем форматы ячеек
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
        'сохранить текущую книгу
    bookconst.Save
        'Закрыть книгу
    bookconst.Close
    abook.Activate
    
        'Книга 2
    Set bookconst = Workbooks.Open("C:\Users\User\Desktop\Документы\Поставщик2.xlsx") 'присваиваем перменную книге куда необходимо копировать данные
         'переходим в активную книгу откуда необходимо скопировать данные
    abook.Worksheets("Лист2").Activate
    Range("A:I").Copy 'копируем определенный диапазон листа
    bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные
    Range("A:I").Select 'встаем на ячейку А1
    'вставляем данные ячеек
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
        'вставляем форматы ячеек
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
        'сохранить текущую книгу
    bookconst.Save
        'Закрыть книгу
    bookconst.Close
    abook.Activate
    
        'Книга 3
    Set bookconst = Workbooks.Open("C:\Users\User\Desktop\Документы\Поставщик3.xlsx") 'присваиваем перменную книге куда необходимо копировать данные
         'переходим в активную книгу откуда необходимо скопировать данные
    abook.Worksheets("Лист3").Activate
    Range("A:I").Copy 'копируем определенный диапазон листа
    bookconst.Worksheets("Лист1").Activate 'активируем лист куда необходимо вставить данные
    Range("A:I").Select 'встаем на ячейку А1
    'вставляем данные ячеек
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
        'вставляем форматы ячеек
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
        'сохранить текущую книгу
    bookconst.Save
        'Закрыть книгу
    bookconst.Close
    abook.Activate
    
    End Sub
   


В этом макросе столкнулся с еще одной проблемой, пока в документах нет информации, все работает нормально, но стоит внести в данные, как выдает ошибку:

Run-time error '1004': Для этого все объединенные ячейки должны иметь одинаковый размер.

Хотя копирую одни и те же данные, из одних и тех же ячеек, с одним и тем же форматированием.
Помогите пожалуйста.
Изменено: S.K. - 08.05.2018 15:54:20
Ку-Ку мой мальчик!..
Страницы: 1
Наверх