从动态长度的列复制粘贴数据

时间:2013-04-26 00:00:17

标签: excel vba excel-vba

在Excel文件中,我有两个标签:输入和输出。

在选项卡输入中,我在A列中有一个代码列表,如:code001,它会无限期地进行,因为我添加的内容越来越多。

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

在C列和D列上,我的结构与A和B相同。 (文件结构无法更改!)

我想在列A上输出选项,在列A上输入代码(从选项卡输入中的列A和列C),在列B上放置关键字(选项卡输入中的列B和列D)。

如何使用while循环/函数遍历所有列和行?

3 个答案:

答案 0 :(得分:3)

我认为你应该用工作表公式来做这件事。 在工作表输出的A列中,输入以下公式:

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

工作表输出的B栏中的

表示此公式:

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

如果问题是您对Excel VBA一无所知,那么以下网站应该可以帮助您:

以下是一些其他网站供您阅读:

祝你好运

菲利普

答案 1 :(得分: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

答案 2 :(得分: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