Excel VBA - цикл по диапазону и установить формулу в каждой ячейке - PullRequest
3 голосов
/ 11 июля 2011

У меня есть рабочая книга, где у меня есть одна рабочая таблица, которая содержит много данных. Моя цель - создать макрос, который вставит формулу в отдельный лист для копирования данных с первого листа. Давайте назовем первый лист "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 мне непонятно, почему происходит. Я могу определить строковую переменную и установить точно такое же значение, и ошибки нет. Так что, наверное, это строка формулы, которая жаловалась на это?

Ответы [ 2 ]

1 голос
/ 18 июля 2011

Не проще ли получить адрес ячейки с помощью функции Cells.Address?

Например:

MsgBox Cells(1, 5).Address

Показывает "$ E $ 1"

С наилучшими пожеланиями

1 голос
/ 11 июля 2011

Вот мой предыдущий пост, содержащий функции для преобразования номеров столбцов в буквы и наоборот:

VBA Поиск следующего столбца на основе входного значения

EDIT: к вашей ошибке 1004: Попробуйте что-то вроде этого:

  =IF(Numbers1!E" & row & "<>0,Numbers1!A" & row & ","""")"

(используйте ; вместо , и "" для одна кавычка в базовомстрока, """" для две кавычки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...