私の投稿にアクセスしたすべての人に感謝します。
最初の苦労の末、私は自分自身でコードを理解することができました。私はそれを必要とするかもしれない誰のためにそれを下に掲示しています。
基本的に私はthis優しい魂によって投稿されたランダム化コードを使用し、それぞれの新しい会社と新しい年ごとにいくつかのフラグを使用して自分のニーズに合わせて拡張しました。誰にとっても分かりやすいことを願っています。
ベスト
Sub Random_Sampling()
'
Dim PeerCount, FirmCount, YearCount As Long
Dim Focal_CIK, fiscalYear As Long
Const nItemsTotal As Long = 1532
Dim rngList As Range
Dim FirmYearRange As Range
Dim FirmStart, FirmStartRow, YearStartRow As Long
Dim ExistingPeers As Range
Dim idx() As Long
Dim varRandomItems() As Variant
Dim i, j, k, m, n As Long
Dim iCntr, jCntr As Long
Dim booIndexIsUnique As Boolean
Set rngList = Sheets("Sheet2").Range("A2").Resize(nItemsTotal, 1)
FirmCount = Cells(2, 10).Value
For k = 1 To FirmCount
FirmStart = Application.WorksheetFunction.Match(k, Columns("E"), 0)
Focal_CIK = Cells(FirmStart, 1).Value
YearCount = Cells(FirmStart, 7).Value
For m = 1 To YearCount
Set FirmYearRange = Range("H" & FirmStart & ":H200000")
YearStartRow = Application.WorksheetFunction.Match(m, FirmYearRange, 0) + FirmStart - 1
fiscalYear = Cells(YearStartRow, 3).Value
PeerCount = Cells(YearStartRow, 9).Value
Set ExistingPeers = Range(Cells(YearStartRow + PeerCount, 2), Cells(YearStartRow + PeerCount, 2))
ReDim idx(1 To PeerCount)
ReDim varRandomItems(1 To PeerCount)
For i = 1 To PeerCount
Do
booIndexIsUnique = True ' Innoncent until proven guilty
idx(i) = Int(nItemsTotal * Rnd + 1)
For j = 1 To i - 1
If idx(i) = idx(j) Then 'Is already picked
ElseIf idx(i) = Focal_CIK Then 'Is the firm itself
booIndexIsUnique = False 'If true, don't pick it
Exit For
End If
For n = 1 To PeerCount
If idx(i) = Cells(YearStartRow + n - 1, 2).Value Then 'Is one of the actual peers
booIndexIsUnique = False 'If true, don't pick it
Exit For
Exit For
End If
Next n
Next j
If booIndexIsUnique = True Then
Exit Do
End If
Loop
varRandomItems(i) = rngList.Cells(idx(i), 1)
Rows(YearStartRow + PeerCount).EntireRow.Insert
'The order of the columns are very important for the following lines
Cells(YearStartRow + PeerCount, 1) = Focal_CIK
Cells(YearStartRow + PeerCount, 2) = varRandomItems(i)
Cells(YearStartRow + PeerCount, 3) = fiscalYear
Cells(YearStartRow + PeerCount, 4) = "0"
Next i
Next m
Next k
End Sub
あなたは我々があなたを助けることができる任意のVBAコードを構築していますか? – OldUgly
あなたのロジックをさらに明確にすると、2006年に、会社2には4人の同僚がいます。しかし、私は会社2が実際に持っていたものを除外する必要があるので、(7-4 = 3)3社から4社をランダムに選ぶ必要があります。どのように処理されますか?同様に、これは選択と置換の問題か、選択と除外の問題ですか?例えば(4から1、4から1、4から1)を選択するか、(4から1、3から1、2から1)を選択しますか? – OldUgly
こんにちは!あなたのコメントの多くのおかげで!私はインラインで見つかったいくつかのコードにパッチを当てようとしましたが、今のところ私はここに置くことは何もありません。会社2の場合、それは十分に大きいので、実際のサンプルでは問題ではありません。最後に、はい、これは選択と除外の問題です。理想的には、ランダムに割り当てられた値はすべて異なるはずです。ありがとう! – Kerem