2015-10-14 2 views
0

У меня есть таблица Excel, в которой есть несколько вкладок и ячеек, заполненных значениями%. Есть некоторые ячейки, которые читают 20%, 30%, 40% и т. Д., А формат этих ячеек - «процент». Существует суммарная ячейка, которая суммирует все эти проценты до 100%. Я пытаюсь написать простой макрос/правило, которое будет постоянно читать ячейку суммы и выкидывать предупреждение, если оно не равно 100%. Я не уверен, как действовать дальше.Macro to Limit%

Я пытаюсь использовать Data Validation для этого, а не для любого кодирования, поскольку я действительно хочу, чтобы пользователи не могли изменять значения ячеек, если общее количество изменений от 100. Валидация данных все еще не работает. Кажется, что это всегда приводит к ошибкам. У кого-нибудь есть мысли по этому поводу? Я выбрал диапазон чисел и проверку данных. Я выбираю Custom, где я говорю = Sum (C5: C10) = 100. Это всегда вызывает ошибку, даже если общая сумма 100. Любые мысли?

+0

Вы должны указать диапазон, который вы хотите, чтобы обеспечить суммы до 100%. –

+0

Его 5 ячеек, C1: C5. и C6 представляет собой SUM (C1: C5). Я хочу настроить правило, которое будет постоянно проверять, является ли C6 100%, а если нет, выведите предупреждение. – Amritha

+0

Как вы хотите, чтобы предупреждение появилось? через окно сообщения? –

ответ

0

Если я правильно понял ваш вопрос, вы сможете сделать это без какого-либо кода.

Например, ваши процентные ячейки находятся на Sheet3, Sheet4 и Sheet5 в диапазонах B2: B6.

На Sheet6 вы можете использовать формулу =SUM(Sheet3:Sheet5!$B$2:$B$6)
NB: Это 3D-формула и работает обеспечение Лист4 между Лист3 & Sheet5 в закладке порядке.

Вы можете использовать условное форматирование на общее число - только формат ячеек, содержащих - Значение ячейки больше 1.
Затем отформатируйте его как нечто очевидное (обычно я использую желтый текст с красным фоном).

Ok, так как ответ на Ваш комментарий, добавьте этот код в модуль листа кода, который будет выполняться каждый раз, когда лист высчитывает:

Private Sub Worksheet_Calculate() 
    If Cells(6, 3) > 1 Then 
     MsgBox "Total is too high" 
    End If 
End Sub 
+0

Благодарим за отзыв. Я хотел, чтобы предупреждение появлялось в виде окна сообщений, если какой-либо из входов был изменен. Все входы находятся на одном листе. – Amritha

+0

В этом случае используйте код, который я добавил в нижней части моего ответа. Edit: Говоря это, вы хотите, чтобы он проверял, не на 100%. Использование <> 1 будет вызывать ошибку на каждом входе до тех пор, пока сумма не будет равна 100%, что, вероятно, не то, что вы хотите, - сказал @Vincent в своем ответе. –

0

Вы можете использовать UDF для замены функции SUM:

Function SumAndAlert(rng As Range) As Variant 
    SumAndAlert = Application.Sum(rng) 
    If Application.CountBlank(rng) = 0 And SumAndAlert <> 1 Then MsgBox "not 100%" 
End Function 

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

+0

Да, не во время ввода. Если какой-либо из входных% был изменен, я хотел, чтобы msgbox всплыл и сказал, что сумма не добавляется к 100. – Amritha

+0

Я отредактировал решение, чтобы не отправлять сообщение, если некоторые ячейки диапазона пустые. –

0

Я бы не использовал процедуру события Worksheet_Calculate, потому что это вызвало бы слишком частую оценку состояния MsgBox.

Старайтесь держать, что к абсолютному минимуму, так как:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Count = 1 Then 
     If Target.Column = 3 Then 
      If Target.Row < 6 Then 
       If Val(Me.[c6]) > 1 Then 
        MsgBox "Greater than 100%" 
       End If 
      End If 
     End If 
    End If 
End Sub 
+0

@Amritha Вы могли это сделать? –