2016-12-30 1 views
1

列Aには0〜5の数値があります。0より大きい数値がある場合は、そのセルの隣の列にその数の乱数を生成します。
たとえば、A4 = 3の場合、B4、C4、D4に乱数が必要です。列からの入力に基づいて一連の乱数を生成します。 VBA Excel

私は0以上の値を取得し、200と300の間の乱数を生成するのにうまく動作する次のコードを持っていますが、それは複数のものを生成する方法に固執しています。 誰かが私を正しい方向に向けることができますか?ありがとう

Sub RandomNumbers() 

    Dim i As Integer 
    Dim j As Integer 
    Dim lastrow As Integer 
    lastrow = Range("a1").End(xlDown).Row 
    For j = 1 To 1 
     For i = 1 To lastrow 
      If ThisWorkbook.Sheets("LossFrequency").Cells(i, j).Value > 0 Then 
       ThisWorkbook.Sheets("LossFrequency").Cells(i, j + 1).Value = Int((300 - 200 + 1) * Rnd + 200) 
       Else: ThisWorkbook.Sheets("LossFrequency").Cells(i, j + 1).Value = 0 
      End If 

     Next i 
    Next j 
End Sub 

答えて

3

あなたはあなたのループは切り替えている:

Sub RandomNumbers() 

Dim i As Integer 
Dim j As Integer 
Dim lastrow As Integer 
lastrow = Range("a1").End(xlDown).Row 
With ThisWorkbook.Sheets("LossFrequency") 
    For i = 1 To lastrow 
     If .Cells(i, 1).Value > 0 Then 
      For j = 1 To .Cells(i, 1).Value 
       .Cells(i, j + 1).Value = Int((300 - 200 + 1) * Rnd + 200) 
      Next j 
     Else 
      .Cells(i, 2).Value = 0 
     End If 

    Next i 
End With 

End Sub 
+0

は(頭を萌芽)どうもありがとうございまし理にかなっている、えーえです! ! – Pauliec

2
Sub RandomNumbers() 
Dim i As Integer 
Dim j As Integer 
Dim lastrow As Integer 
Dim iValue As Integer 
Dim iColCount As Integer 

j = 1 
lastrow = Range("a1").End(xlDown).Row 

For i = 1 To lastrow 
    iValue = ThisWorkbook.Sheets("LossFrequency").Cells(i, j).Value 
    If iValue > 0 Then 
     For iColCount = 1 To iValue 
      ThisWorkbook.Sheets("LossFrequency").Cells(i, iColCount + 1).Value = Int((300 - 200 + 1) * Rnd + 200) 
     Next iColCount 
    Else 
     ThisWorkbook.Sheets("LossFrequency").Cells(i, j + 1).Value = 0 
    End If 

Next i 

End Sub 
2

をここで式アプローチ

Sub RandomNumbers() 
    Dim cell As Range 

    With ThisWorkbook.Sheets("LossFrequency") 
     For Each cell In .Range("A1", .Cells(.Rows.count, 1).End(xlUp)).SpecialCells(xlCellTypeConstants, xlNumbers) 
      If cell.Value = 0 Then 
       cell.Offset(, 1).Value = 0 
      Else 
       cell.Offset(, 1).Resize(, cell.Value).FormulaR1C1 = "=RandBetween(300,200)" 
      End If 
     Next 
    End With 
End Sub 
+0

異なった外観に感謝します! – Pauliec

+0

ようこそ。ご意見ありがとうございます – user3598756

関連する問題