如何使用宏/ vba将值从一个工作表粘贴到另一个工作表?

时间:2014-04-21 12:40:29

标签: excel-vba vba excel

在表1中,我需要使用表2中的给定ID填充各种项目。示例如下:

第1页

Column1  Column2
----------------                   
shoe     no data   
bag      no data  
jacket   no data                    

第2页

Column1 
-------   
KL-123   
BC-223   
AK-477   
AB-987  

如果可能的话,我想寻求专家的建议,或者我是否可以获得一个宏来填充“sheet1 column2”和“sheet2 Colum1”中的值,如下所示。 Sheet1会根据“sheet2”中的项目数而相乘。

Sheet1

Column1    Column2
------------------
shoe       KL-123           
bag        KL-123            
jacket     KL-123            
shoe       BC-223           
bag        BC-223           
jacket     BC-223          
shoe       AK-477           
bag        AK-477          
jacket     AK-477            
shoe       AB-987          
bag        AB-987         
jacket     AB-987    

2 个答案:

答案 0 :(得分:0)

你的问题不是很清楚,但从我看到的情况看来 你只需要使用一个函数,这里不需要VBA(可能)。 =VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

您在问题中提供的工作表布局看起来很奇怪,可能会倒退,但是根据您的数据,这里是Vlookup的编写方式。

您的lookup_value将是:

Sheet 1:

Column1

shoe

bag

jacket 

您的表格数组将是第2页的第1列和第2列。如果表格范围中的第一列是第2页第1列,则列索引号将为2。

您需要将range_lookup值设置为FALSE,因为您没有寻找范围。

您可以将此Vlookup函数放在工作表1的第2列中,您所说的列是空白的。

您还可以获得有关Vlookup from the source.

的更多信息和一些很好的示例

答案 1 :(得分:0)

试试这个:

Option Explicit
'Option Base 1 not really needed, my assumptions are correct

Sub Test()

Dim sh1 As Worksheet, sh2 As Worksheet
Dim myIDs
Dim itmRng As Range
Dim i As Long

Set sh1 =Thisworkbook.Sheets("Sheet1")
Set sh2 = Thisworkbook.Sheets("Sheet2")

With sh2
    '~~> get your items
    '~~> basically, below passes range values to an array
    myIDs = Application.Transpose(.Range("A1", _
            .Range("A" & .Rows.Count).End(xlUp).Address))
End With

With sh1
    '~~> get your item range
    Set itmRng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp).Address)
    '~~> populate the columns
    For i = Lbound(myIDs) To Ubound(myIDs)
        '~~> iterating the array values also determines how many
        '~~> times you need to copy your item range
        itmRng.Copy itmRng.Offset((i-1)*itmRng.Rows.Count,0)
        itmRng.Offset((i-1)*itmRng.Rows.Count,1) = myIDs(i)
    Next
End With

End Sub

<强> EDIT1: 已经过测试。希望这对你有所帮助。