如何将Excel列转换为忽略空白单元格的新范围

时间:2017-06-06 15:10:02

标签: excel vba excel-vba

我是VBA的新手并尝试找到现有的解决方案,但没有人完全满足我的要求:
我的初始列表有空洞(空白),我需要将结果列为转置而没有这些空白字段 enter image description here

列A包含文件#,然后是5列价格,但有些只有一个价格,其他2个其他3等但从不超过3个价格。这些数字从一个月到另一个月不等,有数百行。

我的第一次试验没有成功,因为我找不到预期的总数。 我的初始代码如下,但它没有捕获最后2列,因为中间有空白字段:

Dim LR As Long, Rw As Long, Col As Long, LastCol As Long, CurRw As Long
Application.ScreenUpdating = False

LR = Range("A" & Rows.Count).End(xlUp).Row
Range("B:B").Insert xlShiftToRight

For Rw = LR To 2 Step -1
    If Range("D" & Rw) <> "" Then
        LastCol = Cells(Rw, Columns.Count).End(xlToLeft).Column
        Rows(Rw + 1).Resize(LastCol - 3).Insert xlShiftDown
        Range("A" & Rw).Resize(LastCol - 2) = Range("A" & Rw)
        Range("B" & Rw).Resize(LastCol - 2).Value = Range("C" & Rw).Resize(LastCol + 5).Value
        Range("C" & Rw).Resize(1, LastCol - 2).Copy
        Range("B" & Rw).Resize(LastCol - 2).PasteSpecial xlPasteAll, Transpose:=True
        Range("C1").Resize(1, LastCol - 2).Copy
        Range("C" & Rw).PasteSpecial xlPasteAll, Transpose:=True
    Else
        Range("C" & Rw).Copy Range("B" & Rw)
        Range("C1").Copy Range("C" & Rw)
    End If
Next Rw"

感谢您的帮助。希望现在更容易理解和帮助; - )

达到的结果:
RESULT TO REACH

2 个答案:

答案 0 :(得分:0)

将您的图像与A1中的文件一起使用,将沿着这些行

Sub Example()

    Range("b2").Resize(1, 10).SpecialCells(xlCellTypeConstants, xlNumbers).Copy
    Range("m2").Value = Range("b2").Resize(1, 10).SpecialCells(xlCellTypeConstants, xlNumbers).Count
    Range("n2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=True, Transpose:=True

End Sub

计数将在M中并且在N中转置

enter image description here

答案 1 :(得分:0)

您可以使用公式,例如=IFERROR(INDEX($B$2:$J$2,1,SMALL(IF($B$2:$J$2<>"",COLUMN($B$2:$J$2)-1),ROWS($L$1:L1))),"---")填充

enter image description here