Excel嵌套if语句 - 需要帮助排除故障

时间:2018-02-28 17:29:36

标签: excel if-statement

我需要一些新鲜的眼睛。我一直在逐步进行这项工作,并从让它工作到破碎。此时我的眼睛正在穿越,我可以使用一些帮助。此电子表格中的列H包含计算机ID,列I是日期。如果H和I都是空白的话我希望它什么都不显示(这是我最近破坏它的点,并决定寻求帮助。这个逻辑不包括在内。)如果H或I都有,但两者都没有值,它会显示“NO”。如果H和I都有值,它将调用一个自定义函数,如果该目录尚不存在,将创建该目录。此外,如果目录已创建或存在,我想显示“是”。如果H和I都是空的,我尝试不显示任何内容之前所有功能都正常工作。

这是我正在使用的公式:

=IF(COUNTA(H21:I21)<>COLUMNS(H21:I21), "NO",IF(CREATEDIR(CONCATENATE(TEXT(I21,"yyyy"),"\",TEXT(I21,"m-d-yy"),"\",H21))=0,"YES", "NO"))

这是我正在使用的VBA功能(路径详细信息省略)

Function CREATEDIR(dateId) If Len(Dir("Z:\pathname\" & dateId, vbDirectory)) = 0 Then MkDir "Z:\pathname\" & dateId End If End Function

1 个答案:

答案 0 :(得分:0)

将UDF更新为以下内容,以便它可以构建完整的文件夹路径,以防它不存在(这将处理网络文件夹路径,如\\server\folder\subfolders\以及本地或映射文件夹Z:\pathname\)之类的路径。您需要将sBeginPath设置为它应该实际存在的任何内容:

Function CREATEDIR(dateID) As String

    Dim sBeginPath As String
    Dim sBuildPath As String
    Dim vFolder As Variant
    Dim i As Long

    sBeginPath = "C:\Test\"
    If Right(sBeginPath, 1) <> "\" Then sBeginPath = sBeginPath & "\"

    For Each vFolder In Split(sBeginPath & dateID, "\")
        If Len(vFolder) > 0 Then
            If Len(sBuildPath) = 0 Then
                If i > 0 Then
                    sBuildPath = "\\" & vFolder & "\"
                Else
                    sBuildPath = vFolder
                End If
            Else
                If i > 0 Then
                    sBuildPath = sBuildPath & vFolder & "\"
                    i = i + 1
                Else
                    sBuildPath = sBuildPath & "\" & vFolder
                End If
            End If
            If (Len(sBuildPath) > 0) And (i = 0 Or i >= 3) Then
                If Len(Dir(sBuildPath, vbDirectory)) = 0 Then MkDir sBuildPath
            End If
        Else
            i = i + 1
        End If
    Next vFolder

    CREATEDIR = "YES"

End Function

然后将您的公式更新为以下内容(使用@pnuts建议的CHOOSE方法):

=CHOOSE(COUNTA(H21:I21)+1,"", "NO",CREATEDIR(CONCATENATE(TEXT(I21,"yyyy"),"\",TEXT(I21,"m-d-yy"),"\",H21)))