Excel IF / MID l oop результат, показывающий дополнительные данные - PullRequest
0 голосов
/ 06 марта 2020

Я работаю с текстовым файлом фиксированного формата из 100 000 строк, который я копирую и вставляю в лист с именем DATA. Все строки в этом листе начинаются с AVS или AVD. У меня есть код ниже, который просматривает лист данных с функцией IF MID. Я только хочу получить данные, если первые 3 символа строки начинаются с AVS. При запуске он корректно извлекает данные из строки AVS, но затем в последующих строках отображаются те же данные, даже если они начинаются с AVD. Я перечислил образец ниже. Я думаю, что это может иметь отношение к обработке ошибок, но я не знаю. Я не получаю никаких ошибок, я просто получаю дополнительные данные, которые не запрашиваются. Любая помощь, которую вы, ребята, можете дать, была бы удивительной!

Sub AVS()

Dim ws As Worksheet
Dim ws1 As Worksheet

Set ws = ThisWorkbook.Worksheets("DATA")
Set ws1 = ThisWorkbook.Worksheets("AVS")
Dim lastRow, myLoop, newValue
lastRow = ws.Cells(Rows.Count, 1).End(xlUp).row
Application.ScreenUpdating = False


'Range("A" & lastRow).ClearContents

For myLoop = 1 To lastRow

   If MID(ws.Range("A" & myLoop).Value, 1, 3) = "AVS" Then
      newValue = MID(ws.Range("A" & myLoop).Value, 48, 4)
End If

        ws1.Range("A" & myLoop).Value = newValue

Next

 Application.ScreenUpdating = True
End Sub

Образец из таблицы данных:

AVS00001              Y6678                NN  B5UP 
AVD00001               6678                N INQN B5UP6678
AVS00001              Y6678                NN  0067
AVD00001               6678                N INQN 00676678
AVS00001              G6678                NN  1381
AVD00001               6678                N INQN 13816678
AVS00001              Y6678                NN  1922
AVD00001               6678                N INQN 192210-61096-58
AVD00001               6678                N INQN 19226678 
AVD00001               6678                N INQN 19226678 
AVS00001              Y6678                NN  5018

Текущие результаты

B5UP (CORRECT)
B5UP (WRONG, ROW STARTS WITH AVD)
0067 (CORRECT)
0067 (WRONG, ROW STARTS WITH AVD)
1381 (CORRECT)
1381 (WRONG, ROW STARTS WITH AVD)
1922 (CORRECT)
1922 (WRONG, ROW STARTS WITH AVD)
1922 (WRONG, ROW STARTS WITH AVD)
1922 (WRONG, ROW STARTS WITH AVD)
5018 (CORRECT)

Cu

1 Ответ

1 голос
/ 06 марта 2020

Если я правильно понимаю из комментариев, это должно работать:

Dim RowCounter as long
RowCounter = 1 

For myLoop = 1 To lastRow
    If MID(ws.Range("A" & myLoop).Value, 1, 3) = "AVS" Then
        newValue = MID(ws.Range("A" & myLoop).Value, 48, 4)
        ws1.Range("A" & RowCounter).Value = newValue
        RowCounter = RowCounter + 1
    End If

Next
...