如果那么 else 或者如果那么 elseif vba?
If then else or if then elseif vba?
我正在尝试从 SQL 过程将以下逻辑添加到 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]中的部门编号在0到599之间,则添加一个
前导零,也就是 001 变成 0001。
- 如果Table1[DEPT1]中的Dept编号在650到899之间,则添加
后面的零,又名 650 变成 6500。
如果表 1[DEPT1] 中的 Dept 编号为任何其他编号,则添加一个
在零之后,又名 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 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 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 不能 return 每个单元格的值,它将 return 一个值。为了评估一个范围内每个单元格的单独值,您必须在一个循环中遍历该范围(我使用了 For Each)。
请记住,您的结果可能会因 workbook/data 的格式而异。这里我的 "Table1" 被假定为名为 "Data" 的工作表,您可以将其替换为你需要。如果 Table1 是您的工作簿或文件名,则根本不需要包含它,除非您还在同一个 function/module 中与另一个 file/workbook 进行交互。
我正在尝试从 SQL 过程将以下逻辑添加到 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]中的部门编号在0到599之间,则添加一个 前导零,也就是 001 变成 0001。
- 如果Table1[DEPT1]中的Dept编号在650到899之间,则添加 后面的零,又名 650 变成 6500。
如果表 1[DEPT1] 中的 Dept 编号为任何其他编号,则添加一个 在零之后,又名 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 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 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 不能 return 每个单元格的值,它将 return 一个值。为了评估一个范围内每个单元格的单独值,您必须在一个循环中遍历该范围(我使用了 For Each)。
请记住,您的结果可能会因 workbook/data 的格式而异。这里我的 "Table1" 被假定为名为 "Data" 的工作表,您可以将其替换为你需要。如果 Table1 是您的工作簿或文件名,则根本不需要包含它,除非您还在同一个 function/module 中与另一个 file/workbook 进行交互。