Увеличение ссылки на ячейку в формуле с различными смещениями — макрос Excel

Я пытаюсь создать макрос 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?

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

Ответы 2

Копировать значения из одной книги в другую не так уж сложно, но мне непонятно, почему вы указываете, что в ячейках назначения (например, 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

Спасибо за помощь. Что я имею в виду под уже существующими значениями по умолчанию, которые не важны и могут быть заменены.... Но актуальная проблема в том, что я просто не могу напрямую назначить значения, как указано выше, потому что ячейка в wb2 вычисляется на основе несколько ячеек от wb1.. На этот раз я постараюсь быть более точным в своем вопросе. Я внесу правку в свой исходный пост.

Sherwin R 17.03.2022 13:23

@SherwinR, вы хотите поместить формулу в F5 из wb2? Когда вы говорите, что хотите скопировать из D1 из wb1 в F5 из wb2, кажется, что вы хотите заменить то, что находится в F5, тем, что находится в D1, поэтому его предыдущее содержимое кажется неуместным. Это то, что вам нужно прояснить.

Gove 17.03.2022 13:36

Из ваших вопросов вы говорите, что у F5 есть формула, которая ссылается на D1, но ваш пример («D1 (wb1) = xуF5 (wb2)»), похоже, указывает, что у D1 есть формула, которая ссылается на F5

Gove 17.03.2022 13:38

Да, именно.. пожалуйста, игнорируйте мой предыдущий пример... Имена ячеек являются просто примерами в каждом случае.. Так что это не имеет никакого отношения к моему предыдущему сообщению.. Просто примите во внимание текущий пример.

Sherwin R 17.03.2022 13:42
Ответ принят как подходящий

Это простое дело — составить строку для построения формулы для каждой ячейки. Код ниже создаст эти формулы в 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

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