2015-01-14 5 views
2

У меня есть файл, созданный вне Excel со многими процентами. Все эти проценты имеют одно десятичное место. При импорте в excel Excel добавляет второе десятичное число к процентам - это, по-видимому, некоторый формат по умолчанию для процентов в Excel. Он просто добавляет «0».Excel VBA - добавить пользовательский формат номера

Я хочу отформатировать все десятичные десятичные разряды до одной десятичной точки. Если я сделаю это вручную, используя CTRL + H, найдите формат форматирования/замены, это будет хорошо. Но я не могу это сделать с помощью VBA/macro, даже если я записываю макрос при выполнении замены вручную. Код, сгенерированный записи макроса заключается в следующем:

Application.FindFormat.NumberFormat = "0.00%" 
Application.ReplaceFormat.NumberFormat = "0.0%" 
Cells.Replace What:="", Replacement:="", LookAt:=xlPart, SearchOrder:= _ 
    xlByRows, MatchCase:=False, SearchFormat:=True, ReplaceFormat:=True 

неудача происходит на:

Application.ReplaceFormat.NumberFormat = "0.0%" 

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

Любой вход был бы очень признателен.

Заранее благодарен!

+0

Если вы установили новый пользовательский номер в первую ячейку с помощью VBA ('.range (" A1 "). NumberFormat =" 0.0%; @ "'), не вводится ли этот новый формат пользовательского номера для дальнейшего использования с операцией массовой замены? – Jeeped

+0

@ Jeeped yep, это, кажется, решает это :). Что именно делает «; @»? Я не знаком с этим. –

ответ

3

Если применить пользовательский формат чисел в одной ячейке, она станет «перечислены», а затем для дальнейшего использования с объемной операции замены. Я бы рекомендовал использовать что-то вроде:

.range("A1").NumberFormat = "0.0%;@" 

Эта специальная маска формата может быть применена к любой ячейке с процентом или текстом. Если у вас есть метка заголовка столбца с текстовым значением и применяется к CNF, то часть ;@ заставляет текст отображаться буквально (без изменений). Таким образом, вы можете больше возможностей , где вы ставите первую CNF. После того, как он был использован один раз, он будет доступен для операций (-ов) замены массы на оставшуюся часть процентных значений.

1

Рассмотрим простой:

Sub dural() 
    Dim r As Range 
    For Each r In ActiveSheet.UsedRange 
     If r.NumberFormat = "0.00%" Then 
      r.NumberFormat = "0.0%" 
     End If 
    Next r 
End Sub 
+0

Это работает отлично, хотя примерно в 2 раза медленнее, чем ответ @ Jeeped дал. Кажется, что цикл через каждую ячейку в большом диапазоне медленнее, чем объемный поиск/замена. Большое спасибо! –

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