Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.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_Excel Formula - Fatal编程技术网

Excel 如何将带有空格的两列数据堆叠到没有空格的一列中

Excel 如何将带有空格的两列数据堆叠到没有空格的一列中,excel,vba,excel-formula,Excel,Vba,Excel Formula,我有两列数据,每列40行(AD2:AE42)。根据用户输入,某些行将为空。如何将具有的2列堆叠到一列中,从AC2开始没有空格 每次选中或取消选中另一张图纸上的复选框时,都必须执行此操作。用户将永远不会看到此工作表 欢迎使用公式或VBA解决方案 Row AC AD AE <----Columns 1 FinalList List1 List2 <----Headers 2 Bob Bob S

我有两列数据,每列40行(AD2:AE42)。根据用户输入,某些行将为空。如何将具有的2列堆叠到一列中,从AC2开始没有空格

每次选中或取消选中另一张图纸上的复选框时,都必须执行此操作。用户将永远不会看到此工作表

欢迎使用公式或VBA解决方案

Row        AC       AD      AE    <----Columns
1      FinalList   List1   List2  <----Headers
2      Bob         Bob     Steve
3      Jim         Jim     Larry
4      Mary        Mary
5      Steve
6      Larry
8-40

行AC AD AE对于简单VBA,在单元格中循环,检查是否为空,然后移动值

For Each c In Range("AD2:AE42")
    If Not c.Value = "" Then Range("AC" & Cells(Rows.Count, 29).End(xlUp).Offset(1, 0).Row).Value = c.Value
Next c
这将从左向右移动

要循环遍历每列,可以执行以下操作:

For i = 30 To 31
    For Each c In Range(Cells(2, i), Cells(42, i))
        If Not c.Value = "" Then Range("AC" & Cells(Rows.Count, 29).End(xlUp).Offset(1, 0).Row).Value = c.Value
    Next c
Next i
编辑 用于其他工作表:

Dim ws As Worksheet, c As Range
Set ws = Worksheets("Data")
For Each c In ws.Range("AD2:AE42")
    If Not c.Value = "" Then ws.Range("AC" & ws.Cells(Rows.Count, 29).End(xlUp).Offset(1, 0).Row).Value = c.Value
Next c


下面是一个数组公式,它将二维范围中的值列在一列中,同时删除空白值。(Ctrl-Shift-Enter)并向下复制

公式使用命名范围“数据”以便于可读,这相当于
AD2:AE42


它只将列AD的最后一个条目添加到列AC。没有错误。为了清楚起见,我从另一个工作表调用这个宏,所以我添加了工作表(“数据”)。在您的区域前面。听起来像是
单元格(Rows.Count,29)。End(xlUp)
仍然在错误的工作表中。因此它不会更新最后使用的行。Henche它在同一个单元格中写入所有值。你可以录制一个宏来实现这一点。在进行复制/粘贴之前,可能需要使用
SpecialCells(xlCellTypeConstants,…)
属性(以消除空白)。
Dim ws As Worksheet, i As Long, c As Range
Set ws = Worksheets("Data")
For i = 30 To 31
    For Each c In Range(ws.Cells(2, i), ws.Cells(42, i))
        If Not c.Value = "" Then ws.Range("AC" & ws.Cells(Rows.Count, 29).End(xlUp).Offset(1, 0).Row).Value = c.Value
    Next c
Next i
=IFERROR(INDEX(Data, 1+MOD(SMALL(IF(Data="", "", (ROW(Data)-MIN(ROW(Data))+1)+ROWS(Data)*(COLUMN(Data)-MIN(COLUMN(Data))+1)), ROW(A1))-1,ROWS(Data)),INT((SMALL(IF(Data="", "", (ROW(Data)-MIN(ROW(Data))+1)+ROWS(Data)*(COLUMN(Data)-MIN(COLUMN(Data))+1)), ROW(A1))-1)/ROWS(Data))),"")