Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.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
Vba 将多列中的数据合并到一列中_Vba_Excel - Fatal编程技术网

Vba 将多列中的数据合并到一列中

Vba 将多列中的数据合并到一列中,vba,excel,Vba,Excel,我有以下几点: 我正在使用来实现这一点: Sub MoveData() Range("H5:H99").ClearContents START_ROW = 5 START_COL = 1 STEP_COL = 2 OUTPUT_ROW = 5 OUTPUT_COL = 8 Limit_Col = 9 Row = START_ROW Col = START_COL Out_Row = OUTPUT_ROW While Col < Limit_Col While

我有以下几点:


我正在使用来实现这一点:

Sub MoveData()
Range("H5:H99").ClearContents
START_ROW = 5
START_COL = 1
STEP_COL = 2
OUTPUT_ROW = 5
OUTPUT_COL = 8
Limit_Col = 9

Row = START_ROW
Col = START_COL
Out_Row = OUTPUT_ROW
While Col < Limit_Col
    While Cells(Row, Col).Value <> ""
        Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
        Out_Row = Out_Row + 1
        Row = Row + 1
    Wend
    Row = START_ROW
    Col = Col + STEP_COL
Wend
End Sub
Sub-MoveData()
范围(“H5:H99”)。净含量
起始行=5
START_COL=1
步骤2
输出_行=5
输出_COL=8
极限值=9
行=开始行
Col=开始
输出行=输出行
而Col

但正如您所看到的,我希望得到列中空白单元格后显示的值。但该代码无法提取以黄色突出显示的单元格。
如何修改此代码以提取一个或多个空白单元格后可能出现的所有数据?

调整此代码:

While Cells(Row, Col).Value <> ""
    Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
    Out_Row = Out_Row + 1
    Row = Row + 1
Wend
这实际上是检查行是否传递了最后一行数据,如果传递了,则移动到下一列

编辑

不复制空白单元格使用此:

    Do until row > Cells(65536, Col).End(xlUp).Row
        If Cells(Row, Col).Value <> "" then
            Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
            Out_Row = Out_Row + 1
        End If
        Row = Row + 1
    Loop
Do-till-row>单元格(65536,Col).End(xlUp).row
如果单元格(行、列).Value为“”,则
单元格(输出行,输出列)。值=单元格(行,列)。值
Out_行=Out_行+1
如果结束
行=行+1
环
调整此代码:

While Cells(Row, Col).Value <> ""
    Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
    Out_Row = Out_Row + 1
    Row = Row + 1
Wend
这实际上是检查行是否传递了最后一行数据,如果传递了,则移动到下一列

编辑

不复制空白单元格使用此:

    Do until row > Cells(65536, Col).End(xlUp).Row
        If Cells(Row, Col).Value <> "" then
            Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
            Out_Row = Out_Row + 1
        End If
        Row = Row + 1
    Loop
Do-till-row>单元格(65536,Col).End(xlUp).row
如果单元格(行、列).Value为“”,则
单元格(输出行,输出列)。值=单元格(行,列)。值
Out_行=Out_行+1
如果结束
行=行+1
环
调整此代码:

While Cells(Row, Col).Value <> ""
    Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
    Out_Row = Out_Row + 1
    Row = Row + 1
Wend
这实际上是检查行是否传递了最后一行数据,如果传递了,则移动到下一列

编辑

不复制空白单元格使用此:

    Do until row > Cells(65536, Col).End(xlUp).Row
        If Cells(Row, Col).Value <> "" then
            Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
            Out_Row = Out_Row + 1
        End If
        Row = Row + 1
    Loop
Do-till-row>单元格(65536,Col).End(xlUp).row
如果单元格(行、列).Value为“”,则
单元格(输出行,输出列)。值=单元格(行,列)。值
Out_行=Out_行+1
如果结束
行=行+1
环
调整此代码:

While Cells(Row, Col).Value <> ""
    Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
    Out_Row = Out_Row + 1
    Row = Row + 1
Wend
这实际上是检查行是否传递了最后一行数据,如果传递了,则移动到下一列

编辑

不复制空白单元格使用此:

    Do until row > Cells(65536, Col).End(xlUp).Row
        If Cells(Row, Col).Value <> "" then
            Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
            Out_Row = Out_Row + 1
        End If
        Row = Row + 1
    Loop
Do-till-row>单元格(65536,Col).End(xlUp).row
如果单元格(行、列).Value为“”,则
单元格(输出行,输出列)。值=单元格(行,列)。值
Out_行=Out_行+1
如果结束
行=行+1
环

<>代码> 上一个答案是关闭的,但它也将复制所有空白区。此代码应满足您的需要:

Sub MoveData()

START_ROW = 5
START_COL = 1
STEP_COL = 2
OUTPUT_ROW = 5
OUTPUT_COL = 10

Row = START_ROW
Col = START_COL
Out_Row = OUTPUT_ROW
While Col < OUTPUT_COL
    While Row < ActiveSheet.UsedRange.Rows.Count
        If Cells(Row, Col).Value <> "" Then
            Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
            Out_Row = Out_Row + 1
        End If
        Row = Row + 1
    Wend
    Row = START_ROW
    Col = Col + STEP_COL
Wend
End Sub
Sub-MoveData()
起始行=5
START_COL=1
步骤2
输出_行=5
输出值=10
行=开始行
Col=开始
输出行=输出行
而Col<>代码> 上一个答案是关闭的,但它也将复制所有空白区。此代码应满足您的需要:

Sub MoveData()

START_ROW = 5
START_COL = 1
STEP_COL = 2
OUTPUT_ROW = 5
OUTPUT_COL = 10

Row = START_ROW
Col = START_COL
Out_Row = OUTPUT_ROW
While Col < OUTPUT_COL
    While Row < ActiveSheet.UsedRange.Rows.Count
        If Cells(Row, Col).Value <> "" Then
            Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
            Out_Row = Out_Row + 1
        End If
        Row = Row + 1
    Wend
    Row = START_ROW
    Col = Col + STEP_COL
Wend
End Sub
Sub-MoveData()
起始行=5
START_COL=1
步骤2
输出_行=5
输出值=10
行=开始行
Col=开始
输出行=输出行
而Col<>代码> 上一个答案是关闭的,但它也将复制所有空白区。此代码应满足您的需要:

Sub MoveData()

START_ROW = 5
START_COL = 1
STEP_COL = 2
OUTPUT_ROW = 5
OUTPUT_COL = 10

Row = START_ROW
Col = START_COL
Out_Row = OUTPUT_ROW
While Col < OUTPUT_COL
    While Row < ActiveSheet.UsedRange.Rows.Count
        If Cells(Row, Col).Value <> "" Then
            Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
            Out_Row = Out_Row + 1
        End If
        Row = Row + 1
    Wend
    Row = START_ROW
    Col = Col + STEP_COL
Wend
End Sub
Sub-MoveData()
起始行=5
START_COL=1
步骤2
输出_行=5
输出值=10
行=开始行
Col=开始
输出行=输出行
而Col<>代码> 上一个答案是关闭的,但它也将复制所有空白区。此代码应满足您的需要:

Sub MoveData()

START_ROW = 5
START_COL = 1
STEP_COL = 2
OUTPUT_ROW = 5
OUTPUT_COL = 10

Row = START_ROW
Col = START_COL
Out_Row = OUTPUT_ROW
While Col < OUTPUT_COL
    While Row < ActiveSheet.UsedRange.Rows.Count
        If Cells(Row, Col).Value <> "" Then
            Cells(Out_Row, OUTPUT_COL).Value = Cells(Row, Col).Value
            Out_Row = Out_Row + 1
        End If
        Row = Row + 1
    Wend
    Row = START_ROW
    Col = Col + STEP_COL
Wend
End Sub
Sub-MoveData()
起始行=5
START_COL=1
步骤2
输出_行=5
输出值=10
行=开始行
Col=开始
输出行=输出行
而Col
之所以出现错误,是因为第二个While循环沿列向下移动,直到找到一个空白,一旦找到一个,它将跨两列移动。我建议您只需要添加一行来标识列中包含数据的最后一行。之所以会出现错误,是因为您的第二个While循环沿列向下移动,直到找到一个空白,一旦找到一个,它将跨两列移动。我建议您只需要添加一行来标识列中包含数据的最后一行。之所以会出现错误,是因为您的第二个While循环沿列向下移动,直到找到一个空白,一旦找到一个,它将跨两列移动。我建议您只需要添加一行来标识列中包含数据的最后一行