2013-04-26 30 views
0

在Excel文件中,我有两个选项卡:输入和输出。从动态长度的列复制粘贴数据

在选项卡输入中,我在列A中有一列代码,如:code001,并且它无限期地延续,因为我添加的内容越来越多。

在B列我有一个关键词列表,如:蓝色的衣服,红色的铅笔,白色的围巾......再次我没有关键词的数量,因为我增加了越来越多。

在列C和d,我有相同的结构,A和B (文件结构无法更改!)

我希望把标签输出,在列A,代码(列A和列C从输入标签)和列B,关键字(列B和列D从标签输入)。

我该如何检查所有的行和列,并使用while循环/函数?

+1

你可以做到这一点与工作表公式的肯定,而不是写VBA? – 2013-04-26 00:03:11

+1

在用户界面中识别VBA代码的一种简单方法是记录执行该功能的宏,然后检查所创建的宏。这是探索VBA以及从Excel对象模型中学习新的VBA功能的非常有用的方法。 – 2013-04-26 00:12:12

回答

3

我认为你应该使用工作表公式来做到这一点。 在列A上表输出把这个公式:

=Input!A:A&Input!C:C

在B列上片输出把这个公式:

=Input!B:B&Input!D:D

如果问题是,你不对Excel VBA一无所知,那么下面的网站应该可以帮到你:

这里是你的阅读其他几个网站:

祝您好运

菲利普

+0

再次感谢你!它不能用Excel公式完成,它必须是一个宏。 – user2321894 2013-04-26 07:01:24

1

的我知道这是一个迟到的答案,但尝试了这一点。这可能比需要更复杂,但有很多方法可以做到这一点。

Public Sub stuff2() 
    Dim rangeA, rangeB, ranceC, rangeD As Range 
    Dim numA, numB, numC, numD As Integer 

    With Sheets("Input") 
     numA = Worksheetfunction.CountA(.Range("A:A")) 
     numB = Worksheetfunction.CountA(.Range("B:B")) 
     numC = Worksheetfunction.CountA(.Range("C:C")) 
     numD = Worksheetfunction.CountA(.Range("D:D")) 
     Set rangeA = .Range("A1:A" & numA) 
     Set rangeB = .Range("B1:B" & numB) 
     Set rangeC = .Range("C1:C" & numC) 
     Set rangeD = .Range("D1:D" & numD) 
    End With 

    With Sheets("Output") 
     rangeA.Copy .Range("A1") 
     rangeB.Copy .Range("B1") 
     rangeC.Copy .Range("A" & numA + 1) 
     rangeD.Copy .Range("AB" & numB + 1) 
    End With 
End Sub 
0

诚然我5年下旬提供解决方案....这是我的方法来解决它

Sub consol 
Dim maxi as long, restrtrow as long, i as long 
For i = 1 to 4 
    If i = 1 or i = 3 then 
     Maxi= sheets ("input").cells (1000000,i).end (xlup).row 
     Restrtrow = sheets ("output").cells (1000000,1).end (xlup).row+1 
     Sheets ("input").select 
     Range (Cells (2 ,i),cells (maxi,i)).copy 
     Sheets ("output").select 
     Cells(Restrtrow,1).SELECT 
     Selection.pastespecial paste:= xlpastevalues 
    Elseif i =2 or i=4 then 
     Sheets ("input").select 
     Range (cells (2,i),cells (maxi,i)).select 
     Selection.copy 
     Sheets ("output").select 
     Cells (2,restrtrow).select 
     Selection.pastespecial paste:= xlpastevalues 
    End if 

    next 
end sub