У меня есть рабочая книга, где у меня есть одна рабочая таблица, которая содержит много данных.
Моя цель - создать макрос, который вставит формулу в отдельный лист для копирования данных с первого листа. Давайте назовем первый лист "Numbers1", а второй лист "TidyNumbers1".
На листе "TidyNumbers1" я хочу перебрать каждую ячейку от столбца A до M и строки с 1 по 60. Итак, у меня есть макрос, который до сих пор выглядит так:
Sub updateFormulasForNamedRange()
Dim row, col, fieldCount As Integer
colCount = 13
RowCount = 60
For col = 1 To colCount
For row = 1 To RowCount
Dim strColCharacter
If col > 26 Then
strColCharacter = Chr(Int((row - 1) / 26) + 64) & Chr(((row - 1) Mod 26) + 65)
Else
strColCharacter = Chr(row + 64)
End If
Worksheets("TidyNumbers1").Cells(row, col).Formula = "=IF(Numbers1!E" & col & "<>0;Numbers1!" & strColCharacter & row & ";"")"
Next row
Next col
End Sub
Но формула должна выглядеть следующим образом для столбца A, строка 2:
IF(Numbers1!E2<>0;Numbers1!A2;"")"
И формула в столбце A, строка 3 должна выглядеть следующим образом:
IF(Numbers1!E3<>0;Numbers1!A3;"")"
Формула в столбце B, строка 2 должна выглядеть следующим образом:
IF(Numbers1!E2<>0;Numbers1!B2;"")"
Другими словами, формула проверяет, равно ли значение в столбце E, строке%, 0, и копирует его, если выполняются условия.
Но я вижу, что мне нужно перевести мою целочисленную переменную Row с буквами, потому что формуле, вероятно, нужно «A» вместо 1. Кроме того, я получаю ошибку 1004 (ошибка приложения или объекта), если я просто попробуйте использовать:
Worksheets("Numbers1").Cells(row, col).Formula = "=IF(Numbers1!E" & row & "<>0;Numbers1!" & col & row & ";"")"
Я ясно вижу, что целая строка должна быть переведена в буквы, если это возможно. Или если у кого-то есть другие предложения, которые могут сработать. Кроме того, ошибка 1004 мне непонятно, почему происходит. Я могу определить строковую переменную и установить точно такое же значение, и ошибки нет. Так что, наверное, это строка формулы, которая жаловалась на это?