Страницы: 1
RSS
как создать цикл в макросе
 
Добрый день!  
Подскажите, пожалуйста,  как можно дописать макрос.  
Сейчас при вставке в ячейку А2 строится таблица по ячейкам В2, В3, В4.  
Необходимо что бы таблица строилась при внесении городов в ячейки А1, А2, А3.  
Нужно наверное создать цикл? как это прописать?  
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
Про циклы расскажу, после того, как ознакомитесь с правилами - max file size = 100 Kb.
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Извиняюсь не посмотрела на размер....
 
Например так:  
 
Sub f()  
Dim lr As Long, i As Long, fio As String  
With Application  
.ScreenUpdating = False  
fio = Join(.Transpose([b2:b4]), ",")
For i = 2 To 4  
   lr = Cells(Rows.Count, 2).End(xlUp).Row  
   Range("B" & lr + 1 & ":B" & lr + 3) = .Transpose(Split(fio, ","))  
   Range("A" & lr + 1) = Cells(i, 1)  
Next  
.ScreenUpdating = True  
End With  
End Sub
 
Дело в том, что таблица большая и еще много столбцов макросом заполняется в примере я привела только три столбца, также необходимо заполнять по всем трем фио только если в ячейках А2, А3, А4 указаны города, если например в ячейке А1 стоит город, а в ячейке А2 нет то таблицу заполняем только по одному городу, если есть в двух ячейках то по двум городам, если в трех по по трем.... то же самое и по ячейкам В2, В3, В4  
 
Sub Лист()  
index_row = Cells(2, 17)  
town = Cells(2, 1)  
fio = Cells(2, 2)  
fio1 = Cells(3, 2)  
fio2 = Cells(4, 2)  
 
i = index_row - 1  
If index_row = 5 Then i = 5  
index_town = 5  
Do  
   If Cells(i, 1) <> "" Then  
       index_town = i  
   End If  
   i = i - 1  
Loop Until Not (i <> 4 And Cells(i + 1, 1) = "")  
If Cells(index_town, 1) = "" Or Cells(index_town, 1) <> town Then  
   Cells(index_row, 1) = town  
   index_town = index_row  
End If  
 
If Cells(2, 2) = " " Then  
Exit Sub  
End If  
         
   Cells(index_row, 2) = fio  
   Range("C" & index_row).Select  
   ActiveCell.FormulaR1C1 = _  
       "=R[-6]C[4]+R[-6]C[5]+R[-6]C[6]"
     
   Cells(2, 17) = index_row + 1  
     
 
 
If Cells(3, 2) = "" Then  
       
       Exit Sub  
       End If  
         
 
Cells(index_row + 1, 2) = fio1  
   Range("C" & index_row + 1).Select  
   ActiveCell.FormulaR1C1 = _  
       "=R[-6]C[4]+R[-6]C[5]+R[-6]C[6]"
     
   Cells(2, 17) = index_row + 2  
     
  If Cells(4, 2) = "" Then  
       
       Exit Sub  
       End If  
         
 
Cells(index_row + 2, 2) = fio2  
   Range("C" & index_row + 2).Select  
   ActiveCell.FormulaR1C1 = _  
       "=R[-6]C[4]+R[-6]C[5]+R[-6]C[6]"
     
   Cells(2, 17) = index_row + 3  
     
End Sub
 
Sub f()  
Dim lr As Long, i As Long, fio As String  
With Application  
.ScreenUpdating = False  
For i = 2 To 4  
If Cells(i, 2) <> "" Then fio = fio & "," & Cells(i, 2)  
Next  
fio = Right(fio, Len(fio) - 1)  
For i = 2 To 4  
If Cells(i, 1) <> "" Then  
lr = Cells(Rows.Count, 2).End(xlUp).Row  
Range("B" & lr + 1 & ":B" & lr + 3) = .Transpose(Split(fio, ","))  
Range("C" & lr + 1 & ":C" & lr + 3).FormulaR1C1 = "=R[-6]C[4]+R[-6]C[5]+R[-6]C[6]"
Range("A" & lr + 1) = Cells(i, 1)  
End If  
Next  
.ScreenUpdating = True  
End With  
End Sub
 
Спасибо, но фио тоже может быть не три а меньше, один или два, по этому макросу он заполняет по трем ячейкам и если она пустая выдает #Н/Д
 
Я надеюсь это все но... (:  
 
Sub f()  
Dim lr As Long, i As Long, fio As String  
With Application  
.ScreenUpdating = False  
For i = 2 To 4  
If Cells(i, 2) <> "" Then fio = fio & "," & Cells(i, 2)  
Next  
fio = Right(fio, Len(fio) - 1)  
For i = 2 To 4  
If Cells(i, 1) <> "" Then  
lr = Cells(Rows.Count, 2).End(xlUp).Row  
Range("B" & lr + 1 & ":B" & lr + UBound(Split(fio, ",")) + 1) = .Transpose(Split(fio, ","))  
Range("C" & lr + 1 & ":C" & lr + UBound(Split(fio, ",")) + 1).FormulaR1C1 = "=R[-6]C[4]+R[-6]C[5]+R[-6]C[6]"
Range("A" & lr + 1) = Cells(i, 1)  
End If  
Next  
.ScreenUpdating = True  
End With  
End Sub
Страницы: 1
Читают тему
Наверх