Страницы: 1
RSS
Заполнение ячеек из массива Array
 
Вопрос в файле и тут: http://www.planetaexcel.ru/forum.php?thread_id=10840
 
После первого цикла в переменной myZn(i)  
ничего не будет, а вы ее используете в  
дальнейшем для анализа  
For i = 1 To 12  
   myZn(i) = Cells(2, 2 + i)  
Next i  
 
Вставьте строку myZn(i) = Cells(2, 2 + i)  
в тело второго цикла, возможно вам нужен цикл  
For i = 0 To 11  
чтобы пройти все месяцы от января до декабря
 
Не согласен. После первого цикла в переменной myZn(i) будут все значения из второй строки, поэтому я и использую их для сравнения.    
Что бы убедиться в этом, нетрудно трассировать код (F8 – смотрим в Locals Window) или просмотреть значения переменных в Immediate window введя  во втором цикле Debug.Print myZn(i). Но за участие – спасибо.
 
А Вы не пытались решить эту задачу при помощи формул?  
 
Вроде как было бы попроще...  
Да и массив значений "TO-1(1)", "TO-1(2)", "TO-1(3)" и т.д.  
гораздо удобнее расположить на листе, нежели в коде макроса.
 
Пробовал, но не смог, потому что во встроенных Excel формулах не силён. Но если возможно решить задачу с помощью формул Excel, пожалуйста покажите, как это делается. Вот заготовка:  
 
----  
Спасибо
 
Post_71588  
Вы нарисуйте в своей таблице, что должно быть  
в ячейках, помеченных желтым цветом и почему в них  
не входит ноябрь-декабрь.  
Вопросы?  
1. Почему не заполнены столбцы январь-март и    
  ноябрь-декабрь?  
2. Где в таблице константа, с которой идет сравнение?  
3. Сравнение с константой должно быть выполнено по всем  
  инвентарным номерам? Или константы разные?  
4. Планируемый расход - это за год?
 
{quote}{login=Kuzmich}{date=26.10.2009 10:20}{thema=Re}{post}Post_71588  
Вы нарисуйте в своей таблице, что должно быть  
в ячейках, помеченных желтым цветом и почему в них  
не входит ноябрь-декабрь.  
Вопросы?  
1. Почему не заполнены столбцы январь-март и    
  ноябрь-декабрь?  
2. Где в таблице константа, с которой идет сравнение?  
3. Сравнение с константой должно быть выполнено по всем  
  инвентарным номерам? Или константы разные?  
4. Планируемый расход - это за год?{/post}{/quote}  
 
 
Всё в файле. Спасибо
 
Post_71685  
Посмотрите код для одной строки, где ТО-1(1)  
 
Sub DefTO()  
Ostatok = 0  
For i = 6 To 12  
j = 0  
Do While Application.Sum(Range(Cells(4, i), Cells(4, i + j))) + Ostatok < Cells(3, 16).Value  
j = j + 1  
If i + j > 12 Then Exit Sub  
Loop  
Ostatok = Application.Sum(Range(Cells(4, i), Cells(4, i + j))) + Ostatok - Cells(3, 16).Value  
LastTO = Cells(5, 1).Value  
Set iTO = Range("O3:O100").Find(What:=LastTO, LookIn:=xlFormulas, LookAt:=xlWhole)  
Cells(5, i + j) = Cells(iTO.Row + 1, 15)  
Cells(5, 1).Value = Cells(iTO.Row + 1, 15)  
i = i + j  
Next  
End Sub
 
Почти работает. Но ячейку Cells(5, 1) изменять не нужно. Думаю, над задачей мне ещё придется подумать.  
В любом случае - большое спасибо
 
В В5, В7, В9... (в одной строке с ТО) удалить формулы.  
Для С5:  
=ЕСЛИ(C4="";"";ЕСЛИ(ОСТАТ(СУММ(B4:$C4);$P$3)+C4>$P$3;ИНДЕКС($O$3:$O$100;ПОИСКПОЗ($A5;$O$3:$O$100;0)+ЦЕЛОЕ(СУММ($C4:C4)/$P$3));""))  
Копировать-Вставить в нужные ячейки нечетных строк (желтая заливка).  
Недостаток формулы - при внесении числа, дающего с предыдущим остатком сумму, большую за две константы, неправильно указывается ТО. Например, остаток 450, вносим 5000: ЦЕЛОЕ(СУММ(450;5000)/$P$3)=2; будет указано ТО не следующее, а через одно, при ЦЕЛОЕ(...)=3 - через два.  
Принципиально или такой вариант невозможен?
 
Только определите все переменные перед выполнением программы  
 
Sub DefTO()  
For nom = 4 To 14 Step 2  
Ostatok = 0  
FirstTO = Cells(nom + 1, 1).Value  
For i = 6 To 12  
j = 0  
Do While Application.Sum(Range(Cells(nom, i), Cells(nom, i + j))) + Ostatok < Cells(3, 16).Value  
j = j + 1  
If i + j > 12 Then GoTo M1  
Loop  
Ostatok = Application.Sum(Range(Cells(nom, i), Cells(nom, i + j))) + Ostatok - Cells(3, 16).Value  
LastTO = FirstTO  
Set iTO = Range("O3:O100").Find(What:=LastTO, LookIn:=xlFormulas, LookAt:=xlWhole)  
Cells(nom + 1, i + j) = Cells(iTO.Row + 1, 15)  
FirstTO = Cells(iTO.Row + 1, 15)  
i = i + j  
Next  
M1: Next  
End Sub
Страницы: 1
Читают тему
Наверх