Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Повторение сложной процедуры


Автор: Student00 19.5.2012, 21:00
Ситуация:
Есть код:
Код

Range("G3").Select
   ActiveCell.FormulaLocal = "=($I$2*C3)+B3"
   Selection.AutoFill Destination:=Range("G3:G26"), Type:=xlFillDefault
   Range("G3:G26").Select
   Selection.Copy
   Range("B3:B26").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   Application.CutCopyMode = False
   Range("G3:G26").Select
   Selection.ClearContents
   Range("I3").Select
   ActiveCell.FormulaLocal = "=B2-(I2*1000)"
   Selection.Copy
   Range("B2").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
       :=False, Transpose:=False
   Application.CutCopyMode = False
   Range("I3").Select
   Selection.ClearContents
    
   Range("G3").Select
   Range("G3").FormulaLocal = "=Если(E3="""";0;Если(B3>E3;B3-E3;0))"
   Selection.AutoFill Destination:=Range("G3:G26"), Type:=xlFillDefault
   Range("G3:G26").Select
   Range("I3").Select
   ActiveCell.FormulaLocal = "=СУММ(G3:G26)"
   Range("I4").Select
   ActiveCell.FormulaLocal = "=I3+B2"
   Selection.Copy
   Range("B2").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   Application.CutCopyMode = False
   
   Range("L3").Select
   ActiveCell.FormulaLocal = "=B3-G3"
   Selection.AutoFill Destination:=Range("L3:L26"), Type:=xlFillDefault
   Range("L3:L26").Select
   Selection.Copy
   Range("B3:B26").Select
   Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
   Application.CutCopyMode = False
   Range("I3:I4").Select
   Selection.ClearContents
   Range("G3:G26").Select
   Selection.ClearContents
   Range("L3:L26").Select
   Selection.ClearContents
   Range("A1").Select

Код работает так что к нему вопросв нет.
Кроме одного момента.
Хотелсь бы что бы он повторялся до определенного момента.
В частности, пока значение в определенной ячейки не будет меньше некоторого числа.

Как цикл организовать что бы это реализовать.

Подскажите пожалуйста.  smile 

Автор: Student00 20.5.2012, 09:43
Код работает. Его не нужно переделывать, исправлять просто подскажите пожалуйста, как заставить его выполняться нужно количество раз автоматически.  smile 

Автор: dorogoyIV 20.5.2012, 10:12
Код

while Cells(1, 1) >= 3 ' пока значение ячейки больше или равно какое то твое значение
 ' your code
wend

Автор: Student00 20.5.2012, 11:04
Цитата(dorogoyIV @ 20.5.2012,  10:12)
Код

while Cells(1, 1) >= 3 ' пока значение ячейки больше или равно какое то твое значение
 ' your code
wend

Огромнейшее спасибо.  smile 
А решение-то было наипростейшем. 

Автор: Student00 6.6.2012, 14:18
Не буду создавать другую тему, надеюсь модераторы меня простят.

Код:
Код
Dim zn As Integer

   If Range("B2").Value >= 100 Then
   zn = Int(Range("B2").Value / 100)
   Else
   zn = 0
   End If


Получаем некоторое цело значение в переменной.
Дальше эту переменную нужно использовать в следующей операции, вместо: $I$2
Код
Range("G3:G26").FormulaLocal = "=($I$2*C3)+B3"


Так не подходит:
Код
Range("G3:G26").FormulaLocal = "=(zn*C3)+B3"

Код
Range("G3:G26").Value = zn * Range("C3").Value + Range("B3").Value


А нужно что бы для диапазона ячеек выполнялась формула, которую я пытаюсь перевести в VBA код.

Как это сделать - не знаю. 
Помогите пожалуйста.  :(

Автор: Student00 6.6.2012, 16:03
Можно конечно сделать тупо вот так:
 
Код
 Range("G3").Value = zn * Range("C3").Value + Range("B3").Value
  Range("G4").Value = zn * Range("C4").Value + Range("B4").Value
  Range("G5").Value = zn * Range("C5").Value + Range("B5").Value
  Range("G6").Value = zn * Range("C6").Value + Range("B6").Value
  Range("G7").Value = zn * Range("C7").Value + Range("B7").Value
  Range("G8").Value = zn * Range("C8").Value + Range("B8").Value
  Range("G9").Value = zn * Range("C9").Value + Range("B9").Value
  Range("G10").Value = zn * Range("C10").Value + Range("B10").Value
  Range("G11").Value = zn * Range("C11").Value + Range("B11").Value
  Range("G12").Value = zn * Range("C12").Value + Range("B12").Value
  Range("G13").Value = zn * Range("C13").Value + Range("B13").Value
  Range("G14").Value = zn * Range("C14").Value + Range("B14").Value
  Range("G15").Value = zn * Range("C15").Value + Range("B15").Value
  Range("G16").Value = zn * Range("C16").Value + Range("B16").Value
  Range("G17").Value = zn * Range("C17").Value + Range("B17").Value
  Range("G18").Value = zn * Range("C18").Value + Range("B18").Value
  Range("G19").Value = zn * Range("C19").Value + Range("B19").Value
  Range("G20").Value = zn * Range("C20").Value + Range("B20").Value
  Range("G21").Value = zn * Range("C21").Value + Range("B21").Value
  Range("G22").Value = zn * Range("C22").Value + Range("B22").Value
  Range("G23").Value = zn * Range("C23").Value + Range("B23").Value
  Range("G24").Value = zn * Range("C24").Value + Range("B24").Value
  Range("G25").Value = zn * Range("C25").Value + Range("B25").Value
  Range("G26").Value = zn * Range("C26").Value + Range("B26").Value

Но, на мой взгляд - это глупо.

Автор: Student00 6.6.2012, 17:43
Никто не может подсказать? :(

Автор: Student00 6.6.2012, 19:33
Фактически можно сделать вывод, что цель это эмулировать некую группу ячеек (столбец или строку) в языке программирования Basic.
Если ли способы решения этого вопроса?

Автор: dorogoyIV 7.6.2012, 22:39
чо то я не очень понял...

так:
Код

Sub test()
 Dim r As Range
 Dim zn
 
 For i = 3 To 26
  If Range("B" & i) >= 100 Then
   zn = Range("B" & i) / 100
   Else
    zn = 0
  End If
  
  Range("G" & i).Value = zn * Range("C" & i) + Range("B" & i)
 Next i
End Sub


или так:
Код

Sub test2()
 Dim f
 Dim b, c, g

 For i = 3 To 26
  b = "B" & i
  c = "C" & i
  g = "G" & i
 
  f = "=если(" & b & ">= 100;" & b & "/ 100 *" & c & "+" & b & ";" & b & ")"
  Range(g).FormulaLocal = f
 Next i
End Sub

Автор: Дмит 9.6.2012, 10:10
Range("G3:G26").FormulaLocal = "=($I$2*C3)+B3"
замена->
Range("G3:G26").FormulaLocal = "=(" & zn & "*C3)+B3"

если нельзя просто Range("$I$2") = zn

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)