【问题标题】:Excel nested if statements - need help troubleshootingExcel 嵌套 if 语句 - 需要帮助进行故障排除
【发布时间】:2018-02-28 17:29:35
【问题描述】:

我需要一些新鲜的眼睛。我一直在逐步解决这个问题,从让它工作到崩溃。在这一点上,我的眼睛正在交叉,我可以使用一些帮助。此电子表格中的 H 列包含机器 ID,I 列是日期。如果 H 和 I 均为空白,我希望它不显示任何内容(这是我最近打破它并决定寻求帮助的地方。此逻辑不包括在内。)如果 H 或 I 但不是两者都有值,它将显示“否”。如果 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:

【问题讨论】:

  • 这有助于par。如果 H 和 I 为空,则单元格为空。但是 IF 语句仍然被破坏。这就是我来这里寻找新鲜事物的另一个原因,看看我错过了什么

标签: excel if-statement


【解决方案1】:

将您的 UDF 更新为以下内容,以便它可以构建提供的完整文件夹路径以防万一它不存在(这将处理网络文件夹路径,例如 \\server\folder\subfolders\ 以及本地或映射文件夹路径,例如 @ 987654322@)。您需要将 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)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2020-07-01
    • 2019-05-18
    相关资源
    最近更新 更多