2015-08-25 2 views
-2

Я ищу макрос excel, чтобы посмотреть на столбец данных и добавить 0, где в конце строки есть только 2 числа.Добавить 0 где только два символа в конце строки

I.e.

AAA/97

станет

AAA/097.

В оригинальном листе будет смесью правильных записей, как один из приведенных выше и ошибочных из них, как верхнего примера

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

Любая помощь приветствуется.

+2

Вы просите нас написать или помочь вам с тем, что вы уже написали? Что вы пробовали? –

ответ

0

Вот код, который должен сделать трюк. Я предположил, что вы не рассматриваете $ как числовое значение в этом.

Sub AddZero() 
Dim wb As Workbook, ws As Worksheet, rng As Range 
Dim chkBool As Boolean, char3 As String, char2 As String, char1 As String 
Set wb = ThisWorkbook 'change this to suit your workbook 
Set ws = wb.Worksheets("Sheet1") 'change this to suit your sheet 
Set rng = ws.Range("B:B") 'change this to suit your range 
For Each Cell In rng 
    If IsEmpty(Cell.Value) Then 
     Set rng = Nothing 
     Set ws = Nothing 
     Set wb = Nothing 
     Exit Sub 'I have assumed that there will not be blank rows in the range 
    End If 
    '''''' start checking the numbers at the end of the string 
    char3 = Mid(Cell.Value, Len(Cell.Value), 1) 
    char2 = Mid(Cell.Value, Len(Cell.Value) - 1, 1) 
    char1 = Mid(Cell.Value, Len(Cell.Value) - 2, 1) 
    If IsNumeric(char3) And char3 <> "$" Then 'isnumeric check the next character 
     If IsNumeric(char2) And char2 <> "$" Then 
      If IsNumeric(char1) And char1 <> "$" Then 
       chkBool = True 
      End If 
      If chkBool = False Then 
       Cell.Value = Mid(Cell.Value, 1, Len(Cell.Value) - 2) & "0" & char2 & char3 'reform the cell value 
      End If 
      chkBool = False 'reset the check if there is already 3 numbers at the end of the string 
     Else: 
      Cell.Value = Mid(Cell.Value, 1, Len(Cell.Value) - 1) & "00" & char3 
     End If 
    Else: 
     'Cell.Value = Mid(Cell.Value, 1, Len(Cell.Value) - 2) & "000" 'not sure if you need this but if no numbers found will mask the end with 000 
    End If 
Next Cell 
Set rng = Nothing 
Set ws = Nothing 
Set wb = Nothing 
End Sub 

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

+0

Спасибо Клинту. Я использовал Dicks для начала, и он работает. Я обязательно буду помнить, если у меня возникнут проблемы! – Chris

+0

Крис вы должны дать голосование на ответы, которые вы нашли полезными. –

+0

Клинт, я столкнулся с проблемами и использовал ваш код. Спасибо, вы очень помогли. Я нажал стрелку вверх, чтобы проголосовать - спасибо! – Chris

0

Не используйте VBA, так как не всем нравится открывать книгу, содержащую макросы. Вместо этого используйте формулу:

=IF(LEN(A1)=6,LEFT(A1,4)&"0"&RIGHT(A1,2),A1) если A1 содержит ячейку.

Скопировать вниз. Это будет доброкачественным в «правильных» ячейках.

+0

Я согласен с вашей предпосылкой использования формул вместо vba. Но ваша формула не касается тех, у которых уже есть трехзначный хвост, как сказал Крис. используя оператор if, чтобы увидеть, есть ли три цифры или нет, будет работать. –

+0

Он имеет 3-значный хвост, если первая цифра равна 0. Это то, что я думал, что это означает OP. Посмотрим, подтвердят ли они. –

+0

Сделал его неизменным на любом трехзначном хвосте. –

0

Try:

=IF(LEN(MID(A1,FIND("/",A1,1)+1,3))<3,(MID(A1,1,FIND("/",A1,1)))&"0"&(MID(A1,FIND("/",A1,1)+1,3)),LEN(MID(A1,FIND("/",A1,1)+1,3))) 
0

Вы должны были бы добавить некоторые проверки ошибок, но эти основы

Public Sub MakeZero() 

    Dim rCell As Range 
    Dim vaSplit As Variant 

    Const sDELIM As String = "/" 

    For Each rCell In Sheet1.Range("A1:A100").Cells 
     vaSplit = Split(rCell.Value, sDELIM) 
     rCell.Value = vaSplit(0) & sDELIM & Format(Val(vaSplit(1)), "000") 
    Next rCell 

End Sub