Страницы: 1
RSS
VBA В чем причина неработоспособности кода умножения диапазона значений за счет «.value = .value * 100 »
 
Добрый день! В чем причина ошибки при выполнении макроса ?
Код
Sub qwe()
ПроцентУвеличенияЦены = 8

Range(Cells(24, 9) & ":" & Cells(60, 9)) = _
Range(Cells(24, 9) & ":" & Cells(60, 9)s) / 100 * (100 + ПроцентУвеличенияЦены)
    
End Sub

Спасибо!
Изменено: falmrom - 22.08.2019 20:57:22
Улыбнись.
 
Нельзя изменить сразу ВСЕ значения массива. Вам поможет цикл или специальная вставка с операциями деления, а затем умножения
Согласие есть продукт при полном непротивлении сторон
 
В том, что это работает только при синтаксисе
[A1:A10] = [A1:A10*100]
 
Sanja, цикл - очень долгий процесс. Я использую цикл для построчного умножения, но это крайне долго.
В поисках оптимизации...
Улыбнись.
 
Sanja, цикл - очень долгий процесс. Я использую цикл для построчного умножения, но это крайне долго.
В поисках оптимизации...

RAN, ох уж эти особенности...
Окей. Такое я пробовал, но
Код
Sub qwe()ПроцентУвеличенияЦены = 8
[Cells(24, 9).address & ":" & Cells(60, 9).address] = _
[Cells(24, 9).address & ":" & Cells(60, 9).address / 100 * (100 + ПроцентУвеличенияЦены)]
End Sub
 


Код
Sub qwe()
ПроцентУвеличенияЦены = 8
  
  MsgBox Cells(24, 9).Address
[Replace(Cells(24, 9).address, "$", "") & ":" & replace(Cells(60, 9).address, "$", "") ] = _
[replaceCells(24, 9).address, "$", "") & ":" & replace(Cells(60, 9).address, "$", "") / 100 * (100 + ПроцентУвеличенияЦены)]
End Sub

выдает ошибку. Каким образом можно один формат адреса ячейки преобразовать в тот, которые необходим для работы кода, что Вы написали?
Изменено: falmrom - 22.08.2019 20:58:12
Улыбнись.
 
Никаким. Только жесткий адрес в квадратных скобках.
 
RAN, OKAY =(
Спасибо за ответы!
Улыбнись.
 
Пробуйте цикл проводить в памяти:
Код
Sub qwe()
    proc = 8
    arr = [B4:B24]
    For i = 1 To UBound(arr)
        arr(i, 1) = arr(i, 1) / 100 * (100 + proc)
    Next
    [B4].Resize(UBound(arr), 1) = arr
End Sub
Изменено: buchlotnik - 22.08.2019 15:40:17
Соблюдение правил форума не освобождает от модераторского произвола
 
ну утверждение
Цитата
falmrom написал:
цикл - очень долгий процесс.
спорное,
Но если такая нелюбовь к циклам, то можете вот так
Код
ПроцентУвеличенияЦены = 8
   Application.CutCopyMode = False
   With ActiveSheet.Cells(1, ActiveSheet.UsedRange.Column + ActiveSheet.UsedRange.Columns.Count)
        .Value = 1 / 100 * (100 * ПроцентУвеличенияЦены)
        .Copy
    Range(Cells(24, 9) & ":" & Cells(60, 9)).PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
        SkipBlanks:=False, Transpose:=False
    .ClearContents
    End With
По вопросам из тем форума, личку не читаю.
 
Цитата
RAN написал:
Только жесткий адрес в квадратных скобках
ну как бы...Это только если скобки квадратные :)
Код
Sub qwe()
Dim ПроцентУвеличенияЦены
ПроцентУвеличенияЦены = 8

Range(Cells(24, 9), Cells(60, 9)) = _
    Application.Evaluate(Cells(24, 9).Address & ":" & Cells(60, 9).Address & "/100*(100+" & ПроцентУвеличенияЦены & ")")
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков,
Если судить по
Range(Cells(24, 9) & ":" & Cells(60, 9))  из #1 , то в Cells(24, 9) и Cells(60, 9) адреса диапазона, но возможно это опять ошибка falmrom,
По вопросам из тем форума, личку не читаю.
 
Дим, спасибо за вариант. С Evaluate не получалось заставить работать.
А еще так можно.  :D
Код
Sub Create_NewModule()
    Dim objVBProj As Object, objVBComp As Object, objCodeMod As Object
    Dim sModuleName As String, sFullName As String
    Dim sProcLines As String
    Dim lLineNum As Long
    Dim adr$
    'добавляем новый стандартный модуль в активную книгу
    Set objVBComp = ActiveWorkbook.VBProject.VBComponents.Add(1)
    'получаем ссылку на коды модуля
    Set objCodeMod = objVBComp.CodeModule
    'узнаем количество строк в модуле
    '(т.к. VBA в зависимости от настроек может добавлять строки деклараций)
    lLineNum = objCodeMod.CountOfLines + 1
    'текст всставляемой процедуры
    adr = ActiveSheet.Range("a1").CurrentRegion.Address
    sProcLines = "[" & adr & "] = [" & adr & "*100]"
    sProcLines = "Sub Test()" & vbCrLf & _
                 sProcLines & vbCrLf & _
                 "End Sub"
    'вставляем текст процедуры в тело нового модуля
    objCodeMod.InsertLines lLineNum, sProcLines
    Application.Run "Test"
    ' удаляем добавленный стандартный модуль
    objVBComp.Collection.Remove objVBComp
End Sub
 
Цитата
RAN написал:
А еще так можно.  
 :D  кодт - извращенец
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх