-6

У меня есть значение в любой ячейке, которое больше 60. Для моей цели мне нужно вычесть 60 из таких значений, пока значение не станет меньше 60. Так, например, скажем, у меня есть ячейка, содержащая значение 1000. Значение, которое я хочу использовать, будет 40, потому что 40 - это первое значение, которое меньше 60 после многократного вычитания 60.

Я предполагаю решение VBA, которое будет вычитать 60 раз, а затем останавливаться и отображать окончательное значение 40, поскольку это удовлетворяет условию.

Диапазон данных большой, и значения выше 60 могут встречаться в любом месте диапазона. Я хочу, чтобы это делалось автоматически при открытии электронной таблицы, чтобы все формулы, которые могли ссылаться на значения свыше 60, использовали оставшиеся значения.

2 ответа2

0

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

    =MOD(ED1,60)

Если вы разделите 1000 на 60, вы получите 16,666 ... Это означает, что вам нужно будет вычесть 60 шестнадцать раз, чтобы получить что-то меньше 60. Функция MOD производит остаток после деления (в данном случае 40), что эквивалентно этим вычитаниям.

Вы можете использовать это двумя способами. Одним из них является включение этого выражения MOD (без знака равенства) в ваши формулы вместо простой ссылки на ячейку для ячеек данных, которая может превышать 60. Это будет использовать переведенное значение.

Если у вас есть многочисленные формулы, которые ссылаются на каждую ячейку, и вы не хотите, чтобы накладные расходы приходились на все эти повторные пересчеты одних и тех же значений, создайте набор переведенных значений - дублированный диапазон данных, содержащий приведенную выше формулу. Это переведет данные один раз, и тогда все ваши формулы смогут ссылаться на эти числа вместо необработанных данных. Если вы не хотите обновлять данные этих вычислений, сделайте копию | паста специальная | ценности. Вы можете вставить результаты поверх необработанных данных, а затем удалить промежуточные вычисления.

0

У меня отличные новости! Поскольку значение в ED1 является константой, формула всегда будет иметь значение:

960

Давайте предположим, что дальний диапазон равен A1:Z100.

Вот решение на основе VBA :

Private Sub Workbook_Open()
    Sheets("Sheet1").Range("A1:Z100").Value = 960
End Sub

Это макрос события рабочей книги.

Поскольку это код рабочей книги, его очень легко установить и использовать:

  1. щелкните правой кнопкой мыши на крошечном значке Excel слева от меню «Файл» в строке меню.
  2. выберите View Code - откроется окно VBE
  3. вставьте материал и закройте окно VBE

Если вы сохраните книгу, макрос будет сохранен вместе с ней. Если вы используете версию Excel более поздней, чем в 2003 году, вы должны сохранить файл как .xlsm, а не .xlsx

Чтобы удалить макрос:

  1. вызвать окна VBE, как указано выше
  2. очистить код
  3. закройте окно VBE

Чтобы узнать больше о макросах в целом, смотрите:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

а также

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

Чтобы узнать больше о макросах событий (код книги), см .:

http://www.mvps.org/dmcritchie/excel/event.htm

Макросы должны быть включены, чтобы это работало!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .