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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 25 След.
Вставить один макрос во все книги в папке
 
Цитата
SDamir написал:
Есть макрос
Мы его не видим.
Цитата
SDamir написал:
У меня есть папка с шаблонами
Перебор файлов в папке, полно тем на данном форуме. Найдёте решение сами.
Цитата
SDamir написал:
необходимо внедрить данный макрос
Рекомендую ознакомится с данной темой: Programming The VBA Editor. Там есть ваше решение. Точнее узнаете в Adding A Procedure To A Moduleю Там ещё много чего интересного для себя найдёте. Удачи.
Изменено: MikeVol - 14.06.2025 14:59:36 (Дополнил ответ)
Макросом копировать и вставить строки на двух листах
 
Цитата
Deniska3 написал:
чтобы при выборе вставлялась не в таком формате "=$A$28",
А где это так вставляется? И я вообще у вас в файле не видел
Цитата
Deniska3 написал:
Ссылки относительные
Зря я тоже не прошёл мимо вашей темы...Хотелка у вас какая-та непонятная...
Макросом копировать и вставить строки на двух листах
 
Deniska3, Смотрю никто вам не хочет отвечать...
Код
Option Explicit

Sub Копировать4Строки()
    Dim wsGrusha    As Worksheet
    Set wsGrusha = ThisWorkbook.Worksheets("Груша")

    Dim startRow    As Long
    startRow = ActiveCell.Row

    With Application
        .ScreenUpdating = False
        .DisplayAlerts = False
        .Calculation = xlCalculationManual

        With ThisWorkbook.Worksheets("Яблоко")

            If ActiveSheet.Name <> .Name Then
                MsgBox "Макрос запускается только с листа 'Яблоко'.", vbExclamation
                Application.Calculation = xlCalculationAutomatic
                Application.DisplayAlerts = True
                Application.ScreenUpdating = True
                Exit Sub
            End If

            Dim targetRow As Long
            targetRow = Application.InputBox("Введите номер строки, куда вставить скопированные строки:", "Строка вставки", Type:=1)
            If targetRow < 1 Then Exit Sub

            .Rows(startRow & ":" & startRow + 3).Copy
            .Rows(targetRow).Insert Shift:=xlDown

            wsGrusha.Rows(startRow & ":" & startRow + 3).Copy
            wsGrusha.Rows(targetRow).Insert Shift:=xlDown
        End With

        .CutCopyMode = False
        .Calculation = xlCalculationAutomatic
        .DisplayAlerts = True
        .ScreenUpdating = True
    End With

    MsgBox "Готово: строки " & startRow & ":" & (startRow + 3) & " скопированы и вставлены на строку " & targetRow & " на обоих листах.", vbInformation
End Sub
Изменено: MikeVol - 13.06.2025 13:53:37
Макросом копировать и вставить строки на двух листах
 
Цитата
Deniska3 написал:
И вставить с нужной мне строки.
Тоесть, тоже вы укажите
Цитата
Deniska3 написал:
встаю на
куда именно?
Создание чека в Excel
 
Павел Павлов, Привет. Можно сделать на примере данной процедуры:
Код
Private Sub CommandButton2_Click()
    Dim wsSistema   As Worksheet
    Set wsSistema = ThisWorkbook.Worksheets("СИСТЕМА")

    Dim LastRowSist As Long
    LastRowSist = wsSistema.Range("B9999").End(xlUp).Row

    With ThisWorkbook.Worksheets("ЧЕК")
        .Range("A5:F9999").ClearContents
        .Range("F1").Value = .Range("F1").Value + 1
        .Range("A4").Value = "Дата:"
        .Range("A4:F4").Borders(xlEdgeBottom).LineStyle = xlDot

        .Range("B4").Value = Format(Now, "dd.mm.yyyy")
        .Range("B4").NumberFormat = "m/d/yyyy"

        .Range("E4").Value = Format(Now, "hh:mm:ss")
        .Range("E4").NumberFormat = "[$-x-systime]h:mm:ss AM/PM"

        With .Range("B4:D4")
            .Merge
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlCenter
        End With

        With .Range("E4:F4")
            .Merge
            .HorizontalAlignment = xlCenter
            .VerticalAlignment = xlCenter
        End With

        Dim i As Long, rowDest As Long
        rowDest = 5

        For i = 2 To LastRowSist

            With .Range("A" & rowDest & ":C" & rowDest + 1)
                .Merge
                .WrapText = True
                .VerticalAlignment = xlCenter
                .Value = wsSistema.Cells(i, 2).Value    ' Наименование
            End With

            With .Range("A" & rowDest & ":F" & rowDest + 1)
                .Borders(xlEdgeBottom).LineStyle = xlDot
            End With

            .Cells(rowDest, 4).Value = wsSistema.Cells(i, 4).Value & "*"    ' Кол-во
            .Cells(rowDest, 5).Value = wsSistema.Cells(i, 5).Value          ' Цена
            .Cells(rowDest, 6).Value = wsSistema.Cells(i, 6).Value          ' Сумма
            .Cells(rowDest, 6).NumberFormat = "#,##0.00 _?"

            ' Строка скидки
            .Cells(rowDest + 1, 4).Value = "СК:"
            .Cells(rowDest + 1, 5).Value = ""   ' Неизвестно откуда брать данные ???
            .Cells(rowDest + 1, 6).Value = ""   ' Неизвестно откуда брать данные ???
            .Cells(rowDest + 1, 6).Font.Bold = True

            rowDest = rowDest + 2    ' Следующий товар — через 2 строки
        Next i

        ' Строки Итого и Скидка
        .Cells(rowDest, 5).Value = "Итого:"
        .Cells(rowDest, 6).Value = Me.TextBox3.Value
        .Range(.Cells(rowDest, 5), .Cells(rowDest, 6)).Borders(xlEdgeBottom).LineStyle = xlDot

        .Cells(rowDest + 1, 5).Value = "Скидка:"
        .Cells(rowDest + 1, 6).Value = ""   ' Если появится логика скидок в блоке "Строка скидки" то можно будет просуммировать конечную скидку
        .Range(.Cells(rowDest + 1, 5), .Cells(rowDest + 1, 6)).Borders(xlEdgeBottom).LineStyle = xlDot

        ' Смена №
        With .Cells(rowDest + 2, 1)
            .Value = "Смена №"
            .HorizontalAlignment = xlLeft
            .VerticalAlignment = xlBottom
            .WrapText = False

            With .Font
                .Name = "Courier New"
                .Size = 8
            End With

        End With

        lastRow = .Range("A:A").Find("*", , xlValues, xlWhole).Row
        Debug.Print lastRow

        With .Range("A" & rowDest - 1 & ": F" & lastRow)
            .Font.Name = "Courier New"
            .Font.Size = 10
            .Font.Italic = True
        End With

        ' Очистка и обновление
        wsSistema.Range("A2:F" & LastRowSist + 1).ClearContents
        UserForm1.ListBox1.Clear

        UserForm1.Label35 = Format(Me.TextBox4, "###0.00")
        UserForm1.Label36 = Format(Me.ItmName, "###0.00")
        wsSistema.Range("L11").Value = CDbl(Me.TextBox3.Value) + CDbl(wsSistema.Range("L11").Value)

        ' Печать
        .PageSetup.PrintArea = "$A$1:$F$50"
        .PrintOut
    End With

    ' Завершение
    Unload Me
    UserForm1.ItmScan.SetFocus
    ItemNum = ""
    ItemQnty = ""
End Sub

Private Sub TextBox4_Change()

    If Me.TextBox4 = Empty Then
        Me.ItmName = ""
        Exit Sub
    Else

        If TextBox4 Like ",*" Then
            Me.ItmName = ""
            Exit Sub
        Else
            Me.ItmName.Text = Me.TextBox4 - Me.TextBox3
            Me.ItmName = Format(Me.ItmName, "fixed")
        End If

    End If

End Sub
Но процедура не полная так как не вносит данные в рабочий лист РЕЕСТР ПРОДАЖ. Но это не беда, вы сможете внести (дополнить сами) логику из процедуры CommandButton1_Click Так же читайте комментарии в коде. Удачи.
Создание чека в Excel
 
Павел Павлов, Приветсвую вас. Рад что у вас всё хорошо!
По теме, Павел ну вы же знает что объеденение ячеек зло!

И да, проэкт неполный. Где остальные формы?
Изменено: MikeVol - 01.06.2025 01:08:00 (Дополнил ответ)
Подсчет данных со всех листов
 
С соседнего форума
Цитата
Делаю табели для разных заказчиков, каждый табель на отдельном листе.
Вам скорее всего сюда надо обратится с такой постановкой ТЗ!
отображение ВЫДЕЛЕННОЙ ячейки в другой ячейке
 
Код
Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub

    If Not Intersect(Target, Range("B4:B10")) Is Nothing Then
        [B1] = ActiveCell
    End If

End Sub
Макрос VBA подсчет общего количества деталей, Подсчет общего количества деталей
 
Wtoolka, Доброго времени суток. Если gling не против мы возьмём его предложенную формулу для рассчёта значенй через Evaluate и запишем их на лист.
Код
Option Explicit

Sub WtoolkaEvaluate()

    With ThisWorkbook.Worksheets("Лист1")
        Dim i       As Long

        Dim lastRow As Long
        lastRow = .Cells(.Rows.Count, "B").End(xlUp).Row

        For i = 2 To lastRow
            .Cells(i, "D").Value = Evaluate("IFERROR(INDEX($C$1:C" & i - 1 & ", MATCH(LEFT(B" & i & ", FIND(""."", B" & i & ") - 1), $B$1:B" & i - 1 & ", 0)) * C" & i & ", C" & i & ")")
            '            .Cells(i, "D").Formula = "=IFERROR(INDEX($C$1:C" & i - 1 & ", MATCH(LEFT(B" & i & ", FIND(""."", B" & i & ") - 1), $B$1:B" & i - 1 & ", 0)) * C" & i & ", C" & i & ")"
        Next i

    End With

End Sub
Если же нужна формула в ячейках то раскомментируйте строку в коде
Код
            '            .Cells(i, "D").Formula = "=IFERROR(INDEX($C$1:C" & i - 1 & ", MATCH(LEFT(B" & i & ", FIND(""."", B" & i & ") - 1), $B$1:B" & i - 1 & ", 0)) * C" & i & ", C" & i & ")"
и закомменируйте строку в коде
Код
            .Cells(i, "D").Value = Evaluate("IFERROR(INDEX($C$1:C" & i - 1 & ", MATCH(LEFT(B" & i & ", FIND(""."", B" & i & ") - 1), $B$1:B" & i - 1 & ", 0)) * C" & i & ", C" & i & ")")
Надеюсь объяснил понятным языком. gling, Вам Спасибо за формулу. Удачи.
Изменено: MikeVol - 27.05.2025 00:16:11 (Орфография...)
Копирование данных с условиями, автоподстановка авто сортировка
 
71050, Вам же в первой вашей теме указали на ваши проблемы.
Изменение строк таблицы (удаление / добавление) по условию с помощью макроса (VBA)
 
Да, кстатит, заметил только что небольшую ошибку в своём коде при переносе формул из верхних строк. В умных таблицах не требуется вставка формул, формулы сами поддтягиваются из везней строки вниз. И так, данный блок кода
Код
        For i = 1 To rowsToAdd

            Dim newRow As ListRow
            Set newRow = lo1.ListRows.Add

            Dim j   As Long

            For j = 1 To lo1.ListColumns.Count

                With newRow.Range.Cells(1, j)
                    .Formula = lastRow.Range.Cells(1, j).Formula
                End With

            Next j

        Next i
мы можем сократить
Код
        For i = 1 To rowsToAdd
            lo1.ListRows.Add
        Next i
не нарушив логику кода, просто вставляем новую строку. Замените и у себя так-же.
Изменение строк таблицы (удаление / добавление) по условию с помощью макроса (VBA)
 
Цитата
Tomen992 написал:
И не понял, почему не появился в списке макросов.
А он и не появится там так как вы просили
Цитата
Tomen992 написал:
1. При открытии файла
об этом я в своём сообщении указал
Цитата
MikeVol написал:
следуйщий код, вставьте его в модуль ЭтаКнига (ThisWorkbook).
Смотрите скришот ниже что это означает.

Обновление! Откройте файл пример, появится сообщение: Шеф, всё ровно! Будь Здоров! ? Теперь, добавьте строку в таблицу "Т" так чтоб ячейка в колонке "Название" была пуста на рабочем листе "2", закройте файл сохранив изминения. Теперь откройте файл снова, удалилась добавленная строка ранее? Думаю да. И так далее...
Изменено: MikeVol - 26.05.2025 14:49:52 (Дополнил ответ файлом примером)
Изменение строк таблицы (удаление / добавление) по условию с помощью макроса (VBA)
 
Tomen992, Доброго времени суток. Для приведёного файла примера можно использовать следуйщий код, вставьте его в модуль ЭтаКнига (ThisWorkbook).
Код
Option Explicit

Private Sub Workbook_Open()
    Dim ws          As Worksheet
    Set ws = ThisWorkbook.Worksheets("2")

    Dim lo1 As ListObject, lo3 As ListObject
    Set lo1 = ws.ListObjects("Т")
    Set lo3 = ws.ListObjects("П")

    Dim checkValue As Long, maxValue As Long
    checkValue = lo3.DataBodyRange.Cells(1, 1).Value
    maxValue = Application.WorksheetFunction.Max(lo1.ListColumns(1).DataBodyRange)

    If checkValue = maxValue Then
        MsgBox "Шеф, всё ровно! Будь Здоров!", vbInformation
        Exit Sub
    ElseIf checkValue < maxValue Then
        Dim i       As Long

        ' Удаление строк с пустым значением в столбце "Название"
        Dim nameColIndex As Long
        nameColIndex = lo1.ListColumns("Название").Index

        For i = lo1.ListRows.Count To 1 Step -1

            If Trim(lo1.DataBodyRange(i, nameColIndex).Value) = "" Then
                lo1.ListRows(i).Delete
            End If

        Next i

    Else

        ' Добавление строк, разница между значениями
        Dim rowsToAdd As Long
        rowsToAdd = checkValue - maxValue

        Dim lastRow As ListRow
        Set lastRow = lo1.ListRows(lo1.ListRows.Count)

        For i = 1 To rowsToAdd

            Dim newRow As ListRow
            Set newRow = lo1.ListRows.Add

            Dim j   As Long

            For j = 1 To lo1.ListColumns.Count

                With newRow.Range.Cells(1, j)
                    .Formula = lastRow.Range.Cells(1, j).Formula
                End With

            Next j

        Next i

    End If

End Sub
Возможно я вас не правильно понял, Сорян.
Перенос значений на другой лист, Перенос
 
Цитата
kilevra написал:
Файл скинуть, знаете, не у всех есть комп под рукой!
Знаете, у меня тоже не всегда он под рукой. Люди когда обращаются за помощью на форум они стараются (должны быть рядом с компьютером), по крайней мере когда создают тему (задают вопрос).
Вы же когда идёте в магазин за чем-то вы сначала плотите и только после вы получаете товар, тоесть при наличии финансовых средств в кошельке. Не? Так и тут, Создаю тему, маскимально описываю свой вопрос и прикладываю файл (согласно правилам форума). И получаю результат (ответ).

kilevra, Результат вы получили согласно вашему файлу из поста #18
После вы, ой, да у меня таблица совсем другого формата, что-же мне делать? Вай, бедный я, что-же мне делать? Помогите мне.
58 постов уже в ващей данной теме... Когда можно было решить вопрос максимально за 8 постов при наличии Нормального файла примера! Сами же усложнили себе в получение помощи.
Изменено: MikeVol - 26.05.2025 12:57:32 (Дополнил ответ)
Перенос значений на другой лист, Перенос
 
Цитата
Sanja написал:
Файл-пример (Excel, до 300 кб) приложите. Как есть - Как надо
Получилось то что я писал выше
Цитата
MikeVol написал:
Эта тема без файла примера обречена на долгие гадания и бессмысленной траты времени.
Дальше сами. Перед созданием темы вы Обязаны были Ознакомится с Правилами форума!  А именно Пункт 2.3
Цитата
Приложите файл(ы) с примером (общим весом не более 300Кб) в реальной структуре и форматах данных того, что есть сейчас и того, что хотелось бы на выходе.
и всё остальное до 2.7. Удачи вам!
Изменено: MikeVol - 26.05.2025 11:50:38 (Дополнил ответ)
Перенос значений на другой лист, Перенос
 
Цитата
kilevra написал:
чтобы вы выбирали нужное количество и автоматом эта позиция без фото переносилась на другой лист
Вставляете "Количество" на листе Лист1 и смотрим на листе Лист2 результат. Я так понял задачу.
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Column <> 4 Then Exit Sub

    ' Проверка: введено ли число (количество)
    If IsNumeric(Target.Value) And Target.Value <> "" Then

        With ThisWorkbook.Worksheets("Лист2")

            Dim article As Variant
            article = Me.Cells(Target.Row, 1).Value
            If article = "" Then Exit Sub

            Dim foundRow As Variant
            foundRow = Application.Match(article, .Columns(1), 0)

            If IsError(foundRow) Then

                Dim lastRow As Long
                lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
                If .Cells(1, 1).Value = "" Then lastRow = 1

                .Cells(lastRow, 1).Value = article                          ' Артикул
                .Cells(lastRow, 2).Value = Me.Cells(Target.Row, 4).Value    ' Количество
                .Cells(lastRow, 3).Value = Me.Cells(Target.Row, 5).Value    ' Цена
            Else

                Dim newQty As Variant
                newQty = Me.Cells(Target.Row, 4).Value

                Dim oldQty As Variant
                oldQty = .Cells(foundRow, 2).Value

                If newQty <> oldQty Then
                    .Cells(foundRow, 2).Value = newQty    ' Обновим количество если оно отличается
                End If

            End If

        End With

    End If

End Sub
При изминение "Количество" на листе Лист1 обновляется данные на листе Лист2.
Перенос значений на другой лист, Перенос
 
Цитата
Sanja написал:
Для чего такие вопросы?
Какие вопросы? Знаю что это бесплатная ветка.
Перенос значений на другой лист, Перенос
 
kilevra, с таким файлом примером вам данная статья поможет, Расширенный фильтр и немного магии. После скопировать отфильтрованый диапазон на другой лист. М-да...
Изменено: MikeVol - 25.05.2025 15:46:31 (Орфография...)
Перенос значений на другой лист, Перенос
 
Цитата
kilevra написал:
Там не то, что нужно.
Уверены? А если я его вам адаптирую под ваши нужды, задонатите 100$ куда вам я вам напишу? Как бы спор...
Изменено: MikeVol - 25.05.2025 14:18:47
Перенос значений на другой лист, Перенос
 
Цитата
kilevra написал:
У вас есть лист excel который весит 300 мб
Нет у нас такого листа! Вот когда вы нам его покажете, выложите сюда обрезанный вариант тогда можно будет продолжить дискуссию или заняться решением вашего вопроса. А пока что мы уходим из данной темы.
Будет файл - будет и решение. Без файла примера Google вам в помощь, там много полезных тем можно найти. Удачи.

Обновление. Ниже под ваше темой есть схожая тема как можно решить. Но там другие критерии, можно адаптировать.
Изменено: MikeVol - 25.05.2025 14:03:41 (Дополнил ответ)
Перенос значений на другой лист, Перенос
 
Эта тема без файла примера обречена на долгие гадания и бессмысленной траты времени. kilevra, не заинтересован в решение своего вопроса!
Перенос таблицы с макросами из одного лтста на другой
 
Temniy.divers, Надеюсь так будет достачно понятно увидеть и понять вам вашу ошибку.
Перенос таблицы с макросами из одного лтста на другой
 
Temniy.divers, Ну и в какой строке кода данная ошибка или гадать надо мне?

Мне за вас назначить макрос к кнопке?
Изменено: MikeVol - 25.05.2025 13:11:22 (Дополнил ответ)
Перенос таблицы с макросами из одного лтста на другой
 
Temniy.divers, Без дублирования данных на одном (База) и том-же рабочем листе.
Код
Option Explicit

Private Sub CommandButton2_Click()
    Dim i           As Long
    Dim iLR         As Long
    Dim ДатаРождения As Date
    Dim Лет         As Integer

    ' Укажите рабочий лист, чтобы избежать неоднозначности
    Dim ws          As Worksheet
    Set ws = ThisWorkbook.Worksheets("База")

    ' Найти последнюю заполненную строку в столбце A
    Dim iLastRow    As Long
    iLastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    With Application
        .ScreenUpdating = False
        .Calculation = xlCalculationManual

        With ThisWorkbook.Worksheets("ДР")

            ' Очистить диапазон N2:U последней строки
            .Range(.Cells(2, 1), .Cells(.Rows.Count, 9)).ClearContents

            ' Перебирать строки с 2 по последнюю
            For i = 2 To iLastRow

                ' Проверить, находится ли дата в диапазоне от 0 до 30 дней с пропуском пустых ячеек
                If ws.Cells(i, "F").Value <> "" And IsDate(ws.Cells(i, "F").Value) Then

                    If DateSerial(Year(Date), Month(ws.Cells(i, "F")), Day(ws.Cells(i, "F"))) - Date >= 0 And _
                            DateSerial(Year(Date), Month(ws.Cells(i, "F")), Day(ws.Cells(i, "F"))) - Date < 30 Then

                        ' Найти следующую пустую строку в столбце N
                        iLR = .Cells(.Rows.Count, "A").End(xlUp).Row + 1

                        ' Копировать значения
                        .Cells(iLR, "A").Resize(1, 7).Value = ws.Cells(i, "B").Resize(1, 7).Value

                        ' Вычисляем количество лет
                        ДатаРождения = ws.Cells(i, "F").Value
                        Лет = DateDiff("yyyy", ДатаРождения, Date)

                        ' Корректировка, если день рождения в этом году еще не наступил
                        If Month(Date) < Month(ДатаРождения) Then
                            Лет = Лет - 1
                        ElseIf Month(Date) = Month(ДатаРождения) And Day(Date) < Day(ДатаРождения) Then
                            Лет = Лет - 1
                        End If

                        .Cells(iLR, "H").Value = Лет

                        ' Вставляем дату и месяц в столбец U
                        .Cells(iLR, "I").Value = Day(ДатаРождения) & " " & MonthName(Month(ДатаРождения))

                        'Вспомогательный столбец для сортировки, здесь будет храниться дата в числовом формате
                        .Cells(iLR, "J").Value = DateSerial(Year(Date), Month(ДатаРождения), Day(ДатаРождения))

                        If .Cells(iLR, "J").Value < Date Then
                            .Cells(iLR, "J").Value = DateSerial(Year(Date) + 1, Month(ДатаРождения), Day(ДатаРождения))
                        End If

                    End If

                End If

            Next i

            ' Сортировка по столбцу V (вспомогательному, он потом удалится)
            iLR = .Cells(.Rows.Count, "A").End(xlUp).Row

            If iLR > 1 Then    'Убедиться, что есть данные для сортировки

                ' Определяем диапазон для сортировки
                Dim sortRange As Range
                Set sortRange = .Range("A2:J" & iLR)

                ' Сначала убедимся, что SortFields очищены
                .Sort.SortFields.Clear

                ' Добавляем поле сортировки
                .Sort.SortFields.Add Key:=.Range("J2:J" & iLR), _
                        SortOn:=xlSortOnValues, _
                        Order:=xlAscending, _
                        DataOption:=xlSortNormal

                ' Настраиваем параметры сортировки
                With .Sort
                    .SetRange sortRange
                    .Header = xlNo    ' проставить  xlYes, если у есть заголовки (проверь параметр таблицы)
                    .MatchCase = False
                    .Orientation = xlTopToBottom
                    .SortMethod = xlPinYin
                    .Apply    ' Применяем сортировку
                End With

            End If

            'Очистка вспомогательного столбца V
            .Range("J2:J" & iLR).ClearContents
        End With

        .Calculation = xlCalculationAutomatic
        .ScreenUpdating = True
    End With

End Sub
Можно его (код) ещё сократить, но лень. Удачи.
Изменено: MikeVol - 25.05.2025 12:17:03
Перенос таблицы с макросами из одного лтста на другой
 
Просто скопировать
Код
Option Explicit

Sub Рассчитать_ДП()

    With ThisWorkbook.Worksheets("ДР")
        .Range(.Cells(2, 1), .Cells(.Rows.Count, 2)).ClearContents
        ThisWorkbook.Worksheets("База").Range("N2:U" & ThisWorkbook.Worksheets("База").Cells(ThisWorkbook.Worksheets("База").Rows.Count, "N").End(xlUp).Row).Copy Destination:=.Range("B2")
        .Range("A1").Value = "ФО"
    End With

End Sub
vba Поиск по одному условию и копирование определенных столбцов данных из другого файла, Копирование определенных столбцов из другого файла по условию
 
KatrinD, Добро Пожаловать на данный Форум!
Очень смутно понял вашу задачу, а именно ваше описание.
Я понял так:
Из книги
Цитата
KatrinD написал:
Обучение_тест
с листа
Цитата
KatrinD написал:
Обучение 2025
из колонки "E" подтянуть данные в колонку "D" книги
Цитата
KatrinD написал:
Обучение общее_тест
Цитата
KatrinD написал:
вкладка Обучение 2019-2025
согласно табельным номерам в колонке "B". Оба файла должны находится в одной папке.
Код
Option Explicit

Sub ПодтянутьОбучение()
    Dim i           As Long
    Dim tabNum      As Variant

    Dim dict        As Object
    Set dict = CreateObject("Scripting.Dictionary")

    Dim filePath    As String
    filePath = ThisWorkbook.Path & "\Обучение_тест.xlsx"

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
        .DisplayAlerts = False
        .Calculation = xlCalculationManual

        Dim wbSource As Workbook
        Set wbSource = Workbooks.Open(filePath, ReadOnly:=True)

        Dim wsSource As Worksheet
        Set wsSource = wbSource.Worksheets("Обучение 2025")

        Dim lastRowSource As Long
        lastRowSource = wsSource.Cells(wsSource.Rows.Count, "B").End(xlUp).Row

        For i = 2 To lastRowSource
            tabNum = wsSource.Cells(i, "B").Value

            If Not dict.exists(tabNum) Then
                dict.Add tabNum, wsSource.Cells(i, "E").Value
            End If

        Next i

        With ThisWorkbook.Worksheets("Обучение 2019-2025")

            Dim lastRowDest As Long
            lastRowDest = .Cells(.Rows.Count, "B").End(xlUp).Row

            For i = 2 To lastRowDest
                tabNum = .Cells(i, "B").Value

                If dict.exists(tabNum) Then
                    .Cells(i, "D").Value = dict(tabNum)
                Else
                    .Cells(i, "D").Value = "нет данных"
                End If

            Next i

        End With

        wbSource.Close SaveChanges:=False

        .Calculation = xlCalculationAutomatic
        .DisplayAlerts = True
        .EnableEvents = True
        .ScreenUpdating = True
    End With

    MsgBox "Данные обучения успешно обновлены!", vbInformation
End Sub
Но про данный пункт
Цитата
KatrinD написал:
из столбца E если есть данные вставить 1
ничего не понял.
Изменено: MikeVol - 23.05.2025 23:29:45 (Дополнил ответ файлом примером)
Изменился автоматически формат ячеек во всей книге, Неизвестная причина изменеия формата пустых ячеек во всей книге
 
finka,
Код
Option Explicit

Sub finka()
    Dim ws As Worksheet, rng As Range, cell As Range, lastCell As Range

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual

    On Error Resume Next

    For Each ws In ThisWorkbook.Worksheets

        With ws.UsedRange
            Set rng = .SpecialCells(xlCellTypeBlanks)

            If Not rng Is Nothing Then

                With rng
                    .Font.Name = "Calibri"
                    .Font.Size = 11
                    .Interior.ColorIndex = xlNone    ' Убрать заливку
                    .Borders.LineStyle = xlNone      ' Убрать границы
                    .NumberFormat = "General"        ' Формат по умолчанию

                    ' и так далее, можете сами указать (дополнить) необходимыми вами дествиями с ячейками
                End With

            End If

        End With

        Set rng = Nothing
    Next ws

    On Error GoTo 0
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True

    MsgBox "Форматирование пустых ячеек завершено.", vbInformation
End Sub
Как сформировать из одной таблицы другую с меньшим числом столбцов но с одинаковой датой
 
Ещё вариант, таж-же
Цитата
Sanja написал:
Начальная и конечная даты в ячейках F4 и G4 листа Условка соответственно
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Cells.Count > 1 Then Exit Sub

    If Not Intersect(Target, Range("F4:G4")) Is Nothing Then
        Application.ScreenUpdating = False
        Dim i As Long, lastrow As Long, lastrow2 As Long
        Dim checkDate As Date

        With ThisWorkbook.Worksheets("2018....")

            If Not IsDate(ThisWorkbook.Worksheets("Условка").Range("F4")) Or Not IsDate(ThisWorkbook.Worksheets("Условка").Range("G4")) Then Exit Sub

            Dim startDate As Date
            startDate = CDate(ThisWorkbook.Worksheets("Условка").Range("F4").Value)

            Dim endDate As Date
            endDate = CDate(ThisWorkbook.Worksheets("Условка").Range("G4").Value)

            ThisWorkbook.Worksheets("Условка").Range("A6:H" & ThisWorkbook.Worksheets("Условка").Cells(ThisWorkbook.Worksheets("Условка").Rows.Count, 1).End(xlUp).Row).ClearContents
            lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row

            For i = 9 To lastrow

                If IsDate(.Cells(i, 16)) Then
                    checkDate = CDate(.Cells(i, 16).Value)

                    If checkDate >= startDate And checkDate <= endDate Then
                        lastrow2 = ThisWorkbook.Worksheets("Условка").Cells(ThisWorkbook.Worksheets("Условка").Rows.Count, 1).End(xlUp).Row + 1
                        ThisWorkbook.Worksheets("Условка").Cells(lastrow2, 1).Value = .Cells(i, 1).Value     ' № п/п
                        ThisWorkbook.Worksheets("Условка").Cells(lastrow2, 2).Value = .Cells(i, 2).Value     ' Модель шасси
                        ThisWorkbook.Worksheets("Условка").Cells(lastrow2, 3).Value = .Cells(i, 5).Value     ' № лота
                        ThisWorkbook.Worksheets("Условка").Cells(lastrow2, 4).Value = .Cells(i, 3).Value     ' Комплектация
                        ThisWorkbook.Worksheets("Условка").Cells(lastrow2, 5).Value = .Cells(i, 9).Value     ' код VIN
                        ThisWorkbook.Worksheets("Условка").Cells(lastrow2, 6).Value = .Cells(i, 10).Value    ' VIN ISUZU 2
                        ThisWorkbook.Worksheets("Условка").Cells(lastrow2, 7).Value = .Cells(i, 12).Value    ' № двигателя
                        ThisWorkbook.Worksheets("Условка").Cells(lastrow2, 8).Value = .Cells(i, 19).Value    ' Примечание
                    End If

                End If

            Next i

        End With

        Application.ScreenUpdating = True
    End If

End Sub
Добавление таблицы с помощью макросов
 
Link_03, Приложите небольшой файл пример в формате эксель, как есть - как надо. Так у вас больше шансов получить желаемый ответ на ваш вопрос. А все ваши текстовые файлы можете удалить из поста.
Да, и Добро Пожаловать на данный форум!
VBA Runtime error 1004 на защищенном листе, GoalSeek - ошибка при включенной защите листа, при снятой защите все работает
 
Ксения П., все комментарии к ней прочитали? Там найдёте своё решение, да и на форуме полно схожих тем. Стоит только поискать.
Изменено: MikeVol - 20.05.2025 22:24:41 (Дополнил ответ)
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 25 След.
Наверх