есть столбец, назовем его "А" и некие значения M, N и K. Переменные M, N и K числового типа, а массив А - строкового.
Задача:
При вводе в массив "А" слова "Один" и, если переменная "М" > 0, то значение "М" преобразуется по формуле "М=М-(число)" , при вводе слова "Два" метоморфозы происходят с другой переменной и т.д.
Условия:
Число переменных непостоянно и, если требуется сформировать список значений массива "А", вбивать список в "третьем" окне - некатит, хотя терпимо.
"Реакция" должна происходить сразу после ввода значения. В дальнейшем эта строка из рассмотрения изымается.
Значение M, N и K исправляемое, т.е. например "М=100", я понимаю, что мне надо увеличить "М" на 50 и переписываю значение "М" на 150.. или
можно предложить как вариант использовать "соседний столбец" для добавления. Т.е. добавляю в соседнем столбце "50", значение "М" увеличивается до 150 а введенное число 50 исчезает.
----------
мне кажется он много хочет от банального экселя :-)
----------
заранее спасибо за помощь
Exel реакция на введенное значение
Модератор: Naeel Maqsudov
Если я Вас правильно понял, то это событие листа сможет Вам помочь. Расположить необходимо в модуле того листа, где Вы предполагаете заменять при вводе данные.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
On Error Resume Next
iRow = Target.Row
iClm = Target.Column
iData = Target.Value
If IsArray(Target.Value) = True Then Exit Sub
If iClm = 1 And iRow < 11 Then
Select Case iData
Case "Один"
iData = Range("B1:B10").Item(1)
Case "Два"
iData = Range("B1:B10").Item(2)
Case "Три"
iData = Range("B1:B10").Item(3)
Case "Четыре"
iData = Range("B1:B10").Item(4)
Case "Пять"
iData = Range("B1:B10").Item(5)
'
Rem И так далее
'
End Select
If IsNumeric(iData) = True Then
If iData > 0 Then
iData = iData - 13 ' число ?
Else
Exit Sub
End If
End If
Application.EnableEvents = False
Application.Undo
Target.Value = iData
Application.EnableEvents = True
End If
End Sub
Примечание :
- вводить текст нужно только в диапазоне "A1:A10"
- в диапазоне "B1:B10" должны находиться значения переменных M N ...
- Один соответствует ячейке "B1"
- Два соответствует "B2" и т.д.
- При желании код можно увеличить (это только "набросок")
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
On Error Resume Next
iRow = Target.Row
iClm = Target.Column
iData = Target.Value
If IsArray(Target.Value) = True Then Exit Sub
If iClm = 1 And iRow < 11 Then
Select Case iData
Case "Один"
iData = Range("B1:B10").Item(1)
Case "Два"
iData = Range("B1:B10").Item(2)
Case "Три"
iData = Range("B1:B10").Item(3)
Case "Четыре"
iData = Range("B1:B10").Item(4)
Case "Пять"
iData = Range("B1:B10").Item(5)
'
Rem И так далее
'
End Select
If IsNumeric(iData) = True Then
If iData > 0 Then
iData = iData - 13 ' число ?
Else
Exit Sub
End If
End If
Application.EnableEvents = False
Application.Undo
Target.Value = iData
Application.EnableEvents = True
End If
End Sub
Примечание :
- вводить текст нужно только в диапазоне "A1:A10"
- в диапазоне "B1:B10" должны находиться значения переменных M N ...
- Один соответствует ячейке "B1"
- Два соответствует "B2" и т.д.
- При желании код можно увеличить (это только "набросок")