Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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 Excel-查找某一列并将其移动到Excel中另一列之前的列_Excel_Vba - Fatal编程技术网

VBA Excel-查找某一列并将其移动到Excel中另一列之前的列

VBA Excel-查找某一列并将其移动到Excel中另一列之前的列,excel,vba,Excel,Vba,这是一个例子: 我想找到最后一列(左边的第一列,右边的列是空的——在本例中是F列)。然后我想将此列移到标题为“D/G/B.x”的列的左侧(在本例中为H列) 目前,我能够根据标题文本搜索一列并将其移动到另一列位置,这并不完全是我想要实现的,而是我试图实现的目标: 以下是我当前的VBA: Sub Test() Application.ScreenUpdating = False Dim ws As Worksheet Dim starting_ws As Worksheet Set startin

这是一个例子:

我想找到最后一列(左边的第一列,右边的列是空的——在本例中是F列)。然后我想将此列移到标题为“D/G/B.x”的列的左侧(在本例中为H列)

目前,我能够根据标题文本搜索一列并将其移动到另一列位置,这并不完全是我想要实现的,而是我试图实现的目标:

以下是我当前的VBA:

Sub Test()
Application.ScreenUpdating = False
Dim ws As Worksheet
Dim starting_ws As Worksheet
Set starting_ws = ActiveSheet
For Each ws In Worksheets
    ws.Activate
    Dim search As Range
    Set search = ws.Rows("1:1").Find("D/G/B", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not search Is Nothing Then
        Application.CutCopyMode = False
        search.EntireColumn.Cut
        ws.Columns("H").Select
        Selection.Insert Shift:=xlToRight
        Application.CutCopyMode = False
    End If
Next
Application.ScreenUpdating = True
End Sub

非常感谢您的帮助。

您认为这是您想要的

Sub Test()

Application.ScreenUpdating = False

Dim ws As Worksheet
Dim starting_ws As Worksheet
Dim c As Long
Set starting_ws = ActiveSheet

For Each ws In Worksheets
    Dim search As Range
    Set search = ws.Rows("1:1").Find("D/G/B", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
    If Not search Is Nothing Then
        c = ws.Cells(1, search.Column).End(xlToLeft).Column
        If c < search.Column - 1 Then 'only move if not adjancent
            ws.Columns(c).Cut search.Cells(1).Offset(, -1)
        End If
    End If
Next

Application.ScreenUpdating = True

End Sub
子测试()
Application.ScreenUpdating=False
将ws设置为工作表
将起始值作为工作表进行调整
尺寸c与长度相同
设置起始\u ws=ActiveSheet
对于工作表中的每个ws
模糊搜索范围
设置search=ws.Rows(“1:1”).Find(“D/G/B”,LookIn:=xlValues,LookAt:=xlPart,SearchOrder:=xlByColumns,SearchDirection:=xlNext,MatchCase:=False)
如果不是,那么搜索什么都不是
c=ws.Cells(1,search.Column).End(xlToLeft.Column)
如果c
很好,非常感谢。我认为“激活”在for循环中是必要的,那么我将删除这一行,很好,你指出了这一点。他们之间不一定有差距。然而,如果不是这样,它已经处于正确的位置。否则,我将只将“D/G/B.x”列向右移动一列。再次感谢你,很高兴它成功了。如果没有间隙,那么它将移动第一列,这样我可以添加一个If来避免这种情况。重新激活,一些阅读材料: