2013-02-06 22 views
0

我正在处理一个小脚本(如下)。该脚本遍历数据集上的行,并根据2个select case语句的某些偶然事件将1或0放置在单元格中。它的工作原理非常完美,但我想知道是否有将单元格范围分组在一起的方法,这些单元格放置在其中。VBA,语法,单元格的组范围一起用于公共变量

Sub compVal() 

Dim WB As Workbook 'an object of type workbook 
Dim WS1 As Worksheet ' objects of type worksheet 

Set WB = ActiveWorkbook ' reference WB to the current Workbook 
Set WS1 = Worksheets("Sheet1") 'Reference to Sheet 1 of the current workbook 

'loop through sheet1's rows 
Dim i As Integer 

For i = 2 To WS1.UsedRange.Rows.Count 

    Select Case WS1.Cells(i, 1).Value 'first cell from row i 

     Case "Target" 

     Select Case WS1.Cells(i, 2).Value 

      Case 1 

       WS1.Cells(i, 3).Value = 1 
       WS1.Cells(i, 4).Value = 0 
       WS1.Cells(i, 5).Value = 0 
       WS1.Cells(i, 6).Value = 0 

      Case 2 

       WS1.Cells(i, 3).Value = 0 
       WS1.Cells(i, 4).Value = 0 
       WS1.Cells(i, 5).Value = 1 
       WS1.Cells(i, 6).Value = 0 

     End Select 

     Case "NonTarget" 

     Select Case WS1.Cells(i, 2).Value 

      Case 1 

       WS1.Cells(i, 3).Value = 0 
       WS1.Cells(i, 4).Value = 1 
       WS1.Cells(i, 5).Value = 0 
       WS1.Cells(i, 6).Value = 0 

      Case 2 

       WS1.Cells(i, 3).Value = 0 
       WS1.Cells(i, 4).Value = 0 
       WS1.Cells(i, 5).Value = 0 
       WS1.Cells(i, 6).Value = 1 
     End Select 

     End Select 
Next i 

结束子

+0

你是什么意思将它们组合在一起? –

+0

通过使用(例如)WS1.Cells(i,3).Resize(1,4).Value = Array(1,0,0,0)'来分配您的单元格值,您可以合并很多代码。 –

回答

1

这是代码复用一个很好的例子:

Sub compVal() 

Dim WB As Workbook 'an object of type workbook 
Dim WS1 As Worksheet ' objects of type worksheet 

Set WB = ActiveWorkbook ' reference WB to the current Workbook 
Set WS1 = Worksheets("Sheet1") 'Reference to Sheet 1 of the current workbook 

'loop through sheet1's rows 
Dim i As Long ' USE LONG FOR CELL REFERENCES, THERE ARE A LOT OF ROWS POSSIBLE :) 

For i = 2 To WS1.UsedRange.Rows.Count 

    Select Case WS1.Cells(i, 1).Value 'first cell from row i 

     Case "Target" 

     Select Case WS1.Cells(i, 2).Value 

      Case 1 

       AddColumns WS1, i, 1, 0, 0, 0 

      Case 2 

       AddColumns WS1, i, 0, 0, 1, 0 

     End Select 

     Case "NonTarget" 

     Select Case WS1.Cells(i, 2).Value 

      Case 1 

       AddColumns WS1, i, 0, 1, 0, 0 

      Case 2 

       AddColumns WS1, i, 0, 0, 0, 1 

     End Select 

     End Select 
Next i 
End Sub 

Sub AddColumns(WS As Worksheet, i As Long, c As Variant, d As Variant, e As Variant, f As Variant) 
    WS.Cells(i, 3).Resize(1, 4).Value = Array(c, d, e, f) 

End Sub 

有可能会引入其它效率,例如替换四个参数C,d, e和f用一个整数

0 = 0,0,0,0 
1 = 1,0,0,0 
2 = 0,1,0,0 
... 
15 = 1,1,1,1 
+0

请注意,您应该使用'Dim i As Long',因为如果行数很多,则Int不够用 – JustinJDavies

+0

太好了,谢谢大家的支持。当谈到脚本时,我仍然非常绿色,所以任何花絮都会有所帮助。再次感谢你们 – matt