如何将csvstring转换为列,并通过Excel中的特定关键字过滤?

我正在尝试从csvstring中总结所有输出(OUT)时间,并将其显示在下一个单元格中,但正面临着挑战。 我无法处理/拆分csvstring。 需要帮助如何通过excel公式或vba脚本实现这一点。

csvstring:

10:06:在(IN),11:36:出(OUT),11:42:在(IN),13:57:出(OUT),14:05:在(IN),14:23:出(OUT),14:38:在(IN),16:39:出(OUT),16:49:在(IN),17:19:出(OUT),17:28:在(IN),17 :54:出(OUT),17:56:在(IN),18:08:在(IN),18:08:出(OUT),18:11:(IN),18:12:出( OUT),18:21:出(OUT),18:24:在(IN),18:37:在(IN),18:37:出(OUT),18:57:出(OUT),18: 58:在(IN),19:26:出(OUT),19:35:在(IN),20:18:出(OUT),

该string来自一个单元格。

考虑下面的UDF:

Public Function SumOutTimes(rin As Range) As Date Dim Kount As Long, OutTimes(), t As String t = rin.Text ary = Split(t, ",") Kount = 1 For Each a In ary If InStr(1, a, "out") > 0 Then ReDim Preserve OutTimes(1 To Kount) OutTimes(Kount) = Replace(a, ":out(OUT)", "") Kount = Kount + 1 End If Next a For Each a In OutTimes SumOutTimes = SumOutTimes + TimeValue(a) Next a End Function 

对于单元格A1中的数据

在这里输入图像描述

编辑#1:

用户定义的函数(UDF)非常易于安装和使用:

  1. ALT-F11调出VBE窗口
  2. ALT-I ALT-M打开一个新的模块
  3. 粘贴东西,closuresVBE窗口

如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx

要删除UDF:

  1. 如上所示调出VBE窗口
  2. 清除代码
  3. closuresVBE窗口

从Excel中使用UDF:

 =SumOutTimes(A1) 

要了解有关macros的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关UDF的具体信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

macros必须启用这个工作!

这可以帮助你:

 Sub test() Dim Tx As String, A() As String, R() Tx = Sheets("test").Cells(1, 1) ReDim R(0) A = Split(Tx, ",") For i = LBound(A) To UBound(A) If Left(Right(A(i), 4), 2) <> "OU" Then 'IN times Else 'OUT times R(UBound(R)) = Left(A(i), 5) ReDim Preserve R(UBound(R) + 1) End If Next i ReDim Preserve R(UBound(R) - 1) For i = LBound(R) To UBound(R) '--------------------------------------- '------You can sum your times here------ '--------------------------------------- Next i End Sub 

您必须阅读CSVstring并将其放入Txvariables,并select如何总结您的时间!