Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Повторение сложной процедуры, цикл 
V
    Опции темы
Student00
  Дата 19.5.2012, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 22.11.2007
Где: Барнаул

Репутация: нет
Всего: нет



Ситуация:
Есть код:
Код

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 - 19.5.2012, 21:02
PM MAIL   Вверх
Student00
Дата 20.5.2012, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 22.11.2007
Где: Барнаул

Репутация: нет
Всего: нет



Код работает. Его не нужно переделывать, исправлять просто подскажите пожалуйста, как заставить его выполняться нужно количество раз автоматически.  smile 
PM MAIL   Вверх
dorogoyIV
Дата 20.5.2012, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 4
Всего: 46



Код

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

PM MAIL   Вверх
Student00
Дата 20.5.2012, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 22.11.2007
Где: Барнаул

Репутация: нет
Всего: нет



Цитата(dorogoyIV @ 20.5.2012,  10:12)
Код

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

Огромнейшее спасибо.  smile 
А решение-то было наипростейшем. 
PM MAIL   Вверх
Student00
Дата 6.6.2012, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 22.11.2007
Где: Барнаул

Репутация: нет
Всего: нет



Не буду создавать другую тему, надеюсь модераторы меня простят.

Код:
Код
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, 17:45
PM MAIL   Вверх
Student00
Дата 6.6.2012, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 22.11.2007
Где: Барнаул

Репутация: нет
Всего: нет



Можно конечно сделать тупо вот так:
 
Код
 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

Но, на мой взгляд - это глупо.
PM MAIL   Вверх
Student00
Дата 6.6.2012, 17:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 22.11.2007
Где: Барнаул

Репутация: нет
Всего: нет



Никто не может подсказать? :(
PM MAIL   Вверх
Student00
Дата 6.6.2012, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 95
Регистрация: 22.11.2007
Где: Барнаул

Репутация: нет
Всего: нет



Фактически можно сделать вывод, что цель это эмулировать некую группу ячеек (столбец или строку) в языке программирования Basic.
Если ли способы решения этого вопроса?
PM MAIL   Вверх
dorogoyIV
Дата 7.6.2012, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 4
Всего: 46



чо то я не очень понял...

так:
Код

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

PM MAIL   Вверх
Дмит
Дата 9.6.2012, 10:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 21.4.2006
Где: г.Волгоград

Репутация: 8
Всего: 9



Range("G3:G26").FormulaLocal = "=($I$2*C3)+B3"
замена->
Range("G3:G26").FormulaLocal = "=(" & zn & "*C3)+B3"

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

Это сообщение отредактировал(а) Дмит - 9.6.2012, 10:16
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0820 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.