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

Страницы: 1 2 3 След.
Копирование данных по условию
 
МатросНаЗебре,  Спасибо большое, то что нужно!
Ку-Ку мой мальчик!..
Копирование данных по условию
 
Пробовал запихнуть в код цикл и Find, но запрос сильно подвисает.
Наткнулся на статью где говорят что Find не лучшее решение для таких задач, но как решить по другому, так и не понял.
Ку-Ку мой мальчик!..
Копирование данных по условию
 
Всем доброго времени суток!
Не силён в VBA, но периодически приходится в него окунаться, для решения рабочих задач.
В очередной раз прошу специалистов, экспертов и просто добрых людей помочь с решением задачи.

Суть следующая есть 2 файла Sale+ и Связка (Имена файлов могут меняться, например изменяется дата файла).
В файле Sale+ находятся данные, где к одному ID подтянут один Code, и дальше заполнена некая информация.
В файле Связка есть связки всех кодов с ID (один ID может иметь несколько разных кодов).
Что требуется сделать:
Файл Sale+ будет открываться менеджером вручную.
Далее, при выполнении макроса появляется диалоговое окно с выбором файла, из которого необходимо взять новые данные (Связка).
Добавить в файл Sale+, ниже основных данных, данные из таблицы Связка.
Проверить наличие совпадений ID из Sale+ с ID из Связка, при совпадении ID скопировать все данные в строке, начиная со столбца "C"  и до последнего заполненного.
Если совпадение не найдено, удалить запись, в таблице Sale+ добавленную ниже основных данных (т.е. вставленный ID и Code из файла Связка)

После всех операций закрыть файл Связка.


На текущий момент реализован следующий код. Который копирует все данные из файла выбранного в диалоговом окне и вставляет их ниже основных данных в файле Sale+
Код
Sub Копирование_данных()
    Dim wb As Workbook
    Dim aw As Workbook
    
    Set aw = Workbooks.Open(ActiveWorkbook.FullName)
    
    'On Error GoTo Inform
    ' открываем книгу откуда будем копировать данные
    Set wb = Workbooks.Open(Application.GetOpenFilename(fileFilter:="Книги Excel (*.xls*), *.xls*", Title:="Введите путь к файлу данных"))
    Set SourceSht = wb.Worksheets(1)
    
    ' определяем последнюю заполненную ячеку
    LastRow = SourceSht.Cells(Rows.Count, "A").End(xlUp).Row

    SourceSht.Range("A2:A" & LastRow).Copy
    
    LastRow_S_B = aw.ActiveSheet.Cells(Rows.Count, "B").End(xlUp).Offset(1, 0)
    LastRow_S_A = aw.ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0)
    
    aw.Worksheets(1).Cells(Rows.Count, "B").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
    
    SourceSht.Range("B2:B" & LastRow).Copy
    
    aw.ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValues
    
    
Exit Sub
    
Inform:
    'Вывести информационное окно с сообщением об ошибке
    MsgBox "Окно закрыто или нажата кнопка " _
    & Chr(34) & "Отмена" & Chr(34) & "!"
    If fileopenname <> False Then wb.Close (False)
End Sub
Ку-Ку мой мальчик!..
Копирование строки ниже, если в ячейке есть определённый текст
 
Msi2102,  в очередной раз огромное спасибо!
Ку-Ку мой мальчик!..
Копирование строки ниже, если в ячейке есть определённый текст
 
Msi2102,  шикарно!.


Цитата
то номера строк по Excel и повторяющиеся коды, будут отображаться на листе "Дубли"

А название листа, на котором возникли дубли, тоже будет отображаться?
Ку-Ку мой мальчик!..
Копирование строки ниже, если в ячейке есть определённый текст
 
Msi2102, спасибо за комментарий, очень важное уточнение.
По идее таких случаев быть не должно. А если появится дубль, то уже будем проверять руками причину его возникновения и что с ним делать
Ку-Ку мой мальчик!..
Копирование строки ниже, если в ячейке есть определённый текст
 
Sergius

Спасибо!

Msi2102

Спасибо!

Оба варианта подходят для решения задачи, но как по мне, вариант с  макросом удобнее.
Ку-Ку мой мальчик!..
Копирование строки ниже, если в ячейке есть определённый текст
 
Цитата
Msi2102 написал:
А что делать с пустыми, удалять?

Можно удалить, можно оставить как есть.
Главное чтоб в ячейках с кодами был один код, без запятых.

В моем примере через формулу результат получается без пустых строк.
Изменено: S.K. - 09.06.2025 14:21:48
Ку-Ку мой мальчик!..
Копирование строки ниже, если в ячейке есть определённый текст
 
Всем добрый день!
Есть файл с несколькими листами, на которых присутствует список кодов, и данные для каждого из них.
В некоторых ячейках указывается один код, а в некоторых идёт перечисление кодов через запятую ",".

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

Без макроса решил это с помощью вкладки "данные -> текст по столбцам -> разделитель запятая", потом собрал все получившиеся значения в 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
Но в этом случае, данные не перезаписываются даже в последнем столбце, а при удалении нескольких строк или данных из нескольких ячеек вываливается ошибка

На данный момент имею следующее:
Ку-Ку мой мальчик!..
Overflow (Error 6)
 
Sanja, Огромное спасибо! Все работает как надо =)

Кому интересно вот тот самый файл
Ку-Ку мой мальчик!..
Overflow (Error 6)
 
Всем добрый день, подскажите пожалуйста как быть?
Есть файл в который добавлена кнопка, в кнопке прописана команда:
Код
Private Sub CommandButton1_Click()
[L6] = IIf([l4] = "", "", IIf([l5] = "", "", IIf([o15] = 0, "", [o15] / [n29] * [l4])))
End Sub
Но при ее вызове вылетает ошибка
Overflow (Error 6)
В чем может быть проблема?

Изначально использовалась формула:
=ЕСЛИ(L4="";"";ЕСЛИ(L5="";"";ЕСЛИ(O15=0;"";O15/N29*L4)))


Догадываюсь, что ошибку может вызывать наличие 0 в ячейке O15, но не знаю как это исправить.
Если O15>0, то все работает нормально.

Что в этом случае надо сделать?
Изменено: S.K. - 03.06.2019 15:01:36
Ку-Ку мой мальчик!..
Удаление всех листов и данных с листа оглавления
 
Nordheim, RAN,
Спасибо, все работает. Ошибки не выдает.
Ку-Ку мой мальчик!..
Удаление всех листов и данных с листа оглавления
 
RAN, Добрый день.
Я правильно понимаю, что код будет удалять каждый второй лист, пока не останется один единственный?

Код работает, но в пределах открытого документа. Пробовал компоновать с уже имеющимся кодом, но увы, макрос запускается, но никаких действий не выполняется.
Ку-Ку мой мальчик!..
Удаление всех листов и данных с листа оглавления
 
Nordheim, Спасибо! Все работает =)
Ку-Ку мой мальчик!..
Удаление всех листов и данных с листа оглавления
 
Nordheim, Спасибо большое за пример. К сожалению в строке 19 возникает ошибка

Run time error 438
Object doesn't support this property or method

вот на этом месте
Код
.Range("a4:a" & lrow).ClearContents
Изменено: S.K. - 14.01.2019 10:15:17
Ку-Ку мой мальчик!..
Удаление всех листов и данных с листа оглавления
 
gling,Здравствуйте! нет не проще. Каждый файл имеет определенное имя, с кодом. И переименовывать 300+ файлов нет ни малейшего желания.
Ку-Ку мой мальчик!..
Удаление всех листов и данных с листа оглавления
 
Nordheim, Здравствуйте, да!
Ку-Ку мой мальчик!..
Удаление всех листов и данных с листа оглавления
 
Добрый день, помогите пожалуйста с макросом.
За год скопилось большое количество информации, 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
 
И снова добрый день.
Не было времени заниматься этим вопросом, и вот сейчас оно появилось.
Приношу свои извинения, сам не правильно поставил задачу. a.i.mershik, Ваш способ  работает целиком и полностью. А если будет ситуация, как я описывал.

Цитата
S.K. написал: Если отпуск по 8 число включительно, то на графике приплюсуется один день на 9 число, а хотелось бы на 11, т.к.  9.03 это суббота, а 11.03 это понедельник.
То все правильно, отпуск продляется на 1 день. и закончится 9.03. и не имеет значения суббота это или понедельник. т.к. по стуи это обычный день, а для отпуска не важно, выходной он или будний. Главное что не праздник )

Спасибо Вам большое. И еще раз извиняюсь за свою не внимательность!
Ку-Ку мой мальчик!..
График отпусков с учетом праздничных дней 2019
 
a.i.mershik,
Спасибо за формулу =) все работает, но добавляет в графике дни подряд за отпуском.
Если отпуск по 8 число включительно, то на графике приплюсуется один день на 9 число, а хотелось бы на 11, т.к.  9.03 это суббота, а 11.03 это понедельник.

Интересно это вообще реально или только мои хотелки? )))
Ку-Ку мой мальчик!..
График отпусков с учетом праздничных дней 2019
 
Никто не хочет запрещать людям уходить в отпуск. По правилам предоставления отпуска, если отпуск попадает на праздничный день, то этот день приплюсовывается к основному отпуску.
Например, сотрудник уходит в отпуск с 1 марта по 10 марта включительно, т.е. должен выйти на работу 11 марта, но т.к. у него 1 день попал на праздник (8 марта), то этот день прилюсуется к его отпуску, и выйдет он на работу не 11, а 12 марта. Как это реализовать в графике не знаю.

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

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

Помогите пожалуйста с решением проблемы.
Ку-Ку мой мальчик!..
Поиск диапазона данных и перенос в новые листы книги
 
Kuzmich, Спасибо. Такой вариант еще не пробовал, надо это исправить)
Ку-Ку мой мальчик!..
Поиск диапазона данных и перенос в новые листы книги
 
Stranded,
Спасибо большое! Все работает! изменил только, обращение к листу. Теперь макрос обращается не по имени листа, а по его порядковому номеру, т.к. он всегда будет первым, а имя могут поменять
tolstak,
Макрос запускается. Видно что он выполнялся, но при этом в файле ничего не изменяется.

Всем большое спасибо за помощь!

В другой теме, мне уже помогали с переименованием листов по имени ячейки. Забыл про этот макрос, совсем плохой стал ))) Если вдруг кому интересно:
Код
Sub Переименование_листов()
On Error Resume Next
 
Dim Rng As Range
  Set Rng = Application.InputBox(Prompt:="Выберите ячейку", _
                                   Title:="Заголовок", _
                                   Type:=8)
For i = 1 To Worksheets.Count
Worksheets(i).Activate
Worksheets(i).Name = Range(Rng.Address)
Next i
   
End Sub

Ку-Ку мой мальчик!..
Поиск диапазона данных и перенос в новые листы книги
 
DopplerEffect,
Спасибо. Про макрос это было понятно с самого начала :)
За последовательность действий в макросе, отдельное спасибо.
Ку-Ку мой мальчик!..
Поиск диапазона данных и перенос в новые листы книги
 
a.i.mershik, спасибо, но не совсем то. По ссылке, которую Вы предложили, макрос, информацию из большого количества книг, соединяет в один документ, через копирование листов. А тут требуется иное, определять диапазон данных на листе и перенести их, на новые листы этой же книги. Причем определение диапазона должно происходить по условию (например: диапазон определяется от ячейки со значением производитель и до ячейки со значением % оценок ниже 3 баллов).
Ку-Ку мой мальчик!..
Поиск диапазона данных и перенос в новые листы книги
 
Всем доброго времени суток!
Уважаемые профессионалы VBA, форумчане и гости сайта, помогите пожалуйста с решением задачи. Все что смог найти на форуме, не помогло решить задачу. Не исключаю тот факт, что нужная информация есть, тем не менее, найти не смог :(

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

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

В идеале, в итоговом файле, имена листов должны соответствовать наименованию производителей, т.е. производитель 123 → имя листа 123
Ку-Ку мой мальчик!..
Расстояние между адресами, Расчет расстояния от
 
Vladimir Chebykin, Обязательно.
Ку-Ку мой мальчик!..
Расстояние между адресами, Расчет расстояния от
 
Vladimir Chebykin, огромное Вам спасибо!!! Это то что нужно!!!
Дай Бог Вам здоровья и благополучия!
Ку-Ку мой мальчик!..
Страницы: 1 2 3 След.
Наверх