Страницы: 1
RSS
Формат ячейки для чисел, близких к нулю
 
Здравствуйте. Имеются данные в виде значений в большой таблице. Задан единый формат вида "+0,1", "-0,1", "-" для нуля. Проблема возникает с числами типа "0,01", которые отображаются как "+0,0", а надо "+0,01", то есть до первого знака после десятичных нулей. Пример во вложении.
Применять формулу проблематично, так как данные уже вставлены как значения, нужен какой-то универсальный формат...
 
lipun, такой вариант но кажется вам не подойдет от дилетанта так сказать

+# ##0,0########;-# ##0,0########;"-"
Не бойтесь совершенства. Вам его не достичь.
 
уф
 
Наложите на простое форматирования два условия для условного форматирования (УФ)
Пример - в столбце Е
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Благодарю за ответы!

Mershik, Михаил Лебедев, в ваших вариантах есть недостаток: например "+0,001111" так и отображается, а должно быть только до первого знака после последнего десятичного нуля "+0,001".

artyrH, ваш вариант близок к идеальному, с положительными значениями всё хорошо, но никак не могу найти причину неправильного отображения отрицательных чисел, вроде и форматы заданы аналогично положительным:
"-0,011" отображается как "-0,011", а должно "-0,01",
при этом "+0,011" отображается правильно: "+0,01"  
Изменено: lipun - 21.12.2018 06:39:14
 
Цитата
lipun написал:
не могу найти причину
пример был не полный. из отрицательных было только -1 .  
 
artyrH, спасибо! Это именно то, что я искал!
Действительно, я упустил в примере случаи с минусами...
 
Цитата
lipun написал:  например "+0,001111" так и отображается, а должно быть только до первого знака после последнего десятичного нуля "+0,001".
Разберитесь с примером и подкорректируйте, как Вам надо.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Здравствуйте!
Хочу вернуться к старому вопросу... Я использовал данные мне советы. Во вложении - пример условного форматирования и ниже - требования к этому форматированию.
Может быть, есть какой-то более изящный и менее требовательный к ресурсам способ?
Дело в том, что в файле порядка 300 строк и 60 столбцов, и он жутко тормозит. Доходило до того, что при работе с файлом размером 300 Кб он занимает в оперативной памяти до 7Гб из 8-ми имеющихся.
 
lipun,  использовать не УФ а делать через макрос
Не бойтесь совершенства. Вам его не достичь.
 
Прошу помощи в написании макроса! :) Правда, пока не совсем понимаю, как он будет работать. Возможно, нужно будет сначала выводить запрос на диапазон, а потом к нему применять правило.  
 
Цитата
lipun написал:
Правда, пока не совсем понимаю, как он будет работать
а вот как опишите так и будет) и где )
Не бойтесь совершенства. Вам его не достичь.
 
Цитата
написал:
а вот как опишите так и будет) и где )
Хорошо! Описываю: Выделяем диапазон, к которому нужно применить это форматирование. Запускаем макрос. Происходит форматирование (правило на примерах "было-стало" описал во вложении)  
 
0,00019
-0,0099111
Какой формат для таких значений?
 
Да, действительно, нюанс. Правильнее округлить до того знака после запятой, который не равен нулю (после округления):
0,0002 и
-0,01
 
Можно так. Вставлять в модуль листа. В примере форматируются числа в столбцах A:B.
Код
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim rg As Range, cell As Range, v, s As String, fmt As String
  Set rg = Me.Range("A:B") ' Указываем диапазон для замены формата ячеек
                           ' Например, столбцы A и B
  Set rg = Application.Intersect(Target, rg)
  If rg Is Nothing Then Exit Sub
  For Each cell In rg.Cells
    v = cell.Value
    If VarType(v) = vbDouble Then '  в ячейке число
      s = Right(Format(v, "0.E+00"), 3)
      If Left(s, 1) = "-" Then
        fmt = "0." & String(Right(s, 2), "0")
      Else
        fmt = "0"
      End If
      
      fmt = "+" & fmt & ";-" & fmt & ";-"  ' отображаем числа со знаком, а ноль как дефис
      If cell.NumberFormat <> fmt Then cell.NumberFormat = fmt
    End If
  Next cell
End Sub
Владимир
 
Прошу прощения, до праздников не успел ответить.
Что-то не получилось запустить макрос. После вставки модуля макрос не появляется в списке макросов. Что не так делаю?
Его же можно будет добавить в личную книгу макросов и применять в любом файле?
Если можно, подкрутите, пожалуйста, макрос, чтобы он применялся к заранее выделенному диапазону (открываем любую книгу, выделяем нужный диапазон, запускаем макрос, видим результат). Это сделает его универсальным.
 
Попробуйте изменить условие УФ как в примере
=ABS(C5)<0,000001
Ну и прекращение выполнения проверок  - тоже благотворно сказываются.
На втором листе генератор значений =("0,"&REPT(0;RANDBETWEEN(0;5))&RANDBETWEEN(11;99))*RANDBETWEEN(-1;1)
и УФ все работает без тормозов.
По вопросам из тем форума, личку не читаю.
 
Цитата
lipun написал:
После вставки модуля макрос не появляется в списке макросов.
Цитата из #16: Вставлять в модуль листа.
Макрос будет автоматически срабатывать при изменении ячеек листа (столбцы A и B). Если нужно изменить формат для ранее введенных значений, то выделите соответствующие ячейки, скопируйте их в буфер обмена и вставьте заново.
Изменено: sokol92 - 10.01.2022 14:35:44
Владимир
 
Цитата
написал:
Попробуйте изменить условие УФ как в примере=ABS(C5)<0,000001
Благодарю! Этот вариант УФ работает гораздо быстрее моего.
 
Цитата
написал:
Макрос будет автоматически срабатывать при изменении ячеек листа
Благодарю! Работает как часы!  :)
Одна только проблема: кроме основного файла данное форматирование приходится применять в других файлах, на разных листах, в разных диапазонах. И данные не все введены как значения, есть формулы, поэтому скопировать и вставить не всегда сработает. Поэтому я мечтал об "универсальности"..  
Изменено: lipun - 13.01.2022 06:14:20
Страницы: 1
Наверх