У меня есть два листа в 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
Во-первых, как я сказал в своем комментарии, это:
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
Рад, что смог помочь!
Вы установили
matrixval
как одну ячейку. Таким образом, ваш циклFor-Each
запустится только один раз.