Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вычисления не формулами на листе а средствами VBA - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вычисления не формулами на листе а средствами VBA (Формулы/Formulas)
Вычисления не формулами на листе а средствами VBA
bsi Дата: Вторник, 06.12.2016, 11:45 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 29
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Хотелось бы чтобы вычисления в столбцах "I" и "J" осуществлялись не формулами в этих столбцах, а с помощью VBA. Признаюсь навыков в работе с VBA практически ноль. Весь код, который есть в файле, найден в различных источниках на просторах инета. Всем, участвующим в обсуждении, спасибо.
Пробовал вот таким кодом
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Автонумерация
Range("A7:A" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC2="""","""",MAX(R1C1:R[-1]C)+1)"
Worksheets("Лист1").Range("A6").Value = 1
'Формула1
Range("I6:I" & Range("D" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7-RC10))"
'Формула2
Range("J6:J" & Range("D" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7/100*RC8-(RC7/100*RC8*0.13)))"
    'Раскладка клавиатуры
    Select Case Target.Column
        Case 2:
            Включить латиницу раскладку
        Case 3:    
            Включить кириллицу раскладку
        Case Else:
    End Select

End Sub
[/vba]
формулы в "I" и "J" копируются только в первую строку, в последующие строки не копируются.
Подскажите в чем проблема. В автонумерации же формула копируется в следующую строку.
К сообщению приложен файл: 3354478.xlsm (25.6 Kb)


Сообщение отредактировал bsi - Вторник, 06.12.2016, 13:26
 
Ответить
СообщениеХотелось бы чтобы вычисления в столбцах "I" и "J" осуществлялись не формулами в этих столбцах, а с помощью VBA. Признаюсь навыков в работе с VBA практически ноль. Весь код, который есть в файле, найден в различных источниках на просторах инета. Всем, участвующим в обсуждении, спасибо.
Пробовал вот таким кодом
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Автонумерация
Range("A7:A" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC2="""","""",MAX(R1C1:R[-1]C)+1)"
Worksheets("Лист1").Range("A6").Value = 1
'Формула1
Range("I6:I" & Range("D" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7-RC10))"
'Формула2
Range("J6:J" & Range("D" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7/100*RC8-(RC7/100*RC8*0.13)))"
    'Раскладка клавиатуры
    Select Case Target.Column
        Case 2:
            Включить латиницу раскладку
        Case 3:    
            Включить кириллицу раскладку
        Case Else:
    End Select

End Sub
[/vba]
формулы в "I" и "J" копируются только в первую строку, в последующие строки не копируются.
Подскажите в чем проблема. В автонумерации же формула копируется в следующую строку.

Автор - bsi
Дата добавления - 06.12.2016 в 11:45
Nic70y Дата: Вторник, 06.12.2016, 16:20 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 8761
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
да все норм должно быть
замените D на B


ЮMoney 41001841029809
 
Ответить
Сообщениеда все норм должно быть
замените D на B

Автор - Nic70y
Дата добавления - 06.12.2016 в 16:20
bsi Дата: Вторник, 06.12.2016, 16:53 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 29
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо, работает. Но у меня там в таблице есть шапка

последний столбец "Причитается" делится на 2 столбца ""сумма1" и "сумма2", куда вводятся результаты этих формул,
если я вставляю в код
[vba]
Код

'Формула1
Range("I6:I" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7-RC10))"
'Формула2
Range("J6:J" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7/100*RC8-(RC7/100*RC8*0.13)))"
[/vba]
в шапке исчезает "сумма1" и "сумма2". На их месте появляется =ЕСЛИ($G5="";"";($G5-$J5)) и =ЕСЛИ($G5="";"";($G5/100*$H5-($G5/100*$H5*0,13)))
Как от этого избавиться ?


Сообщение отредактировал bsi - Вторник, 06.12.2016, 17:11
 
Ответить
СообщениеСпасибо, работает. Но у меня там в таблице есть шапка

последний столбец "Причитается" делится на 2 столбца ""сумма1" и "сумма2", куда вводятся результаты этих формул,
если я вставляю в код
[vba]
Код

'Формула1
Range("I6:I" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7-RC10))"
'Формула2
Range("J6:J" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7/100*RC8-(RC7/100*RC8*0.13)))"
[/vba]
в шапке исчезает "сумма1" и "сумма2". На их месте появляется =ЕСЛИ($G5="";"";($G5-$J5)) и =ЕСЛИ($G5="";"";($G5/100*$H5-($G5/100*$H5*0,13)))
Как от этого избавиться ?

Автор - bsi
Дата добавления - 06.12.2016 в 16:53
Nic70y Дата: Вторник, 06.12.2016, 21:07 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 8761
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
    If Range("B" & Rows.Count).End(xlUp).Row > 5 Then
Range("A7:A" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC2="""","""",MAX(R1C1:R[-1]C)+1)"
'Формула1
Range("I6:I" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7-RC10))"
'Формула2
Range("J6:J" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7/100*RC8-(RC7/100*RC8*0.13)))"
    End If
[/vba]


ЮMoney 41001841029809
 
Ответить
Сообщение[vba]
Код
    If Range("B" & Rows.Count).End(xlUp).Row > 5 Then
Range("A7:A" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC2="""","""",MAX(R1C1:R[-1]C)+1)"
'Формула1
Range("I6:I" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7-RC10))"
'Формула2
Range("J6:J" & Range("B" & Rows.Count).End(xlUp).Row).FormulaR1C1 = "=IF(RC7="""","""",(RC7/100*RC8-(RC7/100*RC8*0.13)))"
    End If
[/vba]

Автор - Nic70y
Дата добавления - 06.12.2016 в 21:07
Wasilich Дата: Среда, 07.12.2016, 01:54 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Хотелось бы чтобы вычисления в столбцах "I" и "J" осуществлялись не формулами в этих столбцах, а с помощью VBA.
А тупее низззя? :D
[vba]
Код
Sub www()
  For i = 6 To Range("F" & Rows.Count).End(xlUp).Row
    If Cells(i, "G") <> 0 Then
      Cells(i, "j") = Cells(i, "G") / 100 * Cells(i, "H") - (Cells(i, "G") / 100 * Cells(i, "H") * 0.13)
      Cells(i, "I") = Cells(i, "G") - Cells(i, "J")
    End If
  Next
End Sub
[/vba]
 
Ответить
Сообщение
Хотелось бы чтобы вычисления в столбцах "I" и "J" осуществлялись не формулами в этих столбцах, а с помощью VBA.
А тупее низззя? :D
[vba]
Код
Sub www()
  For i = 6 To Range("F" & Rows.Count).End(xlUp).Row
    If Cells(i, "G") <> 0 Then
      Cells(i, "j") = Cells(i, "G") / 100 * Cells(i, "H") - (Cells(i, "G") / 100 * Cells(i, "H") * 0.13)
      Cells(i, "I") = Cells(i, "G") - Cells(i, "J")
    End If
  Next
End Sub
[/vba]

Автор - Wasilich
Дата добавления - 07.12.2016 в 01:54
bsi Дата: Среда, 07.12.2016, 10:29 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 29
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Wasilich, большое спасибо. Общаясь с толковыми людьми, постепенно набираюсь опыта. Всем удачного дня. Тему закрываем.
 
Ответить
СообщениеWasilich, большое спасибо. Общаясь с толковыми людьми, постепенно набираюсь опыта. Всем удачного дня. Тему закрываем.

Автор - bsi
Дата добавления - 07.12.2016 в 10:29
Alex_ST Дата: Среда, 07.12.2016, 12:46 | Сообщение № 7
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3206
Репутация: 609 ±
Замечаний: 0% ±

2003
Только может быть лучше не к Worksheet_SelectionChange прицепить, а к Worksheet_Change ?
Зачем Вам по каждому перевыбору любой ячейки на листе макрос выполнять? Вот когда что-то изменится, тогда пусть и пересчитает.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеТолько может быть лучше не к Worksheet_SelectionChange прицепить, а к Worksheet_Change ?
Зачем Вам по каждому перевыбору любой ячейки на листе макрос выполнять? Вот когда что-то изменится, тогда пусть и пересчитает.

Автор - Alex_ST
Дата добавления - 07.12.2016 в 12:46
bsi Дата: Четверг, 08.12.2016, 09:35 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 29
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Все понятно. Спасибо.
Я пробовал прицепить, к Worksheet_Change, почему-то выдает ошибку на строке For i = 6 To Range("F" & Rows.Count).End(xlUp).Row.
Делал так
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
' Все буквы в верхний регистр
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B6:B300")) Is Nothing Then
With Application: .EnableEvents = False
Target.Value = UCase(Target.Value)
.EnableEvents = True: End With
End If
' Все первые буквы в верхний регистр
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("F6:F300")) Is Nothing Then
With Application: .EnableEvents = False
Target.Value = .Proper(Target.Value)
.EnableEvents = True: End With
End If
wychislenie
End Sub
Sub wychislenie()
'Вычисления в столбцах I и J
For i = 6 To Range("F" & Rows.Count).End(xlUp).Row
If Cells(i, "G") <> 0 Then
Cells(i, "j") = Cells(i, "G") / 100 * Cells(i, "H") - (Cells(i, "G") / 100 * Cells(i, "H") * 0.13)
Cells(i, "I") = Cells(i, "G") - Cells(i, "J")
Else
Cells(i, "j") = ""
Cells(i, "I") = ""
Cells(i, "H") = ""
End If
Next
End Sub
[/vba]
Может я что-то не так делаю?


Сообщение отредактировал bsi - Четверг, 08.12.2016, 11:28
 
Ответить
СообщениеВсе понятно. Спасибо.
Я пробовал прицепить, к Worksheet_Change, почему-то выдает ошибку на строке For i = 6 To Range("F" & Rows.Count).End(xlUp).Row.
Делал так
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
' Все буквы в верхний регистр
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B6:B300")) Is Nothing Then
With Application: .EnableEvents = False
Target.Value = UCase(Target.Value)
.EnableEvents = True: End With
End If
' Все первые буквы в верхний регистр
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("F6:F300")) Is Nothing Then
With Application: .EnableEvents = False
Target.Value = .Proper(Target.Value)
.EnableEvents = True: End With
End If
wychislenie
End Sub
Sub wychislenie()
'Вычисления в столбцах I и J
For i = 6 To Range("F" & Rows.Count).End(xlUp).Row
If Cells(i, "G") <> 0 Then
Cells(i, "j") = Cells(i, "G") / 100 * Cells(i, "H") - (Cells(i, "G") / 100 * Cells(i, "H") * 0.13)
Cells(i, "I") = Cells(i, "G") - Cells(i, "J")
Else
Cells(i, "j") = ""
Cells(i, "I") = ""
Cells(i, "H") = ""
End If
Next
End Sub
[/vba]
Может я что-то не так делаю?

Автор - bsi
Дата добавления - 08.12.2016 в 09:35
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вычисления не формулами на листе а средствами VBA (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!