Для каждого цикла не работает, как ожидалось

У меня есть два листа в excel, один представляет собой доску с несколькими ячейками с числами внутри, а другой - ссылки (у которых есть числа на предыдущей доске), и мне нужно написать в той же строке ссылок, где расположены ячейки.
изображение первой доски, где референсы
изображение листа excel, на котором я должен указать местоположение каждой ссылки
мой код vba

Пример:

Для каждого цикла не работает, как ожидалось

Arm8.png — это доска, а local.png — место, где я пишу локализацию ячеек.

Option Explicit

Sub ciclo()

    Dim FindString As String
    Dim Rng As Range
    Dim matrixVal As Range

    Set matrixVal = Sheets("Localizações").Range("B1")
    FindString = matrixVal

    For Each Rng In matrixVal

        If Trim(FindString) <> "" Then

            With Sheets("Arm8").Range("A1:J10")

                Set Rng = .Find(What:=FindString, _
                                After:=.Cells(.Cells.Count), _
                                LookIn:=xlValues, _
                                LookAt:=xlWhole, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlNext, _
                                MatchCase:=False)

                If Not Rng Is Nothing Then
                    'Application.Goto Rng, False
                    'MsgBox Rng.Column & " - " & Rng.Row
                Else
                    MsgBox "Nothing found"
                End If

            End With

            With Sheets("Localizações")
                .Range("C1:C9").Value = Rng.Column
                .Range("D1:D9").Value = Rng.Row
            End With

        End If

    Next Rng

End Sub

Я ожидал, что вывод в local.png будет столбцом C и D.

2 - 9
2 - 7
2 - 8
2 - 4
5 - 4
7 - 4
5 - 9
9 - 7
9 - 0

Вы установили matrixval как одну ячейку. Таким образом, ваш цикл For-Each запустится только один раз.

Stavros Jon 27.05.2019 12:15
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
1
69
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, как я сказал в своем комментарии, это:

Set matrixVal = Sheets("Localizações").Range("B1")

устанавливает matrixVal как одну единственную ячейку (точнее, B1), поэтому в вашем цикле For-Each нет никаких ячеек для цикла, кроме этой единственной ячейки, поэтому он будет выполняться только один раз.

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

Наконец, вам не следует обновлять переменную Rng внутри цикла, потому что вы уже используете ее для перебора диапазона. Вам нужна вторая переменная типа Range.

Ваш код должен выглядеть так:

 Sub ciclo()

    Dim FindString As String
    Dim Rng As Range
    Dim cell As Range
    Dim matrixVal As Range

    Set matrixVal = ThisWorkbook.Worksheets("Localizacoes").Range("B1:B9")

    For Each cell In matrixVal
        FindString = cell.Value

        If Trim(FindString) <> "" Then

            With ThisWorkbook.Worksheets("Arm8").Range("A1:J10")

                Set Rng = .Find(What:=FindString, _
                                After:=.Cells(.Cells.Count), _
                                LookIn:=xlValues, _
                                LookAt:=xlWhole, _
                                SearchOrder:=xlByRows, _
                                SearchDirection:=xlNext, _
                                MatchCase:=False)

                If Not Rng Is Nothing Then
                    With ThisWorkbook.Worksheets("Localizacoes")
                        .Cells(cell.Row, "C").Value = Rng.Column
                        .Cells(cell.Row, "D").Value = Rng.Row
                    End With
                Else
                    MsgBox "Nothing found"
                End If

            End With

        End If

    Next cell

End Sub

Рад, что смог помочь!

Stavros Jon 27.05.2019 15:29

Другие вопросы по теме