Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 修复块If无端If错误_Vba_Excel_If Statement - Fatal编程技术网

Vba 修复块If无端If错误

Vba 修复块If无端If错误,vba,excel,if-statement,Vba,Excel,If Statement,我刚刚开始使用宏和VB,但对Excel公式有一些经验。我的问题是我的excel公式变得非常长和复杂,我想VB可以帮助我 我有很多财务数据,我想在专栏中进行分类。我的第一步是将特定公司归类为私人公司或认股权证。我用下面的代码得到了一个“block if without end if”错误。我尝试过各种各样的事情,但没有运气 Range("F2:F400") = "Private Company" Else If Range("A2:A400") = "Company B" Then

我刚刚开始使用宏和VB,但对Excel公式有一些经验。我的问题是我的excel公式变得非常长和复杂,我想VB可以帮助我

我有很多财务数据,我想在专栏中进行分类。我的第一步是将特定公司归类为私人公司或认股权证。我用下面的代码得到了一个“block if without end if”错误。我尝试过各种各样的事情,但没有运气

    Range("F2:F400") = "Private Company"
Else If Range("A2:A400") = "Company B" Then
    Range("F2:F400") = "Private Company"
Else If Range("A2:A400") = "Company C" Then
    Range("F2:F400") = "Private Company"
Else If Range("A2:A400") = "Company D" Then
    Range("F2:F400") = "Warrant"
Else If Range("A2:A400") = "Company E" Then
    Range("F2:F400") = "Warrant"
Else If Range("A2:A400") = "Company F" Then
    Range("F2:F400") = "Warrant"
End If

End Sub

如果。。。在
Else
子句中结束If,或使用
ElseIf
版本(没有空格)。对于前者,您的代码需要是:

If Range("A2:A400") = "Company A" Then 
    Range("F2:F400") = "Private Company" 
Else 
    If Range("A2:A400") = "Company B" Then 
        Range("F2:F400") = "Private Company" 
    Else 
        If Range("A2:A400") = "Company C" Then 
            Range("F2:F400") = "Private Company" 
        Else 
            If Range("A2:A400") = "Company D" Then 
                Range("F2:F400") = "Warrant" 
            Else 
                If Range("A2:A400") = "Company E" Then 
                    Range("F2:F400") = "Warrant" 
                Else 
                    If Range("A2:A400") = "Company F" Then 
                        Range("F2:F400") = "Warrant" 
                    End If
                End If
            End If
        End If
    End If
End If
为便于阅读,增加了缩进

此外,还需要分别测试“A2:A400”范围内的每个电池。比如:

For Each cell In Range("A2:A400")
    If cell.Value = "" Then
    Else
        ...
    End If
Next cell

一种更简单的方法可能是创建一个公司名称查找表,然后在电子表格中创建一个VLOOKUP函数,无论是私有的还是担保的。

在VBA中,如果是嵌套条件,则是级联的:

试试这个:

If Range("A2:A400") = "Company A" Then
    Range("F2:F400") = "Private Company"
ElseIf Range("A2:A400") = "Company B" Then
    Range("F2:F400") = "Private Company"
ElseIf Range("A2:A400") = "Company C" Then
    Range("F2:F400") = "Private Company"
ElseIf Range("A2:A400") = "Company D" Then
    Range("F2:F400") = "Warrant"
ElseIf Range("A2:A400") = "Company E" Then
    Range("F2:F400") = "Warrant"
ElseIf Range("A2:A400") = "Company F" Then
    Range("F2:F400") = "Warrant"
End If

我还想补充一点,您可以使用(这只是Chipsleten扩展了一点,以便您可以看到它是如何工作的)


这里有一些问题。我认为您可以通过将
ElseIf
更改为
ElseIf
来清除块if而不终止if错误。我不知道这是否是你想要的逻辑。此外,您不能将多个单元格的范围(
range(“A2:A400”)
)与单个值进行比较。你将得到一个类型不匹配的错误。请不要给我任何评论。对堆栈溢出的评论有时被认为是一件好事
Sub ColumnLoop()

    Dim rng As Range
    Set rng = Range("A2:A400")
            For Each cell In rng
                Debug.Print cell.Address
                    If (cell.Value = "Company A" Or cell.Value = "Company B" Or cell.Value = "Company B") Then
                       cell.Offset(0, 5).Value = "Private"
                        Debug.Print cell.Address
                    Else
                        cell.Offset(0, 5).Value = "Warrant"
                         Debug.Print cell.Address
                    End If
                Next cell

End Sub