2016-04-04 3 views
-1

Я новичок в Excel и VBA. Я делаю список проектов, у меня есть два столбца для состояния, Status и Status in Words. В первом мне нужно ввести статус в виде чисел, например. 50% или 80%, а во втором Мне нужно ввести статус проекта словами: Open, Closed, In Progress и т. Д. Моя проблема в том, что когда я пишу 50% в первом столбце, статус в другом столбце должен автоматически меняться до In Progress и наоборот, если я ввожу Closed во второй столбец, то статус в первом столбце должен измениться на 100%. Может ли кто-нибудь сказать мне, как это сделать в Excel vba.Изменение значений одной ячейки на основе другой в Excel

+1

Вы не можете использовать изменения «наоборот», используя только 2 ячейки, без VBA. Если вы вручную введите значение в ячейке, оно переопределит любую формулу, используемую для проверки другой ячейки. Ваш вариант, отличный от VBA, должен использовать 4 столбца, из которых 2 являются «входными», а 2 из них «вывод». Таким образом, вы можете вводить данные в первые 2, а второй 2 будет получать правильное значение. –

+0

Я бы с удовольствием использовал VBA. Не могли бы вы посоветовать мне, как я могу продолжить работу с VBA? @ Grade'Eh'Bacon – Nikky

+1

Не используйте VBA, если вы не можете прочитать код, который вы используете. Если вы можете прочитать код VBA, сначала попробуйте это самостоятельно, потому что этот сайт предназначен для конкретных вопросов и ответов, и это не служба написания кода. Если у вас есть вопрос о том, как заставить ваш код работать, мы будем рады помочь. Как бы то ни было, это слишком широкий вопрос для ответа. –

ответ

-1

Это может сработать. Измените 1 на свой нижний номер столбца и 2 на свой больший номер столбца. Я не мог понять, как сказать Excel, чтобы проверить, соответствует ли она «100%» или «50%», поэтому мне пришлось использовать 1 и .5. Если кто знает, не стесняйтесь редактировать или прокомментировать!

'This is a global variable, prevents endless loops in worksheet change. 
Dim running As Boolean 

'When any change is made on the worksheet, sends target as the changed cell 
Private Sub Worksheet_Change(ByVal Target As Range) 
    'Checks to see if a worksheet change is already running, if it is, then it quits 
    If running = True Then Exit Sub 
    'We are running code now, so prevent endless loops 
    running = True 
    Dim YourFirstColumn, YourOtherColumn As Integer 

    'Set to your values 
    YourFirstColumn = 1 
    YourOtherColumn = 2 

    'If this is a column you want to change 
    If Target.Column = YourFirstColumn Then 

     'Change values 
     If Target.Value = "In Progress" Then 
      Target.Offset(0, Abs(YourFirstColumn - YourOtherColumn)).Value = "50%" 
     ElseIf Target.Value = "Closed" Then 
      Target.Offset(0, Abs(YourFirstColumn - YourOtherColumn)).Value = "100%" 
     End If 

    'If this is the other column you want to change 
    ElseIf Target.Column = YourOtherColumn Then 

     'Change values 
     If Target.Value = 0.5 Then 
      Target.Offset(0, -Abs(YourFirstColumn - YourOtherColumn)).Value = "In Progress" 
     ElseIf Target.Value = 1 Then 
      Target.Offset(0, -Abs(YourFirstColumn - YourOtherColumn)).Value = "Closed" 
     End If 
    End If 
    running = false 
End Sub 
+0

Спасибо за код, я думаю, это было то, что я искал. Один из вопросов, который у меня есть, должен ли я поместить это как новый модуль, а затем попытаться изменить его и запустить? – Nikky

+0

А, извините, нет. Это должно войти в код рабочего листа, так как это характерно для рабочего листа, но в остальном - да. Однако я бы поставил точку останова на первой строке и прохожу через нее по строкам с помощью «F8», чтобы быть уверенным, что это не повредит что-либо еще на вашем листе. Вы даже можете сохранить его перед запуском. – seadoggie01

+2

Единственный недостаток с изменением значений vba-кода в ячейке заключается в том, что вы больше не сможете отменить отмену. – Nybbe

Смежные вопросы