Я хочу иметь макрос, который будет:
- Определить на странице («Оригинал») значение ячейки ($ E8, дата)
- Перейдите на другую страницу («Передача»), (имя страницы может отличаться, но имя соответствующей страницы отображается в «Оригинале» $ Z $ 1.)
- Посмотрите вниз на столбец «Трансфер», в котором перечислены каждый понедельник (диапазон дат начинается с A20, текст выше).
- Найдите понедельник перед датой $ E8 (поэтому для $ E8 = суббота 17-го будет понедельник-12)
- Вставьте строку BENEATH в строку понедельника (перед строкой, в которой написано «Пн 19»)
- Стереть этот ряд (так что строка идет Mon-12, пусто, Mon-19
- Вырезать / Копировать из («Оригинал $ E8») диапазона A8: H8
- Перейти на страницу «Трансфер»
- Вставьте этот выбор A8: H8 в строку, созданную в 5.
- Вернитесь назад и делайте то же самое за $ E9, пока вся информация не будет помещена в «Transfer».
Ячейки, которые я дал, являются правильными ячейками, даты, которые я только что составил (они меняются для каждого аккаунта в любом случае).
Эрик очень любезно предоставил мне код, который я изменил, а именно:
Public Sub do_stuff()
Dim date_to_look_for As String
Dim row As Integer
date_to_look_for = Range("'Original'!K8").Value
'^L: This is the cell that you are reading from. Ensure it is the MONDAY formula
row = 20
'^L: This is where the Transfer date values start
Do Until row = Range("'Transfer'!A1").End(xlDown).row + 1 'create our loop.
'Notice that the .end function will find the end of the data in a column
If Range("'Transfer'!A" & row).Value = date_to_look_for Then
'^L: Look for Original (X) Value specified above (make sure it's Monday).
Range("'Transfer'!" & row + 1 & ":" & row + 1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'^L: Once
Range("'Transfer'!A" & row + 1 & ":H" & row + 1).Value = Range("'Original'!A8:H8").Value
'^L:This is WHERE it will paste '^L: This is what will copy
Exit Sub 'no sense in running loop more if already found
End If
row = row + 1
Loop
'If code gets here then the date was never found! so tack to end of list
Dim endrow As Integer
endrow = Range("'Transfer'!A1").End(xlDown).row
Range("'Transfer'!A" & endrow & ":H" & endrow).Value =
Range("'Original'!A8:H8").Value
'^L: What is this?
End Sub
(Сообщения L: являются моими заметками, когда я выяснил, что делал каждый раздел - пожалуйста, не стесняйтесь исправлять меня, если я неправильно понял. Другие зеленые заметки принадлежат Эрику, и я не уверен, что понимаю эти кусочки. Хотя это действительно нужно, пока это работает, но если вы хотите научить меня программированию, не стесняйтесь: D)
Моя проблема сейчас в том, как сделать так, чтобы он зацикливался так, чтобы он работал до первоначальных значений (в данном случае столбец K, поэтому он переходит к K9, K10 и т. Д., И делает то же самое? и удалить из оригинального листа после передачи?
Спасибо всем, кто помог, вы, ребята, великолепны!
источник
Ответы:
Это должно делать то, что вы ищете. Я прокомментировал код, чтобы вы могли точно прочитать, что происходит. Обратите внимание, что этот код использует переменную типа Range, что означает, что переменные rTransfer и rOriginal ссылаются на фактические ячейки на листе.
Надеюсь это поможет! Удачи!
источник
MsgBox ("Can't find the Monday for ") & rOriginal & ". Searching for Value " & dMonday
Итак, вот пример, который, я считаю, отражает то, что вы пытаетесь сделать в общем смысле. Я установил две вкладки в своей книге с надписью Перенос и Оригинал, как и вы. Я настроил свою вкладку «Оригинал», чтобы она выглядела следующим образом:
Данные в A, B, C, D на самом деле не имеют значения. У меня есть столбцы F и G, чтобы определить, какой датой является «последний понедельник». Конечно, это можно сделать в одной камере, но я разбил ее на части, чтобы вы могли лучше понять. Таким образом, в этом примере моя ячейка F2 имеет = WEEKDAY (A2) -2, поскольку функция WEEKDAY возвращает день недели в виде числа. Я установил G2 как = A2-F2, чтобы фактически показать «дату последнего понедельника».
Мой лист перевода выглядит следующим образом:
Таким образом, отсюда нам нужно, чтобы макрос посмотрел, какая строка является последней датой понедельника на вкладке «Передача». Мы также должны убедиться, что он существует. В моем примере, если он не существует, я просто добавлю его к основанию ...
Вот что я написал для моего примера с большим количеством комментариев:
Обратите внимание, как я могу скопировать данные за один раз, используя функцию Range (). Value, а также обратите внимание, как я могу также указать диапазон.
После запуска макроса, показанного выше, вы должны увидеть это на вкладке Transfer:
источник