Функция разделения VBA() не работает, когда разделителем является «:»

#excel #vba #split

#превосходить #vba #расщеплять

Вопрос:

Я пытаюсь использовать функцию split() для перебора указанного диапазона и разделения всех строк при обнаружении «:» и заменить существующее значение значением разделения.

 Dim k As Integer Dim lRow as Long Dim startZip_col As Long Dim startZip_str As String Dim startZip_result() As String Dim startZip_decomposed As Variant  For k = 2 To lRow  startZip_str = Cells(k, startZip_col).Value  startZip_result = Split(startZip_str, ":")    For Each startZip_decomposed In startZip_result  Cells(k, startZip_col) = startZip_result(1)  Next  Next k  

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

abc:1234 abc:5678 def:3456

попробовал отладку.печать, чтобы точно определить, где находятся ошибки, но значение столбца определено правильно, цикл выглядит нормально, не уверен, где что-то пошло не так

Комментарии:

1. Интересный. Я попробовал ваш код с startZip_col = 1 lRow = 3' и без каких-либо других изменений, он дал мне ответ, 1234 что касается ввода abc:1234 . Теперь мне любопытно, что у вас пошло не так. Расскажи больше.

Ответ №1:

Логические:

  1. Где lRow . startZip_col инициализирован? Правильно определите и инициализируйте свои переменные/объекты.
  2. Полностью квалифицируйте ячейки, иначе они могут относиться к активному листу, который может быть не тем листом, о котором вы думаете. Например ws.Cells(k, startZip_col).Value , где ws находится соответствующий рабочий лист.
  3. Перед разделением проверьте наличие :

Код:

 Option Explicit  Sub Sample()  Dim ws As Worksheet  Dim lRow As Long  Dim i As Long, j As Long    Dim ZipCol As Long  Dim ZipString As String  Dim ZipResult As Variant   '~~gt; Change this to the relevant sheet  Set ws = Sheet1    '~~gt; Change this to the releavant column  ZipCol = 1   With ws  '~~gt; Get the last row in Col A. Change to relevant column  lRow = .Range("A" amp; .Rows.Count).End(xlUp).Row    For i = 2 To lRow  ZipString = .Cells(i, ZipCol).Value    '~~gt; Check if the string contains ":"  If InStr(1, ZipString, ":") Then  ZipResult = Split(ZipString, ":")  '.Cells(1, ZipCol) = ZipResult(1)    '~~gt; For testing  For j = LBound(ZipResult) To UBound(ZipResult)  Debug.Print ZipResult(j)  Next j  End If  Next i  End With End Sub