Excel If then else或If then elseif vba?

Excel If then else或If then elseif vba?,excel,vba,if-statement,Excel,Vba,If Statement,我试图从SQL proc向Excel中的宏添加以下逻辑,但在转换时遇到问题: CASE WHEN Dept < '600' THEN '0' + convert(varchar,RTRIM(Dept)) when Dept between '650' and '899' THEN convert(varchar,RTRIM(Dept)) + '0' ELSE convert(varchar,RTRIM(Dept)) + '0' END As Dept_Num 当部门

我试图从SQL proc向Excel中的宏添加以下逻辑,但在转换时遇到问题:

CASE WHEN Dept < '600' THEN '0' + convert(varchar,RTRIM(Dept)) 
when Dept between '650' and '899'  THEN convert(varchar,RTRIM(Dept)) + '0'
ELSE convert(varchar,RTRIM(Dept)) + '0' END As Dept_Num
当部门<'600'时,则为'0'+转换(varchar、RTRIM(部门))
当Dept介于“650”和“899”之间时,则转换(varchar、RTRIM(Dept))+“0”
ELSE转换(varchar,RTRIM(Dept))+“0”结束为Dept\u Num
我想要的展示是:

  • 如果表1[DEPT1]中的部门号介于0和599之间,则添加一个 前导零,aka 001变为0001
  • 如果表1[DEPT1]中的部门编号介于650和899之间,则添加 零后,aka 650变为6500
  • 如果表1[DEPT1]中的部门编号是任何其他编号,请添加一个 零后,aka 600变为6000

    Dim deptnum As Integer, result As String
    deptnum = Range("Table1[Dept1]").Value
    If deptnum < 600 Then deptnum = Left(Range("Table1[Dept1]") & "0000", 4)
    Ifelse deptnum = Right(Range("Table1[Dept1]") & "0000", 4)
    
    Dim deptnum为整数,结果为字符串
    deptnum=范围(“表1[Dept1]”)。值
    如果deptnum<600,则deptnum=Left(范围(“表1[Dept1]”)和“0000”,4)
    Ifelse deptnum=Right(范围(“表1[Dept1]”)和“0000”,4)
    

正如你所看到的,我正在与多重条件的概念作斗争,这是我第一次写这样的声明……感谢你的帮助

看起来您只是缺少了几个关键字。此外,以以下方式格式化将使这一点更加明显:

Dim deptnum As Integer, result As String
deptnum = Range("Table1[Dept1]").Value
If deptnum < 600 Then 
    deptnum = Left(Range("Table1[Dept1]") & "0000", 4)
Else 
    deptnum = Right(Range("Table1[Dept1]") & "0000", 4)
End If
Dim deptnum为整数,结果为字符串
deptnum=范围(“表1[Dept1]”)。值
如果深度<600,则
deptnum=Left(范围(“表1[Dept1]”)和“0000”,4)
其他的
deptnum=右(范围(“表1[Dept1]”和“0000”,4)
如果结束
变光电池作为变型
对于此工作簿中的每个varcell.Sheets(“DeptData”).ListObjects(1).ListColumns(8).DataBodyRange
如果varcell.value<600,则
varcell.value=“0”和cstr(varcell.value)
其他的
varcell.value=cstr(varcell.value)和“0”
如果结束
下一个
请注意,我们需要更新“点”所在的点

Sub Testdeptnum()
    Sub Testdeptnum()

Dim deptnum As Integer
Dim result As String
Dim deptrng As Range
Dim SourceSheet As Worksheet
Set SourceSheet = ThisWorkbook.Sheets("Data")
Set deptrng = SourceSheet.Range("DEPT1")
For Each c In deptrng.Cells
    If c.Value < 600 Then
        deptnum = c.Value
        result = "0" & deptnum
        SourceSheet.Cells(c.Row, 2).NumberFormat = "00##"
        SourceSheet.Cells(c.Row, 2).Value = result
    ElseIf c.Value > 650 And c.Value < 899 Then
        deptnum = c.Value
        result = deptnum & "0"
        SourceSheet.Cells(c.Row, 2).NumberFormat = "00##"
        SourceSheet.Cells(c.Row, 2).Value = result
    Else
        deptnum = c.Value
        result = deptnum & "0"
        SourceSheet.Cells(c.Row, 2).NumberFormat = "00##"
        SourceSheet.Cells(c.Row, 2).Value = result
    End If
Next c
End Sub
Dim deptnum作为整数 将结果变暗为字符串 变暗深度范围 将源表设置为工作表 Set SourceSheet=thiswoolk.Sheets(“数据”) Set deptrng=SourceSheet.Range(“DEPT1”) 对于分离单元中的每个c 如果c.值<600,则 deptnum=c.值 result=“0”和deptnum SourceSheet.Cells(c.Row,2).NumberFormat=“00” SourceSheet.Cells(c.Row,2).Value=result 如果c.值大于650且c.值小于899 deptnum=c.值 结果=deptnum和“0” SourceSheet.Cells(c.Row,2).NumberFormat=“00” SourceSheet.Cells(c.Row,2).Value=result 其他的 deptnum=c.值 结果=deptnum和“0” SourceSheet.Cells(c.Row,2).NumberFormat=“00” SourceSheet.Cells(c.Row,2).Value=result 如果结束 下一个c 端接头
我不能完全确定Table1数据的格式,因此我不能确定它需要针对什么格式,等等

其要点是:您需要遍历单元格,而不是范围。range.value不能为每个单元格返回值,它将返回单个值。为了计算一个范围内每个单元格的单个值,必须在循环中逐步遍历该范围(我为每个单元格使用了一个)


请记住,根据工作簿/数据的格式,结果可能会有所不同。这里,我的“Table1”被假定为一个名为“Data”的工作表,您可以根据需要替换它。如果表1是您的工作簿或文件名,则不需要包含它,除非您还与同一函数/模块中的其他文件/工作簿交互

这个VBA的作用是什么?它会遍历表中的每个值并将相应的值放在某个地方吗?结果是输出还是您需要它做些什么?是的,我希望它遍历列“Dept1”中的每个值,并添加前缀或后缀零。Dim varcell作为此工作簿中每个varcell的变量。\u表(部门数据)。\u列表对象(1)。\u我得到一个运行时错误“9”,下标超出范围错误。不知道我做错了什么?
    Sub Testdeptnum()

Dim deptnum As Integer
Dim result As String
Dim deptrng As Range
Dim SourceSheet As Worksheet
Set SourceSheet = ThisWorkbook.Sheets("Data")
Set deptrng = SourceSheet.Range("DEPT1")
For Each c In deptrng.Cells
    If c.Value < 600 Then
        deptnum = c.Value
        result = "0" & deptnum
        SourceSheet.Cells(c.Row, 2).NumberFormat = "00##"
        SourceSheet.Cells(c.Row, 2).Value = result
    ElseIf c.Value > 650 And c.Value < 899 Then
        deptnum = c.Value
        result = deptnum & "0"
        SourceSheet.Cells(c.Row, 2).NumberFormat = "00##"
        SourceSheet.Cells(c.Row, 2).Value = result
    Else
        deptnum = c.Value
        result = deptnum & "0"
        SourceSheet.Cells(c.Row, 2).NumberFormat = "00##"
        SourceSheet.Cells(c.Row, 2).Value = result
    End If
Next c
End Sub