#excel #vba
#excel #vba
Вопрос:
Цель: Если столбец C не начинается с «XXX *», то верните эту ячейку за вычетом первых 5 символов.
Пример:
C2 = XXX Then B2 would be empty
C3 = YYY1220190318 Then B3 = 20190318
C4 = UGA1535D Then B4 = 1535D
‘Вот мой фактический код
Dim arrData As Variant, LastRow As Long, i As Long, ws As Worksheet
Set ws = ThisWorkbook.Sheets("Long List 15032019") 'change
the name of the sheet to the one you are doing the code
With ws
LastRow = .Cells(.Rows.Count, 3).End(xlUp).Row
arrData = .Range("A2", .Cells(LastRow, "C")).Value
For i = 1 To UBound(arrData)
If arrData(i, 3) Like "Bus*" Then
arrData(i, 1) = "BU CRM"
Else
arrData(i, 1) = "CSI ACE"
End If
If arrData(i, 3) Like "CSI*" Or arrData(i, 3) = vbNullString Then
arrData(i, 2) = vbNullString
Else: arrData(i, 2) = Right(arrData(i, 3), 12)
End If
Next i
.Range("A2", .Cells(LastRow, "C")).Value = arrData
End With
Я думаю, что это единственная строка кода, которую необходимо скорректировать Else: arrData(i, 2) = Right(arrData(i, 3), 12)
Я пытался использовать -12 или ВЛЕВО. Но это не сработало бы.
Комментарии:
1. Я смотрел на код и думал… чувак, это похоже на мое, и это было… хахаха, вам нужно сделать символы динамическими.
Right(arrData(i, 3), Len(arrData(i, 3) - 5)
эти 5 символов вы хотите вычесть2. @Дамиан, я почти уверен, что это ваш код, спасибо. Я отредактировал код, но это выдало мне ошибку. Ошибка компиляции — синтаксическая ошибка
3. Я предполагаю, что это происходит со строками, меньшими 6 символов, если это так, это выдаст ошибку. Проверьте это, если это так, то просто используйте оператор if,
If Len(arrData(i, 3) < 6 Then
независимо от того, содержит ли он 5 или менее символовElse
в моем коде выше.4. @Damian все мои строки больше 6 символов. Я попытался исправить, которое вы предложили, но безуспешно.
5. Извините, @AAD. Объявление, которое я пропустил в завершении «)» это должно быть
Right(arrData(i, 3), Len(arrData(i, 3)) - 5)
Ответ №1:
Как насчет:
Sub KleanUp2()
Dim cell As Range, v As String, v2 As String
For Each cell In Intersect(Range("C:C"), ActiveSheet.UsedRange)
v = cell.Value
If Len(v) < 4 Then
vr = ""
Else
vr = Mid(v, 4, 9999)
End If
cell.Offset(0, -1) = vr
Next cell
End Sub
Если значение в столбце C превышает 3 символа, первые три символа удаляются, а результат помещается в ту же строку в столбце B
Если значение в столбце C меньше 4 символов (или ячейка пуста), то в столбце B в той же строке помещается значение null.
Ответ №2:
Попробуйте:
Option Explicit
Sub test()
Dim Lastrow As Long, Row As Long
With ThisWorkbook.Worksheets("Sheet1")
Lastrow = .Cells(.Rows.Count, "C").End(xlUp).Row
For Row = 1 To Lastrow
If Left(.Range("C" amp; Row).Value, 3) = "XXX" Then
.Range("B" amp; Row).Value = ""
Else
.Range("B" amp; Row).Value = Mid(.Range("C" amp; Row).Value, 4, Len(.Range("C" amp; Row).Value) - 3)
End If
Next Row
End With
End Sub
Комментарии:
1. ваш код работает, однако я получаю сообщение об ошибке [Недопустимый вызов процедуры или аргумент (ошибка 5)] Код действительно работает. Есть ли способ избавиться от ошибки? В моем файле более 65 000 строк
2. В итоге я использовал ваш код и еще один для его дальнейшего форматирования. Я не отслеживал, где находился код. Тем не менее, спасибо!!