Добрый день! Буду благодарен за помощь в решении вопроса. Есть таблица с парой клеток для которых выполняется условное форматирование с рядом правил, которое форматирует одни значения так, что одни появляются с 3 знаками после запятой, а другие с 5 знаками. Это достаточно удобно, но можно ли сделать так, чтобы при вводе числа я просто вводил 6 цифр, например, а ексел ещё автоматически определял с учётом условия сколько из этих 6 цифр составляют целую часть числа, а какие - дробную. Например, есть клетка которое должно выводить число где 4 первые цифры - целая часть, остальные 3 - дробная. Пример: ввожу 2311345, а результат вижу как 2311,345.
Добрый день! Буду благодарен за помощь в решении вопроса. Есть таблица с парой клеток для которых выполняется условное форматирование с рядом правил, которое форматирует одни значения так, что одни появляются с 3 знаками после запятой, а другие с 5 знаками. Это достаточно удобно, но можно ли сделать так, чтобы при вводе числа я просто вводил 6 цифр, например, а ексел ещё автоматически определял с учётом условия сколько из этих 6 цифр составляют целую часть числа, а какие - дробную. Например, есть клетка которое должно выводить число где 4 первые цифры - целая часть, остальные 3 - дробная. Пример: ввожу 2311345, а результат вижу как 2311,345.KrosTj
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 And IsNumeric(Target) Then Application.EnableEvents = False Target = Target / 1000 Application.EnableEvents = True End If End Sub
[/vba]
Подскажу(те) . VBA код небольшой. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 And IsNumeric(Target) Then Application.EnableEvents = False Target = Target / 1000 Application.EnableEvents = True End If End Sub
KrosTj, Я боюсь, что если вы это себе вставите, то может не заработать. Лучше поместить это в файл Excel, в модуль того листа, где вводятся эти магические числа. При этом сразу отмечу, что это работает в любой ячейке этого листа, там где надо и где - не надо. Когда нужно и когда нет. Например если ввести 123,456 получится 0,123456.
KrosTj, Я боюсь, что если вы это себе вставите, то может не заработать. Лучше поместить это в файл Excel, в модуль того листа, где вводятся эти магические числа. При этом сразу отмечу, что это работает в любой ячейке этого листа, там где надо и где - не надо. Когда нужно и когда нет. Например если ввести 123,456 получится 0,123456.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
[/vba] поменяется. туда добавится условия по вашим ячейкам. На случай ввода дробного числа нужно вот так [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 And IsNumeric(Target) Then If Target = Int(Target) Then Application.EnableEvents = False Target.Value = Target.Value / 1000 Application.EnableEvents = True End If End If End Sub
[/vba]
тогда вот это [vba]
Код
If Target.Count = 1 And IsNumeric(Target) Then
[/vba] поменяется. туда добавится условия по вашим ячейкам. На случай ввода дробного числа нужно вот так [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 And IsNumeric(Target) Then If Target = Int(Target) Then Application.EnableEvents = False Target.Value = Target.Value / 1000 Application.EnableEvents = True End If End If End Sub
bmv98rus, ок, а вот там пишет, что ошибка проверки данных при наличии значения - это можно исправить? И я нашёл ваш код, теперь, так как это был файл для примеров, можете ли вы обьяснить что мне нужно в нём поменять при вставлении в модуль подлинного файла если там просто другое расположение заголовка и соответственно клеток с самими значениями.
bmv98rus, ок, а вот там пишет, что ошибка проверки данных при наличии значения - это можно исправить? И я нашёл ваш код, теперь, так как это был файл для примеров, можете ли вы обьяснить что мне нужно в нём поменять при вставлении в модуль подлинного файла если там просто другое расположение заголовка и соответственно клеток с самими значениями.KrosTj
в том случае если количество сиволов не соответвует ожидаеммы 6 или 7, как указано в задании. Если этого не требуется, то уберите проверку данных. Добавил комменты, может поможет. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'Cells(4, 2) - B4 'Cells(Rows.Count, 2) - последняя ячейка столбца B If Target.Count = 1 And _ Not Intersect(Target, Range(Cells(4, 2), Cells(Rows.Count, 2))) Is Nothing _ And IsNumeric(Target) Then If Target = Int(Target) Then Application.EnableEvents = False ' Cells(3, 2) - Ячейка B3 с заголовком. Target.Value = Target.Value / _ IIf(Cells(3, 2) <> "XAUUSD" And Cells(3, 2) <> "USDJPY", 10 ^ 5, 10 ^ 3) Application.EnableEvents = True End If End If End Sub
в том случае если количество сиволов не соответвует ожидаеммы 6 или 7, как указано в задании. Если этого не требуется, то уберите проверку данных. Добавил комменты, может поможет. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'Cells(4, 2) - B4 'Cells(Rows.Count, 2) - последняя ячейка столбца B If Target.Count = 1 And _ Not Intersect(Target, Range(Cells(4, 2), Cells(Rows.Count, 2))) Is Nothing _ And IsNumeric(Target) Then If Target = Int(Target) Then Application.EnableEvents = False ' Cells(3, 2) - Ячейка B3 с заголовком. Target.Value = Target.Value / _ IIf(Cells(3, 2) <> "XAUUSD" And Cells(3, 2) <> "USDJPY", 10 ^ 5, 10 ^ 3) Application.EnableEvents = True End If End If End Sub
А что мне вписать в intersect если я хочу выбрать не отдельные клетки, диапазоны и тд, а столбец таблицы. В самом первом коде у вас было распространение этого макроса в ячейки B4 и до конца столбца B, а не до конца таблицы. Мне бы вот чтобы конкретно столбец таблицы захватывал.
А что мне вписать в intersect если я хочу выбрать не отдельные клетки, диапазоны и тд, а столбец таблицы. В самом первом коде у вас было распространение этого макроса в ячейки B4 и до конца столбца B, а не до конца таблицы. Мне бы вот чтобы конкретно столбец таблицы захватывал.KrosTj
bmv98rus, изначально я тоже подумал так сделать, но вдруг осознал, что не зря мне нужно указать в коде цель как именно столбец таблицы, чтобы иметь возможность в дальнейшем её продлевать и чтобы все сохранялось для новых строк, и здесь я извинюсь, так как немного неверно поставил условие задачи. Мне нужно так, как в этом файле, там изменился всего 1 аспект.
bmv98rus, изначально я тоже подумал так сделать, но вдруг осознал, что не зря мне нужно указать в коде цель как именно столбец таблицы, чтобы иметь возможность в дальнейшем её продлевать и чтобы все сохранялось для новых строк, и здесь я извинюсь, так как немного неверно поставил условие задачи. Мне нужно так, как в этом файле, там изменился всего 1 аспект.KrosTj
KrosTj, Так нужен или не нужен контроль ввода 6 или 7 цифр? что делать если слева XAUUSD и ввели 6 цифр. Или я не совсем понял и вы хотите чтоб на 6й или 7й цифре срабатывал автоввод значения? Самое лучшее, это в примере выше написать, что ввели и что должно получится, при разном количестве цифр и разных кодах.
KrosTj, Так нужен или не нужен контроль ввода 6 или 7 цифр? что делать если слева XAUUSD и ввели 6 цифр. Или я не совсем понял и вы хотите чтоб на 6й или 7й цифре срабатывал автоввод значения? Самое лучшее, это в примере выше написать, что ввели и что должно получится, при разном количестве цифр и разных кодах.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Сообщение отредактировал bmv98rus - Понедельник, 05.02.2018, 20:28
bmv98rus, Автоввода не нужно, вот смотрите, представим что мы находимся в пустой клетке у которой слева XAUUSD, то на этом этапе эксел должен уже предполагать, что в этой клетке будет число с 4 знаками для целых и 3 для дроби. Я могу ввести либо все 7 цифр и ексел просто поставит запятую в нужном месте, а могу и вообще 1 цифру, в таком случае результатом при вводе должно быть 1000,000. Если ввожу только 3 цифры и они, к примеру, 123, то возврат - 1230,000. И только если вводятся больше 7 цифр - выдавать ошибку. Это было для XAUUSD, а остальные случаи по аналогии.
bmv98rus, Автоввода не нужно, вот смотрите, представим что мы находимся в пустой клетке у которой слева XAUUSD, то на этом этапе эксел должен уже предполагать, что в этой клетке будет число с 4 знаками для целых и 3 для дроби. Я могу ввести либо все 7 цифр и ексел просто поставит запятую в нужном месте, а могу и вообще 1 цифру, в таком случае результатом при вводе должно быть 1000,000. Если ввожу только 3 цифры и они, к примеру, 123, то возврат - 1230,000. И только если вводятся больше 7 цифр - выдавать ошибку. Это было для XAUUSD, а остальные случаи по аналогии.KrosTj
Есть микро особенность, настроено на работу с таблицей и в любой таблице в последнем столбце будет так работать, для того чтоб это исключить, надо закрепить или имя таблицы или точно знать где она расположена.
Используется макрос, проверка данных и условное форматирование.
Есть микро особенность, настроено на работу с таблицей и в любой таблице в последнем столбце будет так работать, для того чтоб это исключить, надо закрепить или имя таблицы или точно знать где она расположена.
Используется макрос, проверка данных и условное форматирование.bmv98rus