Страницы: 1
RSS
адрес ячейки с применением переменной
 
Добрый день всем!  
Просветите, пожалуйста, в следующем вопросе. Никак не могу найти ответ.  
 
Если мы указываем в макросе адрес ячейки через переменную i в случае, если i обозначает номер строки, то пишем, например A " & i & ".  
 
А каким образом указывать адрес, когда i обозначает номер столбца? Как тогда указывать адрес.  
 
Проблема возникла, когда я в макросе в ячейку Cells(j,i) пытаюсь вставить формулу: =ПОИСКПОЗ(Cells(1,i),'" & MyPath & "[" & MyName & "]31-е'!R1,0).
Не знаю, как указать адрес ячейки вместо Cells(1,i).
 
cells(номер строки,номер столбца)
 
Проще всего использовать  
Cells(j,i).FormulaR1C1  
или  
Cells(j,i).FormulaR1C1Local
 
Может не совсем ясно выразился.  
 
Пишу макрос. В макросе есть такая строка:  
 
Cells(j, i).Select  
   ActiveCell.Formula = _  
       "=MATCH(Cells(1,i), '" & MyPath & "[" & MyName & "]31-е'!R1,0)"
 
Но когда макрос запускается в ячейке получается: =ПОИСКПОЗ(Cells(1;i); 'C:\Users\...\Desktop\[Заказы.xls]31-й'!R1;0). Как сделать так, чтобы в этой формуле вместо "Cells(1,i)" был адрес ячейки.
 
ActiveCell.Formula = _  
"=MATCH(" & Cells(1, i).Address & ", '" & MyPath & "[" & MyName & "]31-å'!R1,0)"
 
Попробуйте  
Cells(j, i).FormulaR1C1 = "=MATCH(R1C,'" & MyPath & "[" & MyName & "]31-е'!R1C18,0)"
 
SergeyU, я вот тоже не очень понимаю. Может Вы хотите в виде Range("A1"), где единичка - будет переменная (i)?    
Вопрос: а зачем вообще формула, если уже есть макрос?
 
Hugo, Казанский - спасибо!  
Hugo - Ваш совет помог. Казанский, по Вашему варианту выдает ошибку:    
Run-time error '1004':  
Application-defined or object-defined error  
 
Юрий М, у меня есть файл со статистикой в виде: 1-й столбец - код продукта, 2-й столбец - наименование, 1-я строка - даты. На пересечении столбцов и дат - клиентский заказ по продукту на конкретную дату.  
 
Я в свою очередь хочу вытягивать из данного закрытого файла часть статистики: данные по некоторой продукции на определенные даты. Забиваем в 1-й столбец нужные коды, в 1-ю строку нужные даты, запускаем макрос, который вытягивает нужные цифры из главного файла.  
Думал, как это сделать. Додумался только до способа вносить в ячейки формулы, а затем избавиться от формул, оставив только значения. Собственно вот что получилось:  
 
Sub Макрос3()  
   Dim k As Integer, m As Integer  
   k = Cells(Rows.Count, 1).End(xlUp).Row  
   m = Cells(1, Columns.Count).End(xlToLeft).Column  
   MyPath = "C:\Users\...\Desktop\"  
   MyName = "Заказы.xls"  
     
   For i = 3 To m  
       If Cells(1, i) > 0 Then  
           For j = 2 To k  
               Cells(j, i).Select  
               ActiveCell.Formula = "=VLOOKUP(A" & j & ", '" & MyPath & "[" & MyName & "]31-й'!$A:$BZ, MATCH(" & Cells(1, i).Address & ",'" & MyPath & "[" & MyName & "]31-й'!$1:$1,0),0)"
           Next j  
       End If  
   Next i  
   Range(Cells(2, 3), Cells(k, m)).Select  
   Selection.Copy  
   Selection.PasteSpecial Paste:=xlPasteValues  
 
End Sub
 
Так попробуйте - чуть побыстрее должно быть:  
 
Sub Макрос3()  
Dim k As Integer, m As Integer  
k = Cells(Rows.Count, 1).End(xlUp).Row  
m = Cells(1, Columns.Count).End(xlToLeft).Column  
MyPath = "C:\Users\...\Desktop\"  
MyName = "Заказы.xls"  
 
For i = 3 To m  
If Cells(1, i) > 0 Then  
For j = 2 To k  
Cells(j, i).Formula = "=VLOOKUP(A" & j & ", '" & MyPath & "[" & MyName & "]31-й'!$A:$BZ, MATCH(" & Cells(1, i).Address & ",'" & MyPath & "[" & MyName & "]31-й'!$1:$1,0),0)"
Next j  
End If  
Next i  
Range(Cells(2, 3), Cells(k, m)).Value = Range(Cells(2, 3), Cells(k, m)).Value  
 
End Sub
 
Вы, видимо, попытались вставить кусок формулы в стиле R1C1 в формулу в стиле А1.  
Так, конечно, не получится.  
Просто в стиле R1C1 формула часто одинакова для всего диапазона, ее не надо составлять индивидуально для каждой ячейки. И ввести ее можно сразу в весь диапазон, без цикла.  
Попробуйте после заполнения диапазона ячейками остановить макрос, переключить стиль ссылок на R1C1 и посмотреть формулы.
 
Спасибо Всем!
Страницы: 1
Читают тему
Наверх