Найдите соответствующее значение на другом листе и вставьте в следующую пустую ячейку в этой строке - PullRequest
0 голосов
/ 21 апреля 2020

Я боролся с этим весь день, и я уверен, что есть действительно простой ответ, который я просто не нахожу, надеясь, что кто-то может указать мне правильное направление!

Чего я хочу добиться:

  1. посмотреть, можно ли найти значение (R.BName) из sheet1 (wsResults) в столбце c sheet2 (wsSchedule);
  2. если найдено, вставьте значение из sheet1 (который я уже скопировал) в следующую пустую ячейку этой строки;
  3. , если не найден, вставить значение в указанную c ячейку в sheet1

У меня 2 проблемы:

  1. Если есть совпадение - место вставки является последней ячейкой в ​​строке 1 - да, я знаю, что это так, потому что мой код имеет (1, columns.count), но я не знаю, как получить его, чтобы выбрать ячейка совпадения!
  2. "имя посредника не найдено в расписании просмотра" добавляется в wsResults, даже если совпадение было в wsSchedule

Вот мой дефектный код:

'copy result from wsresults
wsResults.range("R.Result").Copy

'find broker & add result to review schedule sheet
Dim wsSchedule As Worksheet
Dim rSearch As range
Dim c As range

Set wsSchedule = Worksheets("Review Schedule")
Set rSearch = wsSchedule.range("C5:C400")

For Each c In rSearch
    If c.Value = wsResults.range("R.BName").Value Then
        wsSchedule.Cells(1, Columns.count).End(xlToLeft).Offset(0, 1).PasteSpecial xlPasteValues
    Else
        With wsResults
            .range("AP2:AP2").Value = "Broker name not found on review schedule"
        End With
    End If
Next c

Любая помощь, которая может быть предложена, будет принята с благодарностью!

1 Ответ

0 голосов
/ 21 апреля 2020

Я верю, что это то, что вы имели в виду. Пожалуйста, попробуйте.

Sub Test()
    ' 009

    Dim wsSchedule As Worksheet
    Dim wsResults As Worksheet
    Dim searchCrit As Variant
    Dim lastR As Long
    Dim R As Long

    Set wsSchedule = Worksheets("Review Schedule")
    Set wsResults = Worksheets("Results")
    ' try to access sheet values as little as possible: it's slow
    ' here, once is enough. No need to do it on every loop
    searchCrit = wsResults.Range("R.BName").Value

    With wsSchedule
        lastR = .Cells(.Rows.Count, "C").End(xlUp).Row
        For R = 5 To lastR
            If .Cells(R, "c").Value = searchCrit Then
                .Cells(R, Columns.Count).End(xlToLeft).Offset(0, 1) = wsResults.Range("R.Result")
                Exit For
            End If
        Next R
    End With

    ' R will be <=lastR if a match was found
    If R > lastR Then
        wsResults.Cells(2, "AP").Value = "Broker name not found on review schedule"
    End If
End Sub

Однако @SJR прав: использование Find вместо l oop будет более эффективным.

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