2012-02-16 9 views
0

Я пытаюсь добавить 0.00, если значение ячейки не пусто и не 0.Below код я пытаюсь, но не работает:форматирование ячеек с Excel VBA

For x = 1 To ActiveWorkbook.Sheets.Count Step 1 
    With ActiveWorkbook.Worksheets(x).Range("A1:Z30") 
     Set FinColumn = .Find(What:="price", AFter:=.Cells(1, 1), LookIn:=xlValues, LookAt _ 
      :=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
      False, SearchFormat:=False) 
     If FinColumn Is Nothing Then 
     Else 
     I = FinColumn.Row + 1 
     c = FinColumn.Column 
    **problem with below Do loop,no clues how to do** 
     **Do Until .Cells(I, c).Value <> "" And .Cells(I, c).Value <> 0 
      .Cells(I, c).NumberFormat = "0.00" 
      I = I + 1 
     Loop** 
     End If 
    End With 
    Next x 

Просьба предоставить код для удовлетворения ниже условий: Я хочу, чтобы код работал в обоих предыдущих версиях 2007 также и должны соответствовать ниже условиях:

, если данные, как показано ниже в первенствует:

Emp Name Emp id Empsal 

Jhon  1   

steve  2  2 

mike  3  3.5 

paul  4  0 

gabriel 5  0.00 

bush  6  null 

если я запустить макрос Данные должны быть преобразованы в ниже формат в столбце Empsal:

Emp Name Emp id Empsal 

Jhon  1  0 

steve  2  2 

mike  3  3.50 

paul  4  0 

gabriel 5  0.00 

bush  6  0 

Спасибо,

Chaitu

+0

ли не лет u установка ненулевых непустых ячеек в = 0,00 вместо добавления .00? – Raystafarian

+0

Не сообщая, что проблема/ошибка значительно снижает вероятность получения ответа. – Eddy

+0

Я хотел быть append .00 только тогда, когда ячейка не пустая, а не ноль. Если она равна 0 или null, оставьте ее равной 0 – user569125

ответ

0

Я понимаю, что вы имели в виду вы хотите "0.00" вошли как числовое значение, но отформатирован, чтобы выглядеть как «0.00 «? В этом случае ...

.Cells(I, c).Value = 0 
.Cells(I, c).NumberFormat = "0.00" 
+0

. Я хотел быть добавлен .00 только тогда, когда ячейка не пустая, а не ноль. Если она равна 0 или null оставьте это как 0 – user569125

+0

Возможно, вам следует указать, какой результат вы получаете в настоящее время, потому что я не вижу, как ваш исходный код вернет что-либо, кроме того, что вы просили (независимо от того, является ли оно «0.00» или «.00»)? – Skytunnel

+0

Я получаю 0.00, если значение равно 0 или пустое или пустое. – user569125

0

Ваш цикл:

 Do Until .Cells(I, c).Value <> "" And .Cells(I, c).Value <> 0 
     .Cells(I, c).Value = "0.00" 
     I = I + 1 
    Loop 

зацикливается, пока не найдет непустой/ненулевое значение, и оно безусловно устанавливает каждый нулевой ячейки до 0 здесь:

.Cells(I, c).Value = "0.00" 

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

Если вы хотите установить только ненулевые значения, вам необходимо изменить условие предела цикла, которое не противоречит второму тесту с ненулевой/нулевой ячейкой. В этом цикле (это поиск не нуль), сделайте что-то самостоятельно, чтобы проверить каждую ячейку за нуль или нет. (например, если if/then/else устанавливает его значение).

+0

Петли слишком дороги за это время, гораздо лучше использовать 'Find' approch, чтобы вопрос содержал – brettdj

4

я рекомендую использовать пользовательский формат чисел без использования VBA, например:

[=0]0;0.00 

или если вы хотите хорошие большие номера тоже:

[=0]0;[>=1000]# ### ###;0.00 
+0

+1 что это путь! !!!! –

1

испытанный (БЫСТРЫЙ МЕТОД)

В этом коде используется условное форматирование. Единственный недостаток заключается в том, что этот код будет работать в Excel 2007 и далее: P Итак, если у вас есть Excel 2003, это не сработает.

Option Explicit 

Sub Sample() 
    Dim x As Long 
    Dim FinColumn As Range 

    For x = 1 To ActiveWorkbook.Sheets.Count 
     With ActiveWorkbook.Worksheets(x).Range("A1:Z30") 
      Set FinColumn = .Find(What:="price", AFter:=.Cells(1, 1), _ 
      LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _ 
      SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False) 

      If Not FinColumn Is Nothing Then 
       With Worksheets(x).Columns(FinColumn.Column) 
        .NumberFormat = "General" 
        .FormatConditions.Delete 
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ 
        Formula1:="=0" 
        .FormatConditions(1).NumberFormat = "0.00" 
        .FormatConditions(1).StopIfTrue = True 
       End With 
      End If 
     End With 
    Next x 
End Sub 
+0

Я хочу, чтобы код работал и в предыдущих версиях 2007 года, и должен соответствовать ниже условиям: 1) если значение ячейки равно null или пустое шоу 0, 2) если значение ячейки равно 1 показать 1 3) если значение ячейки 1.29 показать 1.29 4) если значение ячейки равно 0, тогда покажите 0 – user569125

+0

Не могли бы вы проверить этот вариант. Обновленный мой вопрос – user569125

+0

Вы данные для paul и gabriel - это то же самое, почему же другое форматирование? –

0

Хорошо, я думаю, что знаю, что вы имеете в виду сейчас.Проблема заключается в том, что вы ввели невозможное Do Until заявления, потому что значение ячейки не может быть пустым AND 0 в то же время, так что ваш вероятно получать бесконечный цикл

Ниже, я просто заменил ваш AND с OR

Do Until .Cells(I, c).Value <> "" Or .Cells(I, c).Value <> 0 
    .Cells(I, c).Value = "0.00" 
    I = I + 1 
Loop 

Или, если это еще не покрывает его, а затем попробуйте использовать <> Empty, потому что Empty будет охватывать как 0 и «»

Do Until .Cells(I, c).Value <> Empty 
    .Cells(I, c).Value = "0.00" 
    I = I + 1 
Loop 
+0

Я должен выполнить нижеприведенные случаи для существующего кода: 1) если значение ячейки равно null или пустое шоу 0, 2) если значение ячейки равно 1 показать 1 3) если значение ячейки равно 1,29, см. 1.29 4) если значение ячейки равно 0 затем показать 0 – user569125

+0

Несомненно, ваш исходный код плюс вышеупомянутое изменение достигнет ваших заявленных случаев? Если я ошибаюсь, уточните, где находится ваша проблема. Из того, что я вижу, случаи 2-3 одинаковы и достигаются путем обработки дела 1, которое вы уже сделали? Если бы я должен был начать некоторые догадки, я бы сказал, что вы на самом деле имеете в виду, это то, что у вас нет того, что ваш цикл останавливается в первой пустой ячейке, но продолжать просто без редактирования этих ячеек. Но это не место для догадок, вам нужно сделать ваш вопрос яснее. – Skytunnel

+0

Как случае 2 и 3 являются одинаковыми. Если значение входной ячейки не имеет каких-либо децимал. Мне нужно сохранить это, если у него есть десятичные числа, мне нужно установить формат номера до 0,00, кроме этого, если значение ячейки равно null, empty или 0 Мне нужно показать 0. Я не знаю, как dhat.if вы получили какую-либо идею, пожалуйста, дайте мне ответ. – user569125

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