Код VBA (копирование и вставка из одной таблицы Excel в другую без использования формул)

Я включил скриншоты таблиц ниже. Я практически ничего не знаю о коде VBA, поэтому мне нужна небольшая помощь, чтобы решить проблему.

Итак, в книге 1 в ячейке L15 у нас есть рассчитанный столбец % DT (время простоя) из-за проектирования, который рассчитывается с использованием функций ФИЛЬТР и СУММ.

Было бы здорово, если бы я мог еженедельно переносить эту цифру в столбец C рабочей тетради 2, начиная с ячейки C175, относящейся к текущей неделе (неделя 16). Когда число в ячейке D15 обновляется еженедельно, я бы хотел, чтобы оно добавляло новое число в столбец C (неделя 17, 18....).

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

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.CountLarge > 1 Then Exit Sub
    If Intersect(Target, Range("A28:C315")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Dim desWS As Worksheet, x As Long
    Set desWS = Workbooks("Workbook 2.xlsx").Sheets("Update 2023 & 2024 ENG % DT")
    x = desWS.Range("B2:B" & Rows.Count).Cells.SpecialCells(xlCellTypeBlanks).Row-1
    desWS.Range("C" & x) = Range("L15").Value
    Application.ScreenUpdating = True
End Sub

Спасибо за помощь, Джоэл

Я попробовал приведенный выше код и не знаю, куда идти дальше.

Рабочая тетрадь 1:

Рабочая тетрадь 2:

Рабочая тетрадь 1 (A28:C315 — Журнал ежедневных отчетов):

Рабочая тетрадь 1 (обновленный столбец):

В настоящее время вы копируете только значение в Range("L15"). Вам было бы полезно включить примеры данных в виде таблицы или скриншота, поскольку многие люди не будут скачивать файлы из неизвестных источников. Кроме того, если эти ссылки перестанут работать, вопрос станет бесполезным для будущих пользователей S.O.

cybernetic.nomad 29.04.2024 14:50

Отвечает ли это на ваш вопрос? Как избежать использования Select в Excel VBA

Dominique 29.04.2024 14:55

Ваш первый скриншот не включает исходный диапазон A28:C315?

Tim Williams 29.04.2024 17:54

@TimWilliams Я включил скриншот части диапазона. Это просто ежедневный журнал отчетов о любых простоях и о том, какой отдел стал причиной простоя.

Joel Archbold 30.04.2024 09:20
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
4
88
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте это - оно будет соответствовать неделе + году

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim destWS As Worksheet, m, wk, yr
    
    If Target.CountLarge > 1 Then Exit Sub
    If Intersect(Target, Range("A28:C315")) Is Nothing Then Exit Sub
    
    Set destWS = Workbooks("Workbook 2.xlsx").Worksheets("Update 2023 & 2024 ENG % DT")
    wk = Me.Range("B4").Value
    yr = Year(Date)
    
    m = destWS.Evaluate ("MATCH(" & wk & "&" & yr & ",A:A&B:B,0)") 'match week+year
    
    If Not IsError(m) Then                                 'got a match?
        destWS.Cells(m, "C").Value = Me.Range("L15").Value 'fill the value
    Else
        MsgBox "No match for week = " & wk & " year = " & yr & " !", vbExclamation
    End If
End Sub

Это сработало хорошо. Однако ячейка выше обновляется, поскольку в 2021–2024 годах запланировано несколько недель 17 с обновлением в 2021 году. Я подумывал о добавлении столбца с годом и задавался вопросом, как мне обновить код, чтобы также проверить год и связать его с B5 рабочей книги 1. Я добавил обновленное изображение выше.

Joel Archbold 01.05.2024 12:21

Будет ли код использовать текущий год для поиска правильной строки?

Tim Williams 01.05.2024 17:49

См. изменения выше, чтобы узнать, как сопоставить оба значения.

Tim Williams 01.05.2024 17:56

Спасибо за помощь. Это работает так, как я хотел. Надеюсь, я чему-то научился в процессе.

Joel Archbold 02.05.2024 09:18
Private Sub Worksheet_Change(ByVal Target As Range)
Dim destWS As Worksheet, m, wk, yr

If Target.CountLarge > 1 Then Exit Sub
If Intersect(Target, Range("A28:C315")) Is Nothing Then Exit Sub

Set destWS = Workbooks("Workbook 2.xlsx").Worksheets("Update 2023 & 2024 ENG % DT")
wk = Me.Range("B4").Value
yr = Me.Range("B5").Value
m = destWS.Evaluate("=MATCH(""wk" & "yr"",A1:A200&B1:B200,0)") 'find the week number in ColA
If Not IsError(m) Then                                 'got a match?
    destWS.Cells(m, "D").Value = Me.Range("L15").Value 'fill the value
Else
    MsgBox "No week number match for '" & wk & "' !", vbExclamation
End If

Конец субтитра

Я пробовал этот код, но он, похоже, не работает. Однако, когда я меняю его на это, он делает:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim destWS As Worksheet, m, wk, yr

If Target.CountLarge > 1 Then Exit Sub
If Intersect(Target, Range("A28:C315")) Is Nothing Then Exit Sub

Set destWS = Workbooks("Workbook 2.xlsx").Worksheets("Update 2023 & 2024 ENG % DT")

m = destWS.Evaluate("=MATCH(""17" & "2024"",A1:A200&B1:B200,0)") 'find the week number in ColA
If Not IsError(m) Then                                 'got a match?
    destWS.Cells(m, "D").Value = Me.Range("L15").Value 'fill the value
Else
    MsgBox "No week number match for '" & wk & "' !", vbExclamation
End If

Конец субтитра

Я получаю ошибку 2042, которую видел на другой странице, однако попробовал как вариант, так и двойной вариант с предложенными параметрами. (stackoverflow.com/questions/15526784/…)

Joel Archbold 01.05.2024 16:12

Другие вопросы по теме