繁体   English   中英

如果然后否则或如果然后否则if vba?

[英]If then else or if then elseif vba?

我正在尝试将以下逻辑从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

我想要的显示是这样的:

  • 如果表1 [DEPT1]中的部门编号在0到599之间,则添加前导零,也就是001变成0001。
  • 如果表1 [DEPT1]中的部门编号介于650和899之间,则添加一个下一个零,即650即为6500。
  • 如果表1 [DEPT1]中的部门编号为其他任何编号,请添加以下零,即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 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

请注意,我们需要更新'的位置。

    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)。

请记住,您的结果可能会有所不同,具体取决于您的工作簿/数据采用的格式。在这里,我的“表1”被假定为名为“数据”的工作表,您可以根据需要替换它。 如果Table1是您的工作簿或文件名,则根本不需要包含它,除非您还与同一功能/模块中的另一个文件/工作簿进行交互。

看起来您只是缺少一些关键字。 同样,以下面的方式格式化它会使其更加明显:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM