2016-11-08 14 views
0

Excel VBAコーディングに問題があります。特定の列条件でコピー&ペーストvba excel

1つのコードを作成して、あるシートから特定の条件のシートにデータをコピーすることができます。フォームバイナリで私のデータ。

sheet1のデータは、ほぼ1000行あります。私はちょうどシート1からシート2に15のランダムな行のデータを取って欲しい。満たさなければならない基準は、ある特定の列が列の合計12であるということです。データの

例は、ここで結果 enter image description here

enter image description here

例は私のコーディングですが、それは動作しません。

dim clm , ClmTtl as integer 
for row = 1 to 1000 
    ClmTtl = ClmTtl + Sheets(1).Cells(row,8).Value 
next 
if not ClmTtl = 12 then call CommandButton1_click 

er`

+0

に等しいです:全体のことは、次のようになりますあなたは15をしたいですランダムな行列Xの15個の値の合計が12と異なる場合、プログラムはさらに15個のランダムな行を取り、それらが12に等しいかどうかをチェックします。可能であれば、15個の値/セルの合計は12個に等しくなります(あなたの例によると)それらのすべてが少なくとも1の値を持つ場合、 – Limak

+0

ohh。実際にはダミーだけです。これは実際のデータではありません。私は何を達成したいのかを見せたいだけです。ご不便をおかけして申し訳ございません 。手伝って頂けますか? @リマク –

答えて

0

数(正確になるように、擬似ランダム)ランダムを取るために、あなたはRnd機能を使用することができます。これは0から1までの範囲の値を与えます。特定の数値を範囲から取得するには、use this solutionを使用できます。

Dim LastRow As Long, rRow As Long 
LastRow = Range("A" & Rows.Count).End(xlUp).Row ' Last row based on column A 
rRow = Int((LastRow - 2 + 1) * Rnd + 2) 

は今、あなたは、この15回を取る必要があり、あなたは文句を言わない、同じ行を複数回取得することを確認してください:だから、最後に行2のあなたの範囲から乱数を取得するには、たとえば行うことができます。配列を使用して行番号を格納することができます。残念ながら、VBAには、特定の値が内部にあるかどうかをチェックする機能はありません。私たちは値をループすることでそれを行います。

Dim LastRow As Long, rRow As Long 
Dim rowArr(14) As Long 
Dim found As Boolean 
LastRow = Range("A" & Rows.Count).End(xlUp).Row 
For i = 0 To 14 
    rRow = Int((LastRow - 2 + 1) * Rnd + 2) 
    found = False 
    If i > 0 Then 
     For j = i - 1 To 0 Step -1 
      If rowArr(j) = rRow Then found = True 
     Next j 
    End If 
    If found Then 
     i = i - 1 
    Else 
     rowArr(i) = rRow 
    End If 
Next i 

ランダムな行の値の合計が12に等しいかどうかを確認する必要はありません。また、そうでない場合は、プロセス全体をループします。ループはあなたがつもり列Gの値の合計15行を含む配列rowArrを持って、いつ終了する

Dim LastRow As Long, rRow As Long 
Dim rowArr(14) As Long 
Dim found As Boolean, mainCriterium As Boolean 
Dim sumOfValues As Double 

mainCriterium = False 

Do While mainCriterium = False 
    LastRow = Range("A" & Rows.Count).End(xlUp).Row 
    For i = 0 To 14 
     rRow = Int((LastRow - 2 + 1) * Rnd + 2) 
     found = False 
     If i > 0 Then 
      For j = i - 1 To 0 Step -1 
       If rowArr(j) = rRow Then found = True 
      Next j 
     End If 
     If found Then 
      i = i - 1 
     Else 
      rowArr(i) = rRow 
     End If 
    Next i 
    For i = 0 To 14 
     sumOfValues = sumOfValues + Range("G" & rowArr(i)).Value 
    Next i 
    If sumOfValues = 12 Then mainCriterium = True 
Loop 

だから、12

関連する問題