如果那么其他或如果那么,如果vba?

时间:2015-03-02 17:01:18

标签: 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

我想要的显示是:

  • 如果Table1 [DEPT1]中的Dept编号介于0和599之间,则添加a 前导零,又名001变为0001。
  • 如果表1 [DEPT1]中的部门编号介于650和899之间,则添加 跟随零,又名650变为6500。
  • 如果表1 [DEPT1]中的部门编号是任何其他编号,请添加a 跟随零,又名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)
    

正如你所看到的,我正在努力应对多种条件的概念,这是我第一次写这样的声明......感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

Dim varcell as Variant

For Each varcell in ThisWorkbook.Sheets("DeptData").ListObjects(1).ListColumns(8).DataBodyRange
   If varcell.value < 600 Then
      varcell.value = "0" & cstr(varcell.value)
   Else
      varcell.value = cstr(varcell.value) & "0"
   End If
Next

请注意,我们需要更新'是的点。

答案 1 :(得分:0)

    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

我不完全确定您的Table1数据的格式是什么,因此我无法确定它需要定位的格式等等。

它的要点是:你需要遍历细胞,而不是范围。 range.value不能为每个单元格返回值,它将返回单个值。为了评估范围内每个单元格的单个值,您必须在循环中逐步调整范围(我使用For Each)。

请注意,您的结果可能会因您的工作簿/数据的格式而有所不同。此处我的“Table1”假定为名为“Data”的工作表,您可以根据需要进行替换。如果Table1是您的工作簿或文件名,则除非您还与同一功能/模块中的其他文件/工作簿进行交互,否则根本不需要包含它。

答案 2 :(得分:-1)

您似乎只缺少一些关键字。此外,以下面的方式格式化这将使这更明显:

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