Excel 在所有图纸VBA中的相同位置获取某些列标题
我有一本工作簿,里面有很多包含不同列数的工作表。每张图纸中都有一列标题为“TOTAL.x”,其中x是图纸编号。我试图在每个工作表中找到总计列,并将其移动到相同的位置,这样当工作表合并到一个工作表中时,所有总计列都位于同一列中 下面是一个简单的表格示例,可以更好地解释我试图获得的内容: 表1: 第2张: 第3张: 在上面的示例中,目标是将所有图纸中的“总计”列移动到“G”列。这相当于在每张图纸的总列之前插入不同数量的空列,分别为1、4和0 它可以分为以下两个任务:Excel 在所有图纸VBA中的相同位置获取某些列标题,excel,vba,Excel,Vba,我有一本工作簿,里面有很多包含不同列数的工作表。每张图纸中都有一列标题为“TOTAL.x”,其中x是图纸编号。我试图在每个工作表中找到总计列,并将其移动到相同的位置,这样当工作表合并到一个工作表中时,所有总计列都位于同一列中 下面是一个简单的表格示例,可以更好地解释我试图获得的内容: 表1: 第2张: 第3张: 在上面的示例中,目标是将所有图纸中的“总计”列移动到“G”列。这相当于在每张图纸的总列之前插入不同数量的空列,分别为1、4和0 它可以分为以下两个任务: 查找每个工作表中的总列,并
Sub Task1()
Application.ScreenUpdating = False
Dim ws As Worksheet
Dim starting_ws As Worksheet
Set starting_ws = ActiveSheet
For Each ws In ThisWorkbook.Worksheets
ws.Activate
Dim search As Range
Set search = Rows("1:1").Find("TOTAL", LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If Not search Is Nothing Then
Application.CutCopyMode = False
search.EntireColumn.Cut
Columns("J").Select
Selection.Insert Shift:=xlToRight
Application.CutCopyMode = False
End If
Next
starting_ws.Activate
End Sub
问题1:(已解决)
只有当TOTAL列的标题是“TOTAL”时,我才能让它工作,而当TOTAL只是实际标题名“TOTAL.1”、“TOTAL.2”和“TOTAL.3”的前缀时,它就不能工作。解决方案可以是让它使用前缀TOTAL,或者将“TOTAL.x”替换为“TOTAL”
问题2:
我不知道如何检查某一列在所有工作表中是否为空,如果为真,则删除所有工作表中的该列
我已经尝试解决我的问题很长时间了,我期待着看到一些想法,并在任务中得到一些帮助。任何使代码更优雅或更快的想法都是受欢迎的
更新
任务1现在已解决。关于任务1,我必须做一些修复,使其在我自己的计算机上工作。在这里,它是完美的工作。我正在处理任务2,并将发布更新
Sub Task1()
Application.ScreenUpdating = False
Dim ws As Worksheet
Dim starting_ws As Worksheet
Set starting_ws = ActiveSheet
For Each ws In Worksheets
MsgBox "This is fun" & ws.Name
ws.Activate
Dim search As Range
Set search = ws.Rows("1:1").Find("TOTAL", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)
If Not search Is Nothing Then
Application.CutCopyMode = False
search.EntireColumn.Cut
ws.Columns("J").Select
Selection.Insert Shift:=xlToRight
Application.CutCopyMode = False
End If
MsgBox "END-This is fun" & ws.Name
Next
starting_ws.Activate
End Sub
更新
对于任务2,我使用CountA并进行概念验证。
在这里,它似乎在我的电脑上工作:
Sub Task2()
Dim ws As Worksheet
Dim starting_ws As Worksheet
Set starting_ws = ActiveSheet
Dim deleteColumn As Boolean
Dim totalColumnsToCheck
Dim currentIterations
totalColumnsToCheck = 20
currentIterations = 0
For c = 1 To totalColumnsToCheck
deleteColumn = True
For Each ws In Worksheets
ws.Activate
If WorksheetFunction.CountA(ws.Columns(c)) > 0 Then
deleteColumn = False
Else
End If
Next
If deleteColumn Then
For Each ws In Worksheets
ws.Activate
ws.Columns(c).EntireColumn.Delete
Next
totalColumnsToCheck = totalColumnsToCheck - 1
If c > 0 Then
c = c - 1
End If
End If
currentIterations = currentIterations + 1
If currentIterations > totalColumnsToCheck Then
Exit For
End If
Next c
starting_ws.Activate
End Sub
更改为
LookAt:=xlpart
@SJR非常感谢,解决了我第二季度的第一个任务可能使用COUNTA公式?@User123456789我认为任务1和任务2都可以:)