Something like this should work for you:
Sub tgr()
Dim wb As Workbook
Dim wsData As Worksheet
Dim wsMacro As Worksheet
Dim wsDest As Worksheet
Set wb = ThisWorkbook
Set wsData = wb.Worksheets("DATA")
Set wsMacro = wb.Worksheets("MACRO")
Set wsDest = wb.Worksheets("Sheet2")
Dim lNumResults As Long
lNumResults = wsMacro.Range("E6").Value
If lNumResults <= 0 Then
MsgBox "Number of Randomly Selected results must be greater than 0", , "Error"
Exit Sub
End If
Dim aResults() As Variant
ReDim aResults(1 To lNumResults, 1 To 1)
Dim aData As Variant
With wsData.Range("A1", wsData.Cells(wsData.Rows.Count, "A").End(xlUp))
If .Cells.Count = 1 Then
ReDim aData(1 To 1)
aData(1) = .Value
Else
aData = Application.Transpose(.Value)
End If
End With
Dim sDelim As String
sDelim = Chr(1)
Dim sTemp As String
Dim lRandom As Long
Dim ixResult As Long
Dim i As Long
ixResult = 0
For i = 1 To UBound(aResults, 1)
Randomize
lRandom = Int(Rnd() * UBound(aData)) + IIf(i = 1, 1, 0)
ixResult = ixResult + 1
aResults(ixResult, 1) = aData(lRandom)
sTemp = Join(aData, sDelim)
sTemp = Replace(sDelim & sTemp & sDelim, sDelim & aResults(i, 1) & sDelim, sDelim, , , vbTextCompare)
If Len(sTemp) > Len(sDelim) Then
sTemp = Mid(sTemp, Len(sDelim) + 1, Len(sTemp) - Len(sDelim) * 2)
aData = Split(sTemp, sDelim)
Else
Exit For
End If
Next i
wsDest.Columns("A").ClearContents
wsDest.Range("A1").Resize(ixResult).Value = aResults
End Sub
EDIT: This method will copy the entire row of each randomly selected value from column A of the "DATA" sheet:
Sub tgr()
Dim wb As Workbook
Dim wsData As Worksheet
Dim wsMacro As Worksheet
Dim wsDest As Worksheet
Set wb = ThisWorkbook
Set wsData = wb.Worksheets("DATA")
Set wsMacro = wb.Worksheets("MACRO")
Set wsDest = wb.Worksheets("Sheet2")
Dim lNumResults As Long
lNumResults = wsMacro.Range("E6").Value
If lNumResults <= 0 Then
MsgBox "Number of Randomly Selected results must be greater than 0", , "Error"
Exit Sub
End If
Dim aData As Variant
Dim i As Long
With wsData.Range("A1", wsData.Cells(wsData.Rows.Count, "A").End(xlUp))
If .Cells.Count = 1 Then
ReDim aData(1 To 1)
aData(1) = .Address
Else
ReDim aData(1 To .Cells.Count)
Dim DataCell As Range
i = 0
For Each DataCell In .Cells
i = i + 1
aData(i) = DataCell.Address
Next DataCell
End If
End With
Dim sDelim As String
sDelim = Chr(1)
Dim rCopy As Range
Dim sTemp As String
Dim lRandom As Long
For i = 1 To lNumResults
Randomize
lRandom = Int(Rnd() * UBound(aData)) + IIf(i = 1, 1, 0)
If Not rCopy Is Nothing Then
Set rCopy = Union(rCopy, wsData.Range(aData(lRandom)))
Else
Set rCopy = wsData.Range(aData(lRandom))
End If
sTemp = Join(aData, sDelim)
sTemp = Replace(sDelim & sTemp & sDelim, sDelim & aData(lRandom) & sDelim, sDelim, , , vbTextCompare)
If Len(sTemp) > Len(sDelim) Then
sTemp = Mid(sTemp, Len(sDelim) + 1, Len(sTemp) - Len(sDelim) * 2)
aData = Split(sTemp, sDelim)
Else
Exit For
End If
Next i
wsDest.Cells.Clear
If Not rCopy Is Nothing Then rCopy.EntireRow.Copy wsDest.Range("A1")
End Sub