Excel VBA - 在工作表之间传输数据

Posted

技术标签:

【中文标题】Excel VBA - 在工作表之间传输数据【英文标题】:Excel VBA - Transferring data between sheets 【发布时间】:2013-12-03 15:50:36 【问题描述】:

我正在尝试比较一个工作簿中的两个工作表。我需要将第一张表的 A 列中的值与表 2 的 A 列进行匹配,如果找到匹配值,请将表 2 的 E 列中的值复制并粘贴到表 1 的 E 列中。例如:

Sheet 1: A    B    C    D    E         Sheet 2:  A    B    C    D    E
         k    9    b    3                        k    d    3    d    6
         j    2    d    4                        m    h    4    g    3
         s    3    u    9                        j    e    8    a    9
         i    4    s    6                        s    i    9    t    7  
         o    7    n    8                        l    b    10   s    9
                                                 i    c    4    p    8
                                                 o    l    0    n    9

会变成

Sheet 1: A    B    C    D    E
         k    9    b    3    6
         j    2    d    4    9
         s    3    u    9    7
         i    4    s    6    8
         o    7    n    8    9

我目前正在使用的代码是: 子合并类别值() 将行变暗

With ActiveSheet 

lngRow = .Cells(65536, 1).End(xlUp).Row

  .Cells(1).CurrentRegion.Sort key1:=.Cells(1), Header:=xlYes
Do

If .Cells(lngRow, 1) = Sheets("Sheet2").Cells(lngRow, 1) Then
    .Cells(lngRow, 5) = Sheets("Sheet2").Cells(lngRow, 5)
End If

lngRow = lngRow - 1

Loop Until lngRow < 2

End With

End Sub

无论大小写,我都需要提取副本。这可能吗?

感谢任何帮助。

提前谢谢你。

【问题讨论】:

VLOOKUP 运行良好。我试图找到一种方法来用 VBA 完成同样的事情,但我想这不值得。谢谢! 【参考方案1】:

我已经编写了一个 VBA 代码:

Sub sof20355637MergeCategoryValues()
  Dim i As Long, i2 As Long, lngRow As Long, lngRow2 As Long
  Dim strKey As String
  Dim wks1, wks2 As Worksheet
  Dim objRange2

  Set wks1 = Sheets("Sheet1")
  Set wks2 = Sheets("Sheet2")

  ' get mximum rows of each sheet:
  lngRow = wks1.Cells(wks1.Rows.Count, 1).End(xlUp).Row
  lngRow2 = wks2.Cells(wks1.Rows.Count, 1).End(xlUp).Row

  ' we loop on the first column of sheet1:
  For i = 1 To lngRow
    strKey = wks1.Range("A" & i)
    Set objRange2 = wks2.Range("A:A").Find(strKey, Range("A1"), SearchDirection:=xlPrevious)
    If (Not objRange2 Is Nothing) Then
      i2 = objRange2.Row
      wks1.Range("E" & i) = wks2.Range("E" & i2)
    End If
  Next

  Set objRange2 = Nothing
  Set wks1 = Nothing
  Set wks2 = Nothing

End Sub

一些图片:

表 1:表 2:

合并的 Sheet1:

【讨论】:

【参考方案2】:

假设工作表 1 上的 k 在 A1 中,然后在工作表 1 的 E1 中:

=VLOOKUP(A1,'Sheet 2'!A:E,5,0) 

并复制下来以适应可能会服务,但不是 VBA。

【讨论】:

以上是关于Excel VBA - 在工作表之间传输数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 将数据从主工作表传输到基于列的多个工作表

Excel VBA如何填充不同工作表中的值

如何正确地从 Excel 工作表的 VBA 连接到另一个 Excel 工作表?

vba excel怎么获取指定工作表的行数、列数

excel或者vba,怎样将工作簿内所有橙色单元格公式转换为数值?

在excel中突出显示工作表内和工作表之间的重复项