Здравствуйте. Подскажите, как можно создать ячейку, которая будет оставаться пустой, и в нее можно вводить числовые данные, которые будут учитываться в другой ячейке. Итоговая ячейка должна изменять свое значение при каждом вводе данных в связанные ячейки. Так понимаю без макросов не обойтись? Как пример прикрепил файл.
Здравствуйте. Подскажите, как можно создать ячейку, которая будет оставаться пустой, и в нее можно вводить числовые данные, которые будут учитываться в другой ячейке. Итоговая ячейка должна изменять свое значение при каждом вводе данных в связанные ячейки. Так понимаю без макросов не обойтись? Как пример прикрепил файл.Denyols
Не очень понятно, что за суперячейки хочет создавать топикстартер. Если включен режим автовычисления формул, то любая формула в любой ячейке пересчитывается после изменения значения в ячейке, на которую данная формула ссылается
Файла нет.
Не очень понятно, что за суперячейки хочет создавать топикстартер. Если включен режим автовычисления формул, то любая формула в любой ячейке пересчитывается после изменения значения в ячейке, на которую данная формула ссылаетсяabtextime
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("C3")) Is Nothing Then Range("D3").Value = Range("D3").Value + Range("B3").Value + Range("C3").Value Range("B3:C3").ClearContents End If End Sub
[/vba]
Можно и на изменение ячейки C3 повесить макрос
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Range("C3")) Is Nothing Then Range("D3").Value = Range("D3").Value + Range("B3").Value + Range("C3").Value Range("B3:C3").ClearContents End If End Sub
Не очень понятно, что именно Вы хотите делать, как заполнять таблицу
Сделал два варианта Первый - на Ctrl+q - выполняет искомое действие в строчке, где находится активная ячейка Второй - заполняем 1000 строчек (или меньше) и жмем Ctrl+w
[vba]
Код
Sub Сумматор1()
If IsNumeric(Cells(ActiveCell.Row, 2).Value) And Cells(ActiveCell.Row, 2).Value <> "" Then Cells(ActiveCell.Row, 4).Value = Cells(ActiveCell.Row, 4).Value - Cells(ActiveCell.Row, 2).Value If IsNumeric(Cells(ActiveCell.Row, 3).Value) And Cells(ActiveCell.Row, 3).Value <> "" Then Cells(ActiveCell.Row, 4).Value = Cells(ActiveCell.Row, 4).Value + Cells(ActiveCell.Row, 3).Value Cells(ActiveCell.Row, 2).ClearContents Cells(ActiveCell.Row, 3).ClearContents
End Sub
Sub Сумматор2()
For i = 3 To 1002
If IsNumeric(Cells(i, 2).Value) And Cells(i, 2).Value <> "" Then Cells(i, 4).Value = Cells(i, 4).Value - Cells(i, 2).Value If IsNumeric(Cells(i, 3).Value) And Cells(i, 3).Value <> "" Then Cells(i, 4).Value = Cells(i, 4).Value + Cells(i, 3).Value
Next i
Range("B3:C1002").ClearContents
End Sub
[/vba]
Не очень понятно, что именно Вы хотите делать, как заполнять таблицу
Сделал два варианта Первый - на Ctrl+q - выполняет искомое действие в строчке, где находится активная ячейка Второй - заполняем 1000 строчек (или меньше) и жмем Ctrl+w
[vba]
Код
Sub Сумматор1()
If IsNumeric(Cells(ActiveCell.Row, 2).Value) And Cells(ActiveCell.Row, 2).Value <> "" Then Cells(ActiveCell.Row, 4).Value = Cells(ActiveCell.Row, 4).Value - Cells(ActiveCell.Row, 2).Value If IsNumeric(Cells(ActiveCell.Row, 3).Value) And Cells(ActiveCell.Row, 3).Value <> "" Then Cells(ActiveCell.Row, 4).Value = Cells(ActiveCell.Row, 4).Value + Cells(ActiveCell.Row, 3).Value Cells(ActiveCell.Row, 2).ClearContents Cells(ActiveCell.Row, 3).ClearContents
End Sub
Sub Сумматор2()
For i = 3 To 1002
If IsNumeric(Cells(i, 2).Value) And Cells(i, 2).Value <> "" Then Cells(i, 4).Value = Cells(i, 4).Value - Cells(i, 2).Value If IsNumeric(Cells(i, 3).Value) And Cells(i, 3).Value <> "" Then Cells(i, 4).Value = Cells(i, 4).Value + Cells(i, 3).Value
Спасибо, очень помогли)) Но у меня остался последний вопрос, к сожалению я не владею VBA, потому должно выйти что-то на подобии: " Если текущая дата (либо отдельно прописанная ячейка с функцией СЕГОДНЯ) совпадает с датой в одной из ячеек диапазона, то рассчитывается сумма произведений диапазонов (их я смогу сам дописать) и записывается в ячейку справа от даты из диапазона " Я знаю, что такое можно прописать формулой, но в учет будут браться ячейки, которые мы очищаем
Спасибо, очень помогли)) Но у меня остался последний вопрос, к сожалению я не владею VBA, потому должно выйти что-то на подобии: " Если текущая дата (либо отдельно прописанная ячейка с функцией СЕГОДНЯ) совпадает с датой в одной из ячеек диапазона, то рассчитывается сумма произведений диапазонов (их я смогу сам дописать) и записывается в ячейку справа от даты из диапазона " Я знаю, что такое можно прописать формулой, но в учет будут браться ячейки, которые мы очищаемDenyols
Denyols, Разумеется, сумму произведений тоже можно вычислить в макросе, самое простое - через два вложенных цикла. Но из описания лично мне не очень понятно, что Вы хотите. Может быть, кто-то понял и ответит. Я смогу только завтра, т.к. дома я безЭксельный.
Denyols, Разумеется, сумму произведений тоже можно вычислить в макросе, самое простое - через два вложенных цикла. Но из описания лично мне не очень понятно, что Вы хотите. Может быть, кто-то понял и ответит. Я смогу только завтра, т.к. дома я безЭксельный.abtextime
Denyols, Внимательно перечитайте свой последний пост и убедитесь, что он не позволяет понять, что именно Вы хотите
Давайте разбираться.
"Если текущая дата (либо отдельно прописанная ячейка с функцией СЕГОДНЯ) совпадает с датой в одной из ячеек диапазона," *** Речь, видимо, о диапазоне A3:A33. Ок, убедились, что в диапазоне есть сегодняшняя дата, что дальше?
"то рассчитывается сумма произведений диапазонов" *** каких диапазонов? F3:F33 и G3:G33. Допустим (по смыслу это общая стоимость за период). Тогда это одно число. Если да, то из Вашего поста непонятно, куда оно записывается, в какую ячейку(одну)? *** если же Вы ошиблись в терминах, и Вам надо просто заполнить диапазон (столбец) B3:B33 соответствующими произведениями из столбцов F и G, то посмотрите такой макрос (подвешен на Ctrl+w)
[vba]
Код
Sub Сумматор2()
Found = False
For i = 3 To 33
If CDate(Cells(i, 1).Value) = Cells(1, 1).Value Then Found = True Exit For End If
Next i
If Not Found Then Exit Sub
For i = 3 To 33
If IsNumeric(Cells(i, 6).Value) And Cells(i, 6).Value <> "" And IsNumeric(Cells(i, 7).Value) And Cells(i, 7).Value <> "" Then Cells(i, 2).Value = Cells(i, 6).Value * Cells(i, 7).Value
Next i
Range("F3:G33").ClearContents
End Sub
[/vba]
Denyols, Внимательно перечитайте свой последний пост и убедитесь, что он не позволяет понять, что именно Вы хотите
Давайте разбираться.
"Если текущая дата (либо отдельно прописанная ячейка с функцией СЕГОДНЯ) совпадает с датой в одной из ячеек диапазона," *** Речь, видимо, о диапазоне A3:A33. Ок, убедились, что в диапазоне есть сегодняшняя дата, что дальше?
"то рассчитывается сумма произведений диапазонов" *** каких диапазонов? F3:F33 и G3:G33. Допустим (по смыслу это общая стоимость за период). Тогда это одно число. Если да, то из Вашего поста непонятно, куда оно записывается, в какую ячейку(одну)? *** если же Вы ошиблись в терминах, и Вам надо просто заполнить диапазон (столбец) B3:B33 соответствующими произведениями из столбцов F и G, то посмотрите такой макрос (подвешен на Ctrl+w)
[vba]
Код
Sub Сумматор2()
Found = False
For i = 3 To 33
If CDate(Cells(i, 1).Value) = Cells(1, 1).Value Then Found = True Exit For End If
Next i
If Not Found Then Exit Sub
For i = 3 To 33
If IsNumeric(Cells(i, 6).Value) And Cells(i, 6).Value <> "" And IsNumeric(Cells(i, 7).Value) And Cells(i, 7).Value <> "" Then Cells(i, 2).Value = Cells(i, 6).Value * Cells(i, 7).Value
Да, это общая стоимость и записывается одним числом в ячейку стоящую справа от текущей даты (в столбец В) . То есть, оборот за текущий день должен записываться в нужную ячейку, на следующий день - в ячейку следующего дня
Да, это общая стоимость и записывается одним числом в ячейку стоящую справа от текущей даты (в столбец В) . То есть, оборот за текущий день должен записываться в нужную ячейку, на следующий день - в ячейку следующего дняDenyols
If CDate(Cells(i, 1).Value) = Cells(1, 1).Value Then Found = True Exit For End If
Next i
If Not Found Then Exit Sub
For i = 3 To 33
If IsNumeric(Cells(i, 6).Value) And Cells(i, 6).Value <> "" And IsNumeric(Cells(i, 7).Value) And Cells(i, 7).Value <> "" Then Cells(i, 2).Value = Cells(i, 6).Value * Cells(i, 7).Value
Next i
Range("F3:G33").ClearContents
End Sub
[/vba]
Сорри, я файл забыл приложить в предыдущем посте.
Проверяйте макрос (на Ctrl+w)
[vba]
Код
Sub Сумматор2()
Found = False
For i = 3 To 33
If CDate(Cells(i, 1).Value) = Cells(1, 1).Value Then Found = True Exit For End If
Next i
If Not Found Then Exit Sub
For i = 3 To 33
If IsNumeric(Cells(i, 6).Value) And Cells(i, 6).Value <> "" And IsNumeric(Cells(i, 7).Value) And Cells(i, 7).Value <> "" Then Cells(i, 2).Value = Cells(i, 6).Value * Cells(i, 7).Value
abtextime, Попытался объяснить все в файле. И посмотрите предыдущий ответ, мне нужен первый предложенные вариант, а не умножение двух чисел. Спасибо
abtextime, Попытался объяснить все в файле. И посмотрите предыдущий ответ, мне нужен первый предложенные вариант, а не умножение двух чисел. СпасибоDenyols
Pelena, мать моя женщина, оно работает)) только один момент, при повторном расчете, оно не учитывает значение ячейки "s" [vba]
Код
Sub Сумматор2()
Found = False
For i = 3 To 33
If CDate(Cells(i, 1).Value) = Cells(1, 1).Value Then Found = True Exit For End If
Next i irow = i If Not Found Then Exit Sub
For i = 2 To 2000
If IsNumeric(Worksheets(2).Cells(i, 1).Value) And Worksheets(2).Cells(i, 1).Value <> "" And IsNumeric(Worksheets(2).Cells(i, 2).Value) And Worksheets(2).Cells(i, 2).Value <> "" Then s = s + Worksheets(2).Cells(i, 1).Value * Worksheets(2).Cells(i, 2).Value
Next i Worksheets(1).Cells(irow, 2).Value = s
End Sub
[/vba]
Pelena, мать моя женщина, оно работает)) только один момент, при повторном расчете, оно не учитывает значение ячейки "s" [vba]
Код
Sub Сумматор2()
Found = False
For i = 3 To 33
If CDate(Cells(i, 1).Value) = Cells(1, 1).Value Then Found = True Exit For End If
Next i irow = i If Not Found Then Exit Sub
For i = 2 To 2000
If IsNumeric(Worksheets(2).Cells(i, 1).Value) And Worksheets(2).Cells(i, 1).Value <> "" And IsNumeric(Worksheets(2).Cells(i, 2).Value) And Worksheets(2).Cells(i, 2).Value <> "" Then s = s + Worksheets(2).Cells(i, 1).Value * Worksheets(2).Cells(i, 2).Value