Если ячейка длинна 5, добавьте префикс 0, иначе оставьте как есть, цикл - PullRequest
0 голосов
/ 19 февраля 2020

У нас есть серийные номера, которые необходимо просмотреть, и некоторые из них имеют длину 5 цифр, но в базе данных есть префикс 0, который, разумеется, отсутствует в формате, который мы получаем. Итак, используя кусочки другого VBA, я получил следующее, которое зацикливается и ничего не меняет.

Что я пропускаю / делаю неправильно?

Sub SNoReview()

    Dim METER                   As String
    Dim SQL_STRING              As String
    Dim ANSWER                  As String
    Dim CELLADDRESS             As Variant


    Application.ScreenUpdating = True
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False


    Sheets("Sheet1").Activate
    Range("N6").Select

    Do Until IsEmpty(ActiveCell)

        CELLADDRESS = ActiveCell.Address
        METER = ActiveCell.Value

        If Len(METER) = 5 Then
            METER = "0" & (METER)
        Else: METER = (METER)
        End If

        ActiveCell.Offset(1, 0).Select

    Loop

End Sub

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

Сначала признаем, что @urdearboy проделал здесь тяжелую работу (расследование) ...

С точки зрения ответа, предположим, что любые данные длиной менее 6 являются цифрой c или текстовой цифрой c ... тогда может быть что-то вроде этого, которое преобразует и форматирует (от N6 вниз):

Option Explicit

Sub SNoReview()

    Dim vSheet As Worksheet
    Dim vCell As Range

    Set vSheet = ThisWorkbook.Worksheets("Sheet1")
    For Each vCell In vSheet.Range("N6:N" & vSheet.Range("N" & vSheet.Rows.Count).End(xlUp).Row)
        If Len(vCell) < 6 Then
            With vCell
                vCell.NumberFormat = "000000"
                vCell = Val(vCell)
            End With
        End If
    Next

End Sub

До

before

После

after

1 голос
/ 19 февраля 2020

Похоже, вы можете просто применить один Числовой формат ко всему диапазону одновременно. Здесь нет необходимости.

Sub sNoReview()

    Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Range("N6:N" & ws.Range("N" & ws.Rows.Count).End(xlUp).Row).NumberFormat = "000000"

End Sub

Это не изменит формат любого числа с LEN> 6

000001 From 1
000011 From 11
000111 From 111
001111 From 1111
011111 From 11111
111111 From 111111

Ваш код

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...