Хотелось бы чтобы вычисления в столбцах "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" копируются только в первую строку, в последующие строки не копируются. Подскажите в чем проблема. В автонумерации же формула копируется в следующую строку.
Хотелось бы чтобы вычисления в столбцах "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
[/vba] в шапке исчезает "сумма1" и "сумма2". На их месте появляется =ЕСЛИ($G5="";"";($G5-$J5)) и =ЕСЛИ($G5="";"";($G5/100*$H5-($G5/100*$H5*0,13))) Как от этого избавиться ?
Спасибо, работает. Но у меня там в таблице есть шапка
последний столбец "Причитается" делится на 2 столбца ""сумма1" и "сумма2", куда вводятся результаты этих формул, если я вставляю в код [vba]
[/vba] в шапке исчезает "сумма1" и "сумма2". На их месте появляется =ЕСЛИ($G5="";"";($G5-$J5)) и =ЕСЛИ($G5="";"";($G5/100*$H5-($G5/100*$H5*0,13))) Как от этого избавиться ?bsi
Сообщение отредактировал bsi - Вторник, 06.12.2016, 17:11
Хотелось бы чтобы вычисления в столбцах "I" и "J" осуществлялись не формулами в этих столбцах, а с помощью VBA.
А тупее низззя? [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
Хотелось бы чтобы вычисления в столбцах "I" и "J" осуществлялись не формулами в этих столбцах, а с помощью VBA.
А тупее низззя? [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
Только может быть лучше не к Worksheet_SelectionChange прицепить, а к Worksheet_Change ? Зачем Вам по каждому перевыбору любой ячейки на листе макрос выполнять? Вот когда что-то изменится, тогда пусть и пересчитает.
Только может быть лучше не к Worksheet_SelectionChange прицепить, а к Worksheet_Change ? Зачем Вам по каждому перевыбору любой ячейки на листе макрос выполнять? Вот когда что-то изменится, тогда пусть и пересчитает.Alex_ST
Все понятно. Спасибо. Я пробовал прицепить, к 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] Может я что-то не так делаю?
Все понятно. Спасибо. Я пробовал прицепить, к 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