2015-03-02 71 views
0

我想下面的逻辑添加到从SQL PROC在Excel宏和我有麻烦将其转换:如果其他人或如果然后elseif vba?

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之间,则将 添加到0之后,即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) 
    

正如你所看到的,我用的概念挣扎多个条件,这是我第一次写这样的声明...任何帮助表示赞赏!

+0

这个VBA意味着什么?它是否会经历一个表中的每个值并在某处放置相应的值?结果是输出还是你需要它的东西? – cronos2546 2015-03-02 17:05:45

+0

是的,我希望它通过“Dept1”列中的每个值并添加前缀或后缀零。 – CoffeeCoder 2015-03-02 17:07:30

回答

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 

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

+0

Dim varcell As Variant For This varbook In ThisWorkbook。表格(部门数据)_ 表格(DeptData)。 ListObjects(1)。 _ListColumns(8).DataBodyRange 我得到一个运行时错误'9',下标超出范围错误。不知道我在做什么错了? – CoffeeCoder 2015-03-02 17:38:59

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

我并不完全相信你的表1的数据格式是这样我真的不能肯定它需要针对什么样的格式等

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

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