在Excel中执行循环和If语句

时间:2017-12-06 07:02:26

标签: excel vba excel-vba

在工作表中,我尝试在Excel宏中创建以下逻辑。

逻辑:

Dub Test()

Dim rws as integer
Dim counter as integer

rws = 6   
counter = 2

Do while rws <> 0
    IF 'Data Sheet with Space'!J`counter` = "Sample Data Row 1 Col 10" Then
        WorkSheet!A`counter` = 'Data Sheet with Space'!A`counter`
    end IF

    counter = counter + 1
    rws = rws - 1

Excel表格是:

Data Sheet with Space

---------------------------------------------
Header 1                 Header 2                 Header 3                 Header 4                 Header 5                 Header 6                 Header 7                 Header 8                 Header 9                 Header 10                
Sample Data Row 1 Col 1  Sample Data Row 1 Col 2  Sample Data Row 1 Col 3  Sample Data Row 1 Col 4  Sample Data Row 1 Col 5  Sample Data Row 1 Col 6  Sample Data Row 1 Col 7  Sample Data Row 1 Col 8  Sample Data Row 1 Col 9  Sample Data Row 1 Col 10 
Sample Data Row 2 Col 1  Sample Data Row 2 Col 2  Sample Data Row 2 Col 3  Sample Data Row 2 Col 4  Sample Data Row 2 Col 5  Sample Data Row 2 Col 6  Sample Data Row 2 Col 7  Sample Data Row 2 Col 8  Sample Data Row 2 Col 9  Sample Data Row 2 Col 10 
Sample Data Row 3 Col 1  Sample Data Row 3 Col 2  Sample Data Row 3 Col 3  Sample Data Row 3 Col 4  Sample Data Row 3 Col 5  Sample Data Row 3 Col 6  Sample Data Row 3 Col 7  Sample Data Row 3 Col 8  Sample Data Row 3 Col 9  Sample Data Row 3 Col 10 
Sample Data Row 4 Col 1  Sample Data Row 4 Col 2  Sample Data Row 4 Col 3  Sample Data Row 4 Col 4  Sample Data Row 4 Col 5  Sample Data Row 4 Col 6  Sample Data Row 4 Col 7  Sample Data Row 4 Col 8  Sample Data Row 4 Col 9  Sample Data Row 4 Col 10 
Sample Data Row 5 Col 1  Sample Data Row 5 Col 2  Sample Data Row 5 Col 3  Sample Data Row 5 Col 4  Sample Data Row 5 Col 5  Sample Data Row 5 Col 6  Sample Data Row 5 Col 7  Sample Data Row 5 Col 8  Sample Data Row 5 Col 9  Sample Data Row 5 Col 10 
---------------------------------------------

和另一个名为WorkSheet

的Excel工作表

尝试运行宏时出现错误,'名称中的Data Sheet with Space会导致错误。

其次,我在尝试使用counter变量动态更改输入和输出单元格数时出错。

任何帮助都是值得欣赏的。

2 个答案:

答案 0 :(得分:2)

问题在于你解决细胞的方式。

如果你想参考电池&#34; B6&#34;在第一张纸上,基本上有三种方式可以参考纸张:

  1. 按CodeName(如果您碰巧知道工作表的代号)

    Sheet1.[B6]
    
  2. 按名称(这是您在工作表标签上看到的名称)

    Sheets("Data Sheet with Space").[B6]
    
  3. 按编号(如果您碰巧知道工作表的顺序)

    Sheets(1).[B6]
    
  4. 这是你的代码,你要维护它,所以使用最适合你的方式。 您可能更喜欢使用变量wsData = Sheets("Data Sheet with Space"),因此您只需编写wsOther.[A1]=wsData.[B6]

    还有几种方法可以参考纸张上的单元格。一些有用的:

    1. 直接使用地址:

      Sheets("Data Sheet with Space").[B6]
      
    2. 使用.Range(使用地址)

      Sheets("Data Sheet with Space").Range("B6")
      
    3. 使用.Cell(使用坐标)

      Sheets("Data Sheet with Space").Cells(6, 2)
      
    4. 使用.Cell的更可重复的方法(由YowE3K提供)

      Sheets("Data Sheet with Space").Cells(6, "B")
      
    5. 在您的代码中,您已经在使用坐标。所以您可能更喜欢使用.Cells(rws, counter)。但这取决于你。

答案 1 :(得分:0)

错误来自您的代码中的错误。 (这里已经很容易看到灰色)。如果我正确理解了您的代码,那么您应该通过输入实际工作表和范围来更正它(未经测试):

Sub Test2()

Dim rws As Integer
Dim counter As Integer

rws = 6
counter = 2

Do While rws <> 0

If Sheets("Data Sheet with Space").Range("J" & counter).Value = Cells(1, 10).Value Then


Sheets("WorkSheet").Range("A" & counter).Value = Sheets("Data Sheet with Space").Range("A" & counter).Value

End If

counter = counter + 1
rws = rws - 1
Loop 

End Sub