Удалить начальный ноль из ссылки

Я использую ответы LimeSurvey для проверки данных, которые мне нужны в Excel.

Чтобы проверить, правильный ли это человек, они вводят в опросе идентификационный номер.
Затем все происходит следующим образом:
я читаю идентификационную карту, извлекаю ее идентификационный номер из своей идентификационной карты и помещаю его в ячейку Personalia: B7, используя этот код (это текст со значением в нем).

=LEFT(PROPER(RIGHT(eIDimport!A2;LEN(eIDimport!A2)-FIND(CHAR(34);eIDimport!A2)));FIND("h=";PROPER(RIGHT(eIDimport!A2;LEN(eIDimport!A2)-FIND(CHAR(34);eIDimport!A2))))-13)

Это значение также связано с Dataimport: M2 и L7 (=Personalia!B7)

Проблема в том, что опрос не экспортирует лидирующие нули, а значение из ID.
В моем коде, чтобы проверить, какая строка данных нужна, номер ID(с карты) и номер из опрос должен быть одинаковым.
Если он начинается с нуля, логически значения не совпадают, и я получаю сообщение об ошибке.

Пример:
Мой идентификационный номер — 026548321.
Значение из IDcard — 026548321.
Значение из опроса — 26548321.

Как можно удалить первый 0 в ячейке Dataimport M2, если значение IDcard начинается с 0?

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


person SeppeN    schedule 13.02.2021    source источник
comment
Пожалуйста, попробуйте: If left(IDcard, 1) = "0" Then IDcard = Mid(IDcard, 2).   -  person FaneDuru    schedule 13.02.2021
comment
Или как формула, предположив, что M2 имеет значение для обработки: = =IF(LEFT(M2,1)="0",MID(M2,2,100),M2), и использовать ячейку, где эта формула существует (вместо M2).   -  person FaneDuru    schedule 13.02.2021
comment
@FaneDuru спасибо, второй работал нормально, только синтаксические ошибки: , должно быть ; чтобы формула работала.   -  person SeppeN    schedule 13.02.2021
comment
Сделал для стандартных настроек. Если ваши региональные настройки включают ; как разделитель списка, да, это так. Но решение VBA во всех случаях работает стандартно. Вы тоже пробовали и не получилось?   -  person FaneDuru    schedule 13.02.2021
comment
Я только что проверил формулу, я не использовал код VBA.   -  person SeppeN    schedule 13.02.2021
comment
Нет проблем со мной. Рад, что смог помочь! Я видел тег VBA и подумал, что вы тоже хотите изучить этот вариант.   -  person FaneDuru    schedule 13.02.2021


Ответы (1)


Заменить ведущие символы

Контекст: ... не экспортирует ведущие нули...

  • Если вам нужно удалить несколько нулей, вы можете использовать RegEx на основе UDF. Изображение показывает, как это работает.

введите здесь описание изображения

  • In Excel:

    =relaceLeadingChars('DataImport'!M2,"0")
    
  • In VBA:

    Sub replaceLeadingCharsTEST()
        Dim SearchString As String: SearchString = "000203456"
        Dim ResultString  As String
        ResultString = replaceLeadingChars(SearchString, "0")
        Debug.Print ResultString ' Result: "203456"
    End Sub
    

Определяемая пользователем функция (UDF) (в стандартном модуле, например Module1)

Function replaceLeadingChars( _
    ByVal SearchString As String, _
    ByVal FindChar As String, _
    Optional ByVal ReplaceChar As String = "", _
    Optional ByVal doIgnoreCase As Boolean = False) _
As String
    '=replaceLeadingChars(A1,"0")
    With CreateObject("VBScript.RegExp")
        .Global = True
        .IgnoreCase = doIgnoreCase
        .Pattern = "^[" & FindChar & "]*"
        replaceLeadingChars = .Replace(SearchString, ReplaceChar)
    End With
End Function

Можно конечно упростить:

Function removeLeadingZeros( _
    ByVal SearchString As String) _
As String
    '=removeLeadingZeros(A1)
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "^[0]*"
        removeLeadingZeros = .Replace(SearchString, "")
    End With
End Function
person VBasic2008    schedule 13.02.2021