如何使用VBA代码使excel工作表中的所有单元格位于一列中?

如何使用VBA代码使excel工作表中的所有单元格位于一列中?,excel,vba,Excel,Vba,如何使用VBA代码使excel工作表中的所有单元格位于一列中 任何简单的VBA想法都能奏效吗 我已经尝试过使用vba代码,但由于某些原因,该代码不起作用。注意带**的代码为故障区域。下面的代码有时有效,但并不总是有效。没有线索 Dim arr As Variant, lLoop1 As Long, lLoop2 As Long Dim arr2 As Variant, lIndex As Long 'turn off updates to speed up code execution Wit

如何使用VBA代码使excel工作表中的所有单元格位于一列中

任何简单的VBA想法都能奏效吗

我已经尝试过使用vba代码,但由于某些原因,该代码不起作用。注意带**的代码为故障区域。下面的代码有时有效,但并不总是有效。没有线索

Dim arr As Variant, lLoop1 As Long, lLoop2 As Long
Dim arr2 As Variant, lIndex As Long

'turn off updates to speed up code execution
With Application
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual
    .DisplayAlerts = False
End With


ReDim arr2(ActiveSheet.UsedRange.Cells.Count - ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks).Count)

arr = ActiveSheet.UsedRange.Value


For lLoop1 = LBound(arr, 1) To UBound(arr, 1)
    For lLoop2 = LBound(arr, 2) To UBound(arr, 2)
        ***If Len(Trim(arr(lLoop1, lLoop2))) > 0 Then***
            arr2(lIndex) = arr(lLoop1, lLoop2)
            lIndex = lIndex + 1
        End If
    Next
Next

Sheets.Add
Range("A1").Resize(, lIndex + 1).Value = arr2

Range("A1").Resize(, lIndex + 1).Copy
Range("A2").Resize(lIndex + 1).PasteSpecial Transpose:=True
Rows(1).Delete

With Application
    .ScreenUpdating = True
    .EnableEvents = True
    .Calculation = xlCalculationAutomatic
    .DisplayAlerts = True

    Rows("1:1").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Qualitative Variable"
End With

此短宏将从Sheet1中获取所有非空白单元格,并将它们放在Sheet2的一列中:


调整您的工作表名称和目的地地址的代码。

VBA几乎可以做任何事情,但您能澄清一下您的意思吗?让excel工作表中的所有单元格都在一列中是非常广泛和不清楚的。。。您可以提供的任何示例数据也会很有帮助!此代码适用于某些情况。但有时我会得到一个运行时错误13和类型不匹配错误。它希望我在达到If r.Value时进行调试,然后。。。。。谢谢你调查这件事!如果您试图拾取包含错误值的单元格,则可能会发生这种情况…………当我将.Value替换为.Text时,请尝试将.Value替换为.TextPerfect。对于较大的文件需要一些时间,但它可以完全按照需要完成工作。非常感谢!谢谢你的反馈!
Sub Columnize()
    Dim s1 As Worksheet, s2 As Worksheet
    Set s1 = Sheets("Sheet1")
    Set s2 = Sheets("Sheet2")
    Dim K As Long
    K = 1
    For Each r In s1.UsedRange
        If r.Value <> "" Then
        r.Copy s2.Cells(K, 1)
        K = K + 1
        End If
    Next r
End Sub