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),没有必要查看这条线,我相信。
代码将讨论聊天中讨论的以下内容:
- 数据应该从
sht1
到sht4
复制在两张表中的ID上 - Id分别位于
Column L
和Column E
,分别为sht1
和sht4
-
A->A
,B->C
,C->D
,I->L
,J->M
,O->B
,将从sht1
复制到sht1
列 -
sht1
和sht4
数据分别从Row 5
Row 2
和Row 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