Excel VBA向左移动数据(每行需要移动4列,需要保留的4列中可能有空格)

Excel VBA向左移动数据(每行需要移动4列,需要保留的4列中可能有空格),excel,vba,Excel,Vba,我有一个包含一系列问题的数据集。然而,受访者的部分数据被复制(4列)。这些需要根据标题(答案1、答案2、答案3、答案4)合并成4列 我试过这个: Sub MoveLeft() Dim r As Long, rws As Long Application.ScreenUpdating = False With ActiveSheet.UsedRange rws = .Rows.Count r = 1 On Error Resume Nex

我有一个包含一系列问题的数据集。然而,受访者的部分数据被复制(4列)。这些需要根据标题(答案1、答案2、答案3、答案4)合并成4列

我试过这个:

Sub MoveLeft()
Dim r As Long, rws As Long

Application.ScreenUpdating = False
    With ActiveSheet.UsedRange
        rws = .Rows.Count
        r = 1
        On Error Resume Next
        Do
            .Rows(r).Resize(8000).SpecialCells(xlBlanks).Delete Shift:=xlToLeft
            r = r + 8000
        Loop While r <= rws
        On Error GoTo 0
    End With
    Application.ScreenUpdating = True
End Sub
Sub-MoveLeft()
调暗r为长,rws为长
Application.ScreenUpdating=False
使用ActiveSheet.UsedRange
rws=.Rows.Count
r=1
出错时继续下一步
做
.行(r).调整大小(8000).特殊单元格(xlBlanks).删除移位:=xlToLeft
r=r+8000

循环,而r您将无法在8000行的组中执行此操作。每一行都需要单独完成

Sub qwerty()
    Dim r As Long, pos As Long
    With Worksheets("sheet2")
        With Intersect(.Range("F:AC"), .UsedRange.Cells)
            For r = 2 To .Rows.Count
                .Cells(r, 1).Resize(1, 4).ClearContents
                pos = .Cells(r, 1).End(xlToRight).Column - .Cells(r, 1).Column
                If pos <= .Columns.Count Then
                    pos = Application.Floor(pos, 4) + 1
                    .Cells(r, 1).Resize(1, 4) = .Cells(r, pos).Resize(1, 4).Value2
                End If
            Next r
        End With
    End With
End Sub
Sub-qwerty()
变暗r为长,位置为长
带工作表(“表2”)
带相交(.Range(“F:AC”),.UsedRange.Cells)
对于r=2到.Rows.Count
。单元格(r,1)。调整大小(1,4)。清除内容
位置=.单元格(r,1).结束(xlToRight).列-.单元格(r,1).列

如果我认为我没有正确地将其添加到代码中,因为它没有达到预期的效果。还有,当你说“放弃前5列,这不是我的问题。”。我应该在图表中添加前5列是完全正确的,并且每个单元格中都有值。我的问题是每行有4个答案需要左移。但有时也存在差距(如果受访者没有回答四个问题中的一个)。我需要保留这些空白,以便答案在图片的蓝色栏中处于正确的结构中。你不能在8000行的组中这样做。每行需要单独完成。啊,好的,谢谢!我是从谷歌那里得到这段代码的,很抱歉>。我已经删除了8000个部分的组(步骤8000),但是数据仍然会随着移动而改变。例如,如果有一组四个答案,例如[???]、[???]、[空白]、[空白]、[空白],[空白]现在等于[???]、[???]、[???]、[空白],[空白]好的,你是一个绝对的神!!这在很大程度上起了作用。我该如何扩展交叉点,直到行的最后一个结尾(因为有些值超出了AC列,将来它可能会在该方向进一步增长)。也许这会使过程更清晰1)查看从$F开始的每一行2)沿该行的第一个非空3)复制第一个非空,与右边的三个单元格一起4)将这四个单元格移动到该行的?F:?I 5)执行此操作后,从J开始删除额外的列