VBA,使用偏移量

我有4个,sht1,sht2,sht3和sht4。

我正在从列1到列3复制列E和F. 然后我看看sht 2中的相应值,并将它们粘贴到sht3中。

然后我看看我的sht3,如果列“G”有“NO”; 然后我复制相应的行到sht4。

直到,我已经完成了编码。

我想在sht4中查看E列,并从sht1粘贴相应的ID。 有人可以告诉我,我该怎么做?

编辑。

在sht3中,我只有在F列有Id时才填充行。

在less数情况下,我没有列F,意味着没有ID。

所以,我把它们复制到sht4。 现在我已经在sht4,列E填充。 我想在sht1中查看这些ID的相关信息。 除了E之外,我想要sht1中每一列的信息。

我知道我们可以使用Offset,但是如何在这种情况下使用它,我尝试了下面的代码

Sub nlookup() Dim i As Long Dim totalrows As Long Dim rng As Range Sheets("sht1").Select totalrows = ActiveSheet.UsedRange.Rows.Count Sheets("sht4").Select For i = 5 To totalrows Set rng = Sheets("sht2").UsedRange.Find(Cells(i, 5).Value) 'If it is found put its value on the destination sheet If Not rng Is Nothing Then Cells(i, 6).Value = rng.Value Cells(i, 1).Value = rng.Offset(0, 0).Value Cells(i, 2).Value = rng.Offset(0, 14).Value Cells(i, 3).Value = rng.Offset(0, 1).Value Cells(i, 4).Value = rng.Offset(0, 2).Value Cells(i, 12).Value = rng.Offset(0, 8).Value Cells(i, 13).Value = rng.Offset(0, 9).Value End If Next End Sub 

设置rng = Sheets(“sht2”)。UsedRange.Find(Cells(i,5).Value),没有必要查看这条线,我相信。

sht4的图片。这是从sht3中提取的。 sht1的图片

代码将讨论聊天中讨论的以下内容:

  1. 数据应该从sht1sht4复制在两张表中的ID上
  2. Id分别位于Column LColumn E ,分别为sht1sht4
  3. A->AB->CC->DI->LJ->MO->B ,将从sht1复制到sht1
  4. sht1sht4数据分别从Row 5 Row 2Row 2 Row 5开始

     Sub Demo() Dim srcLastRow As Long, destLastRow As Long Dim srcWS As Worksheet, destWS As Worksheet Dim i As Long, j As Long Application.ScreenUpdating = False Set srcWS = ThisWorkbook.Sheets("Sht1") Set destWS = ThisWorkbook.Sheets("Sht4") srcLastRow = srcWS.Cells(srcWS.Rows.Count, "L").End(xlUp).Row destLastRow = destWS.Cells(destWS.Rows.Count, "E").End(xlUp).Row For i = 2 To destLastRow For j = 5 To srcLastRow If destWS.Cells(i, "E").Value = srcWS.Cells(j, "L").Value Then destWS.Cells(i, "A") = srcWS.Cells(j, "A") destWS.Cells(i, "B") = srcWS.Cells(j, "O") destWS.Cells(i, "C") = srcWS.Cells(j, "B") destWS.Cells(i, "D") = srcWS.Cells(j, "C") destWS.Cells(i, "L") = srcWS.Cells(j, "I") destWS.Cells(i, "M") = srcWS.Cells(j, "J") End If Next j Next i Application.ScreenUpdating = True End Sub 

为什么不使用Cells(i, 4).Value = rng.Cells(i, 6).Value ? 也摆脱了。select

 Sub nlookup() dim sht as Worksheet Dim i As Long Dim totalrows As Long Dim rng As Range totalrows = Sheets("sht1").UsedRange.Rows.Count Set sht = Worksheets("sht4") For i = 5 To totalrows Set rng = Sheets("sht2").UsedRange.Find(sht.Cells(i, 5).Value) 'If it is found put its value on the destination sheet If Not rng Is Nothing Then sht.Cells(i, 6).Value = rng.Value sht.Cells(i, 1).Value = rng.Cells(i, 1).Value sht.Cells(i, 2).Value = rng.Cells(i, 16).Value sht.Cells(i, 3).Value = rng.Cells(i, 4).Value sht.Cells(i, 4).Value = rng.Cells(i, 6).Value sht.Cells(i, 12).Value = rng.Cells(i, 20).Value sht.Cells(i, 13).Value = rng.Cells(i, 22).Value End If Next End Sub