Как использовать совпадение для извлечения различных значений в диапазоне - PullRequest
0 голосов
/ 21 июня 2019

Мне нужно извлечь несколько значений из разных строк, которые содержат одно и то же значение с моим заданным значением (Range ("A1"). Value), и я хочу извлечь их в (Range ("B1"). Value) по одному один раз, когда я нажимаю кнопку (используя макрос).

Но мой код извлекает неправильные значения. Вот мой код:

        Dim RowNum As Long, lastrow As Long, colnum As Long
        colnum = 14
        RowNum = 1
        lastrow = cells(ASht("M").Rows.Count, colnum).End(xlUp).Row
l01:
        If Application.WorksheetFunction.CountIf(Range(Cells(RowNum, colnum), Cells(lastrow, colnum)), Range("A1").Value) > 0 Then
            RowNum = Application.WorksheetFunction.Match(Range("A1").Value, Range(Cells(RowNum, colnum), Cells(lastrow, colnum)), 0)

            If Range("B1").Value = "" Then
                Range("B1").Value = cells(RowNum, 4).Value
            Else
                If Range("B1").Value <> cells(RowNum, 4).Value Then
                    Range("B1").Value = cells(RowNum, 4).Value
                Else
                    RowNum = RowNum + 1
                    GoTo l01
                End If
            End If
        Else
            MsgBox "Nothing found", vbInformation
        End If

1 Ответ

0 голосов
/ 21 июня 2019

Возможно, вы захотите использовать Find вместо соответствия функции листа.Также обратите внимание на использование циклов, а скорее запуск макроса «один за другим».

Посмотрите, поможет ли это:

Sub findValue()

    Dim ws As Worksheet: Set ws = ActiveWorkbook.Sheets("Sheet1") '<-- change name here
    Dim rowNum As Long, lastRow As Long, colNum As Long
    colNum = 14
    rowNum = 1
    lastRow = ws.Cells(Rows.Count, colNum).End(xlUp).Row

    Dim rngFind As Range
    With ws
        Set rngFind = .Range(.Cells(rowNum, colNum), .Cells(lastRow, colNum)).Find(.Range("A1").Value)
        If Not rngFind Is Nothing Then
            .Range("B1").Value = .Cells(rngFind.Row, 4)
        Else
            MsgBox "Nothing found", vbInformation
        End If
    End With
End Sub

PS: я удалил внутренние условия if, потому что доНасколько я понимаю, вы делали одно и то же независимо от результата.

т.е. Range("B1").Value будет либо пустым, либо не равным cells(RowNum, 4).Value, вы все равно записываете значение.И если они совпадают ... ну, ценность уже есть.Может быть, я что-то упускаю в этой логике.

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