Excel查询 – 删除列值

在我们的球队名单上,我们正试图消除在特定的一天离开的人的转变。 例如,在截至2017年5月25日的截图中,狮子座已经离开了。 我可以在上面的行中使用什么公式/选项/代码,以便所有狮子座的class次都被自动删除 – 基于这个“离开”列中的手动input。

这是花名册屏幕截图的链接

这是一个使用Excel VBA的可能解决scheme。

首先,原始名册(名为“主”)的内容被复制到新的工作表“更新名册”。 这样,您可以保留原始名单的不变副本,以防您以后从“离开”行中删除名称,并需要重新应用更新。

接下来,扫描第一列以find“Away:”行。

最后,对于每个剩余的列,“离开”名称列表被加载到一个数组中。

然后,每个“离开”名称被一次处理一个。 通过匹配正则expression式,从名册的每一行中删除每个名称的名称,然后酌情用逗号或空格replace。

 Option Explicit Dim AwayRowNbr As Long Sub UpdateRoster() Dim UpdatedRoster As Worksheet Dim RowNbr As Long Dim ColNbr As Long Dim MaxColNbr As Long Dim MaxRowNbr As Long ' Insert new "Updated Roster" worksheet Set UpdatedRoster = Sheets.Add(After:=Sheets(Sheets.Count)) UpdatedRoster.Name = "Updated Roster" With ThisWorkbook.Worksheets("Updated Roster") ' Copy contents of "Master" worksheet to "Updated Roster" ThisWorkbook.Worksheets("Master").Cells.Copy Destination:=.Cells ' Locate "Away" row, and determine last column with data AwayRowNbr = .Range("A:A").Find(What:="Away:", LookIn:=xlValues).Row MaxColNbr = .Cells(AwayRowNbr, Columns.Count).End(xlToLeft).Column For ColNbr = 2 To MaxColNbr Call RemoveNames(.Cells(AwayRowNbr, ColNbr).Value, ColNbr) Next ColNbr End With End Sub Sub RemoveNames(AwayNames As String, ColNbr As Long) Dim AwayName() As String Dim Name As String Dim NameIdx As Integer Dim RegEx As Object Dim RowNbr As Long Dim MaxRowNbr As Long Dim BeforeReplace As String Dim AfterReplace As String With ThisWorkbook.Worksheets("Updated Roster") ' Create regular expression object Set RegEx = CreateObject("vbscript.regexp") RegEx.Global = False ' Load "away" names into a String array AwayName() = Split(AwayNames, ",") ' Determine last row with data MaxRowNbr = .Cells(Rows.Count, ColNbr).End(xlUp).Row ' Process each "away" name For NameIdx = LBound(AwayName) To UBound(AwayName) Name = Trim(AwayName(NameIdx)) For RowNbr = 2 To MaxRowNbr If RowNbr <> AwayRowNbr Then AfterReplace = .Cells(RowNbr, ColNbr).Value ' Remove name if delimited by commas RegEx.Pattern = ", *" & Name & " *," Do BeforeReplace = AfterReplace AfterReplace = RegEx.Replace(BeforeReplace, ",") Loop Until BeforeReplace = AfterReplace ' Remove name if at beginning or end of cell RegEx.Pattern = "(^ *" & Name & " *,)|(, *" & Name & " *$)|(^ *" & Name & " *$)" Do BeforeReplace = AfterReplace AfterReplace = RegEx.Replace(BeforeReplace, "") Loop Until BeforeReplace = AfterReplace .Cells(RowNbr, ColNbr).Value = AfterReplace End If Next RowNbr Next NameIdx End With End Sub