Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将不同列中的值相互复制_Excel_Vba - Fatal编程技术网

Excel 将不同列中的值相互复制

Excel 将不同列中的值相互复制,excel,vba,Excel,Vba,嗨,我有一张如下所示的桌子: A B C D E F |7B | 3,27 | 72 | 4,55 | | | |7C | 0,46 | 73 | 0,53 | CF | 0,81 | |7D | 0,46 | 74 | 0,54 | CG | 0,79 | |7H | 0,47 | 76 | 0,54 | CJ | 0,77

嗨,我有一张如下所示的桌子:

  A    B      C      D            E          F
|7B | 3,27  | 72 |  4,55    |       |         |
|7C | 0,46  | 73 |  0,53    |   CF  |   0,81  |
|7D | 0,46  | 74 |  0,54    |   CG  |   0,79  |
|7H | 0,47  | 76 |  0,54    |   CJ  |   0,77  |
|   |       |    |          |   CL  |   0,61  |
|7K | 0,48  | 77 |  0,57    |   CM  |   0,49  |
|7L | 0,44  | 78 |  0,53    |   CN  |   0,43  |
|7N | 0,73  |    |          |       |         |     
|7P | 0,64  |    |          |       |         | 
|7O | 0,71  |    |          |       |         |  
|   |       | 75 |  0,85    |       |         | 
预期结果:

|7B| 3,27 |
|72| 4,55 |
|7C| 0,46 |
|73| 0,53 |
|CF| 0,81 |
...
|75| 0,85 |
我希望每个列的条目总是成对输入,一个接一个地输入2列(在另一个工作表中)。在每2个条目之后,应获取一个新行,直到选定区域通过。我已经试过了,但效果并不理想:他总是把所有的东西都写在同一列,而不是在两列的下面。 这是我到目前为止的代码…:

Sub ZusammenfassungKosten()

Dim ws1 As Worksheet, ws2 As Worksheet
Dim rg1 As Range, rg2 As Range, rg3 As Range
Dim v1, v2, n1, n2 As Long
Dim xAdr As String

n1 = -1

Set ws1 = Tabelle2
Set ws2 = Tabelle3
Set rg1 = ws1.Range("A3:F10000")
Set rg2 = ws2.Range("Q2")

rg2.Resize(30000, 2).ClearContents

Set rg3 = rg1.Find("*", ws1.Range("F10000"), xlValues, xlPart, xlByRows, xlNext)
If Not (rg3 Is Nothing) Then

xAdr = rg3.Address
Do
n1 = n1 + 1
rg2.Offset(n1, 0).Value = rg3.Value

Set rg3 = rg1.FindNext(rg3)
Loop While xAdr <> rg3.Address
End If


Set rg3 = Nothing
Set rg2 = Nothing
Set rg1 = Nothing
Set ws = Nothing



End Sub
Sub-ZusammenfassungKosten()
将ws1标注为工作表,将ws2标注为工作表
调暗rg1作为范围,rg2作为范围,rg3作为范围
尺寸v1、v2、n1、n2与长度相同
Dim xAdr作为字符串
n1=-1
设置ws1=Tabelle2
设置ws2=Tabelle3
设置rg1=ws1.范围(“A3:F10000”)
设置rg2=ws2.范围(“Q2”)
rg2.调整大小(30000,2).ClearContents
设置rg3=rg1.Find(“*”,ws1.Range(“F10000”),xlValues,xlPart,xlByRows,xlNext)
如果不是(rg3什么都不是),那么
xAdr=rg3.地址
做
n1=n1+1
rg2.偏移量(n1,0).值=rg3.值
设置rg3=rg1.FindNext(rg3)
在xAdr rg3.Address时循环
如果结束
设置rg3=无
设置rg2=无
设置rg1=无
设置ws=Nothing
端接头

非常感谢您的支持

在我看来,每个循环需要两次找到下一个rg3值,并将结果写入两列。希望这就是你想要的:

Sub ZusammenfassungKosten()

    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim rg1 As Range, rg2 As Range, rg3 As Range
    Dim v1, v2, n1, n2 As Long
    Dim xAdr As String

    n1 = -1

    Set ws1 = Tabelle2
    Set ws2 = Tabelle3
    Set rg1 = ws1.Range("A3:F10000")
    Set rg2 = ws2.Range("Q2")

    rg2.Resize(30000, 2).ClearContents

    Set rg3 = rg1.Find("*", ws1.Range("F10000"), xlValues, xlPart, xlByRows, xlNext)
    If Not (rg3 Is Nothing) Then

        xAdr = rg3.Address
        Do
            n1 = n1 + 1
            rg2.Offset(n1, 0).value = rg3.value

            Set rg3 = rg1.FindNext(rg3)
            rg2.Offset(n1, 1).value = rg3.value

            Set rg3 = rg1.FindNext(rg3)

        Loop While xAdr <> rg3.Address
    End If


    Set rg3 = Nothing
    Set rg2 = Nothing
    Set rg1 = Nothing
    Set ws = Nothing



End Sub
Sub-ZusammenfassungKosten()
将ws1标注为工作表,将ws2标注为工作表
调暗rg1作为范围,rg2作为范围,rg3作为范围
尺寸v1、v2、n1、n2与长度相同
Dim xAdr作为字符串
n1=-1
设置ws1=Tabelle2
设置ws2=Tabelle3
设置rg1=ws1.范围(“A3:F10000”)
设置rg2=ws2.范围(“Q2”)
rg2.调整大小(30000,2).ClearContents
设置rg3=rg1.Find(“*”,ws1.Range(“F10000”),xlValues,xlPart,xlByRows,xlNext)
如果不是(rg3什么都不是),那么
xAdr=rg3.地址
做
n1=n1+1
rg2.偏移量(n1,0).值=rg3.0
设置rg3=rg1.FindNext(rg3)
rg2.偏移量(n1,1).值=rg3.value
设置rg3=rg1.FindNext(rg3)
在xAdr rg3.Address时循环
如果结束
设置rg3=无
设置rg2=无
设置rg1=无
设置ws=Nothing
端接头