Excel 将函数转换为子进程--卡住
列“p”(“P6:P3000”)包含一个值,例如“员工\合同\状态\结束”。我正在尝试将单元格中的“Closed”(也可以是“Open”)部分拉到列“Q”中,或者只是用分隔符(“"”)后面的最后一个文本替换现有列“P”值。。。“员工\合同\状态\关闭”->“关闭”或“打开”。这将创建以下步骤:Excel 将函数转换为子进程--卡住,excel,vba,Excel,Vba,列“p”(“P6:P3000”)包含一个值,例如“员工\合同\状态\结束”。我正在尝试将单元格中的“Closed”(也可以是“Open”)部分拉到列“Q”中,或者只是用分隔符(“"”)后面的最后一个文本替换现有列“P”值。。。“员工\合同\状态\关闭”->“关闭”或“打开”。这将创建以下步骤: 创建新列Q 在列标题中插入新值 执行“P”中的函数以替换值或转储到“Q”列(“Q6:Q3000”) 下面是我到目前为止拥有的-->代码,用于创建列并调用函数代码以提取最后一个分隔符后的最后一个文本。。。这
Sub ContractStatus_Change()
Application.ScreenUpdating = False
Workbooks("DIV_EIB_Tool.xlsm").Worksheets("EIBMaintainEmployeeContractsW31").Range("Q5") _
.EntireColumn.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
Worksheets("EIBMaintainEmployeeContractsW31").Range("Q5").Value = "Contract Status"
Worksheets("EIBMaintainEmployeeContractsW31").Range("Q6:Q3000").NumberFormat = "General"
Application.ScreenUpdating = True
End Sub
Function RightWord(r As Range) As Variant
Dim s As String
s = Trim(r.Value)
RightWord = Mid(s, InStrRev(s, "_") + 1)
End Function
Sub Test()
Dim a, i&
With Worksheets("EIBMaintainEmployeeContractsW31")
.Columns("Q").Insert
a = .Range("P6:P" & .Cells(Rows.Count, "P").End(xlUp).Row).Resize(, 2).Value
For i = LBound(a) To UBound(a)
If InStr(a(i, 1), "_") Then
a(i, 2) = Split(a(i, 1), "_")(UBound(Split(a(i, 1), "_")))
End If
Next i
With .Range("Q5")
.Value = "Contract Status"
.Offset(1, -1).Resize(UBound(a, 1), UBound(a, 2)).Value = a
End With
End With
End Sub
我是通过处理工作表EIBMaintainEmployeeContractsW31
开始代码的,因此在with
和End with
之间,您会注意到一些行以点开头,表示此工作表。然后在列Q之前插入一列,并将所需范围(P6到P&最后一行)存储到数组中(数组速度更快)
然后循环数组,该数组包含两列(一列用于原始数据,另一列用于所需输出)。使用InSstr
函数确保下划线存在,如果存在,则根据下划线将分割输出的最后一部分存储到第二列中。
最后将数组填充到工作表中。
希望这个解释能对你有所帮助。你可能是摇滚明星,谢谢。你能顺便解释一下这个逻辑吗?@AntyA不客气。我在这篇文章中添加了一些解释。