我正在Excel中创建航班时刻表。它需要看起来像这样:
不幸的是,这些非空白单元格中的文本不会与相邻单元格重叠,因为相邻的“空白”单元格中都包含公式(即使公式的值为“”)。请注意,每列代表一小时的时间。因此,我的电子表格看起来像这样:
我认为创建我想要的外观的唯一方法是编写一个宏。对于所示的八行中的每一行,该过程将循环遍历每列并识别非空白单元。然后对于所有这样的非空白单元格,如果单元格代表航班起飞(例如,从蓝色的WUH - 我可以为此创建一个测试,例如,如果它左边的单元格是空白的),我需要选择该单元格和右边的四个单元格,然后合并左对齐。如果单元格代表航班到达(例如WUH为红色或MCO),我需要选择单元格,将其内容的值仅复制到其左侧的单元格4,然后选择该单元格和右侧的四个单元格,然后合并和右对齐。
有人可以帮我解决这个问题,因为我是VBA的新手吗?我需要最多帮助的部分是在循环过程中选择与非空白单元相邻的一系列单元。注意我也是Stack Overflow的新手,所以如果我没有正确地提出问题,请告诉我。
答案 0 :(得分:0)
仅供参考,我使用以下宏解决了我的问题:
Sub FormatRotation()
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Dim c As Integer
Dim r As Integer
For c = 4 To 362
'Test if column contains an arrival
If Len(Cells(9, c).Text) > 2 And Cells(9, c + 1) = "" Then
For r = 9 To 16
Cells(r, c).Select
Selection.Copy
Cells(r, c - 4).Select
Selection.PasteSpecial Paste:=xlValues
Next r
For r = 9 To 16
Range(Cells(r, c - 4), Cells(r, c)).Select
With Selection
.MergeCells = True
.HorizontalAlignment = xlRight
End With
Next r
End If
'Test if column contains a departure
If Len(Cells(9, c).Text) > 2 And Cells(9, c + 1) <> "" Then
For r = 9 To 16
Range(Cells(r, c), Cells(r, c + 4)).Select
With Selection
.MergeCells = True
.HorizontalAlignment = xlLeft
End With
Next r
End If
Next c
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Calculate
End Sub