Я пытаюсь создать макрос excel, который включает копирование данных между двумя книгами (скажем, wb1 и wb2).
В wb2 я хочу назначить определенную формулу ряду ячеек определенного столбца. Таким образом, ячейка wb1, указанная в формуле, должна быть увеличена.
F1(wb2) = COUNTIF(range in wb1,contidion)*A1(wb1)*B1(wb1)
F5(wb2) = COUNTIF(range in wb1,condition)*A2(wb1)*B2(wb1)
.
.
.
F50(wb2)= COUNTIF(range in wb1,condition)*A10(wb1)*B10(wb1)
Как я могу добиться этого с помощью макросов excel?
Копировать значения из одной книги в другую не так уж сложно, но мне непонятно, почему вы указываете, что в ячейках назначения (например, F5 на wb2) уже есть значения. Если вы хотите скопировать значения в эти ячейки назначения, они заменят уже существующие данные. Вот макрос для копирования. Этот код предполагает, что book1 и book2 уже открыты. Код копирует данные с первого листа книги book1 и помещает их на первый лист book2.
Sub copy_cells()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim row As Integer
Set wb1 = Workbooks("book1.xlsm")
Set wb2 = Workbooks("book2.xlsm")
For row = 1 To 10
wb2.Worksheets(1).Cells(row * 5, "F").Value = wb1.Worksheets(1).Cells(row, "D").Value
Next
End Sub
@SherwinR, вы хотите поместить формулу в F5 из wb2? Когда вы говорите, что хотите скопировать из D1 из wb1 в F5 из wb2, кажется, что вы хотите заменить то, что находится в F5, тем, что находится в D1, поэтому его предыдущее содержимое кажется неуместным. Это то, что вам нужно прояснить.
Из ваших вопросов вы говорите, что у F5 есть формула, которая ссылается на D1, но ваш пример («D1 (wb1) = xуF5 (wb2)»), похоже, указывает, что у D1 есть формула, которая ссылается на F5
Да, именно.. пожалуйста, игнорируйте мой предыдущий пример... Имена ячеек являются просто примерами в каждом случае.. Так что это не имеет никакого отношения к моему предыдущему сообщению.. Просто примите во внимание текущий пример.
Это простое дело — составить строку для построения формулы для каждой ячейки. Код ниже создаст эти формулы в wb2:
F5: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A1*[Book1.xlsm]Sheet1!B1
F10: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A2*[Book1.xlsm]Sheet1!B2
F15: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A3*[Book1.xlsm]Sheet1!B3
F20: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A4*[Book1.xlsm]Sheet1!B4
F25: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A5*[Book1.xlsm]Sheet1!B5
F30: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A6*[Book1.xlsm]Sheet1!B6
F35: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A7*[Book1.xlsm]Sheet1!B7
F40: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A8*[Book1.xlsm]Sheet1!B8
F45: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A9*[Book1.xlsm]Sheet1!B9
F50: =COUNTIF([Book1.xlsm]Sheet1!D1:D25,">5")*[Book1.xlsm]Sheet1!A10*[Book1.xlsm]Sheet1!B10
Вот код:
Sub copy_cells()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim row As Integer
Set wb1 = Workbooks("book1.xlsm")
Set wb2 = Workbooks("book2.xlsm")
For row = 1 To 10
wb2.Worksheets(1).Cells(row * 5, "F").Formula = "=COUNTIF([Book1.xlsm]Sheet1!D1:D25,"">5"")*[Book1.xlsm]Sheet1!A" & row & "*[Book1.xlsm]Sheet1!B" & row
Next
End Sub
Спасибо за помощь. Что я имею в виду под уже существующими значениями по умолчанию, которые не важны и могут быть заменены.... Но актуальная проблема в том, что я просто не могу напрямую назначить значения, как указано выше, потому что ячейка в wb2 вычисляется на основе несколько ячеек от wb1.. На этот раз я постараюсь быть более точным в своем вопросе. Я внесу правку в свой исходный пост.