2016-03-07 102 views
2

中的“随机”内容填充单元格我将尝试解释我的问题。 我需要根据单元格(列)中的四个值中的一个填充值。 我有一个代码VBA:根据列

Sub testmacro() 


    If Sheets("List1").Range("A1") = "Keyword1" Then 
Sheets("List1").Range("b1") = "60" 
Sheets("List1").Range("c1") = "630" 
Sheets("List1").Range("d1") = "0.7" 
Sheets("List1").Range("e1") = "0.7" 
     ElseIf Sheets("List1").Range("A1") = "Keyword2" Then 
Sheets("List1").Range("b1") = "1500" 
Sheets("List1").Range("c1") = "15750" 
Sheets("List1").Range("d1") = "1.46" 
Sheets("List1").Range("e1") = "1" 
     ElseIf Sheets("List1").Range("A1") = "Keyword3" Then 
Sheets("List1").Range("b1") = "1500" 
Sheets("List1").Range("c1") = "15750" 
Sheets("List1").Range("d1") = "2.98" 
Sheets("List1").Range("e1") = "1" 
     ElseIf Sheets("List1").Range("A1") = "Keyword4" Then 
Sheets("List1").Range("b1") = "1500" 
Sheets("List1").Range("c1") = "15750" 
Sheets("List1").Range("d1") = "2.38" 
Sheets("List1").Range("e1") = "1"  
    End If 

    If Sheets("List1").Range("A2") = "Keyword1" Then 
Sheets("List1").Range("b2") = "60" 
Sheets("List1").Range("c2") = "630" 
Sheets("List1").Range("d2") = "0.7" 
Sheets("List1").Range("e2") = "0.7" 
     ElseIf Sheets("List1").Range("A2") = "Keyword2" Then 
Sheets("List1").Range("b2") = "1500" 
Sheets("List1").Range("c2") = "15750" 
Sheets("List1").Range("d2") = "1.46" 
Sheets("List1").Range("e2") = "1" 
     ElseIf Sheets("List1").Range("A2") = "Keyword3" Then 
Sheets("List1").Range("b2") = "1500" 
Sheets("List1").Range("c2") = "15750" 
Sheets("List1").Range("d2") = "2.98" 
Sheets("List1").Range("e2") = "1" 
     ElseIf Sheets("List1").Range("A2") = "Keyword4" Then 
Sheets("List1").Range("b2") = "1500" 
Sheets("List1").Range("c2") = "15750" 
Sheets("List1").Range("d2") = "2.38" 
Sheets("List1").Range("e2") = "1"  
    End If 

。 。 。等等 。 。 。 正如你可以看到这个代码只有2行将工作,但如果我需要10000行呢?没有办法像这样写。我需要的东西会遍历A列,观察关键字,然后用正确的值填充剩余的行。 感谢您的帮助! (是的,我很新的VBA)

+3

你试过[循环](https://msdn.microsoft.com/en -us /图书馆/办公室/ aa221353(v = office.11​​)的.aspx)? –

+0

谢谢你的线索。我还没有尝试过。我刚接触VBA,不知道该找什么,所以任何提示都非常受欢迎。 – loqan

+0

好吧,请确保您尝试了几件事,并告诉我们什么都没有奏效,所以我们可以帮助您了解原因。 –

回答

2

您可以通过使用With语句来组织事情来简化事情。还要添加Select Case报表来清理If - Elseif - End If表示法。然后添加For循环以使输入更容易。循环时,请注意您可以循环在利用.Cells notatation而不是.Range列和行(例如Sheets(1).Range("B5")相同Sheets(1).Cells(5, 2)

例如:

For row = 1 to 2 
    With Sheets("List1") 
     Select Case .Cells(row,1) 
      Case "Keyword1" 
       .Cells(row,2) = "60" 
       .Cells(row,3) = "630" 
       .Cells(row,4) = "0.7" 
       .Cells(row,5) = "0.7" 
      Case "Keyword2" 
       .Cells(row,2) = "1500" 
       .Cells(row,3) = "15750" 
       .Cells(row,4) = "1.46" 
       .Cells(row,5) = "1" 
      Case "Keyword3" 
       .Cells(row,2) = "1500" 
       .Cells(row,3) = "15750" 
       .Cells(row,4) = "2.98" 
       .Cells(row,5) = "1" 
      Case "Keyword4" 
       .Cells(row,2) = "1500" 
       .Cells(row,3) = "15750" 
       .Cells(row,4) = "2.38" 
       .Cells(row,5) = "1"  
     end select 
    end with 
next col 

要为任意数量的做到这一点行只是改变For行是这样的:

For row = 1 to 10000 ' if you know the exact amount or... 

numRows = Application.WorksheetFunction.CountA(ThisWorkbook.Sheets("List1").Columns(1)) 
For row = 1 to numRows 
    'do the rest 
+0

同样你的代码也需要用户手动输入'lastrow'数字。 “Do While”或“Do Until”循环更有效,并且需要用户输入更少的信息。 –

2

此代码应该做的正是你所寻找的,请在顶部更改关键字来适应你。 r要求。

Sub GenerateRandomContent() 
Dim Keywords(1 To 4) As Variant 
Dim RowNo As Long 
RowNo = 1 

'************************************************** 
'*************** EDIT KEYWORDS HERE *************** 
'************************************************** 

      Keywords(1) = "Keyword1" 
      Keywords(2) = "Keyword2" 
      Keywords(3) = "Keyword3" 
      Keywords(4) = "Keyword4" 

'************************************************** 
'************************************************** 
'************************************************** 

    With ThisWorkbook.Sheets("List1") 

     Do While .Cells(RowNo, 1) <> "" 

      If .Cells(RowNo, 1) = Keywords(1) Then 
       .Cells(RowNo, 2) = "60" 
       .Cells(RowNo, 3) = "630" 
       .Cells(RowNo, 4) = "0.7" 
       .Cells(RowNo, 5) = "0.7" 
      ElseIf .Cells(RowNo, 1) = Keywords(2) Then 
       .Cells(RowNo, 2) = "1500" 
       .Cells(RowNo, 3) = "15750" 
       .Cells(RowNo, 4) = "1.46" 
       .Cells(RowNo, 5) = "1" 
      ElseIf .Cells(RowNo, 1) = Keywords(3) Then 
       .Cells(RowNo, 2) = "1500" 
       .Cells(RowNo, 3) = "15750" 
       .Cells(RowNo, 4) = "2.98" 
       .Cells(RowNo, 5) = "1" 
      ElseIf .Cells(RowNo, 1) = Keywords(4) Then 
       .Cells(RowNo, 2) = "1500" 
       .Cells(RowNo, 3) = "15750" 
       .Cells(RowNo, 4) = "2.38" 
       .Cells(RowNo, 5) = "1" 
      End If 
      RowNo = RowNo + 1 
     Loop 

    End With 

End Sub 

你也可以使用Case Select代替If

Sub GenerateRandomContent() 
Dim Keywords(1 To 4) As Variant 
Dim RowNo As Long 
RowNo = 1 

'************************************************** 
'*************** EDIT KEYWORDS HERE *************** 
'************************************************** 

      Keywords(1) = "Keyword1" 
      Keywords(2) = "Keyword2" 
      Keywords(3) = "Keyword3" 
      Keywords(4) = "Keyword4" 

'************************************************** 
'************************************************** 
'************************************************** 

    With ThisWorkbook.Sheets("List1") 

     Do While .Cells(RowNo, 1) <> "" 

      Select Case .Cells(RowNo, 1) 
      Case Keywords(1) 
       .Cells(RowNo, 2) = "60" 
       .Cells(RowNo, 3) = "630" 
       .Cells(RowNo, 4) = "0.7" 
       .Cells(RowNo, 5) = "0.7" 
      Case Keywords(2) 
       .Cells(RowNo, 2) = "1500" 
       .Cells(RowNo, 3) = "15750" 
       .Cells(RowNo, 4) = "1.46" 
       .Cells(RowNo, 5) = "1" 
      Case Keywords(3) 
       .Cells(RowNo, 2) = "1500" 
       .Cells(RowNo, 3) = "15750" 
       .Cells(RowNo, 4) = "2.98" 
       .Cells(RowNo, 5) = "1" 
      Case Keywords(4) 
       .Cells(RowNo, 2) = "1500" 
       .Cells(RowNo, 3) = "15750" 
       .Cells(RowNo, 4) = "2.38" 
       .Cells(RowNo, 5) = "1" 
      End Select 

      RowNo = RowNo + 1 

     Loop 

    End With 

End Sub 

或者也可以简单又

Sub GenerateRandomContent() 
Dim RowNo As Long 
RowNo = 1 

    With ThisWorkbook.Sheets("List1") 

     Do While .Cells(RowNo, 1) <> "" 

      Select Case .Cells(RowNo, 1) 
      Case "Keyword1" 
       .Cells(RowNo, 2) = "60" 
       .Cells(RowNo, 3) = "630" 
       .Cells(RowNo, 4) = "0.7" 
       .Cells(RowNo, 5) = "0.7" 
      Case "Keyword2" 
       .Cells(RowNo, 2) = "1500" 
       .Cells(RowNo, 3) = "15750" 
       .Cells(RowNo, 4) = "1.46" 
       .Cells(RowNo, 5) = "1" 
      Case "Keyword3" 
       .Cells(RowNo, 2) = "1500" 
       .Cells(RowNo, 3) = "15750" 
       .Cells(RowNo, 4) = "2.98" 
       .Cells(RowNo, 5) = "1" 
      Case "Keyword4" 
       .Cells(RowNo, 2) = "1500" 
       .Cells(RowNo, 3) = "15750" 
       .Cells(RowNo, 4) = "2.38" 
       .Cells(RowNo, 5) = "1" 
      End Select 

      RowNo = RowNo + 1 

     Loop 

    End With 

End Sub 
+0

在这种情况下,确实不需要定义关键字数组,只是为了简化代码。但它也起作用。 – teepee

+1

@TeePee它真的只是所以用户可以修改代码......因为它们似乎是从VBA开始的,给予额外的灵活性有时可以提供帮助。 –