复制并粘贴到vba中

时间:2016-10-26 06:47:15

标签: excel vba excel-vba

我的Excel VBA编码有问题。

我想让一个编码可以将数据从一张纸复制到具有特定条件的纸张。我的数据是二进制格式。

sheet1中的数据有近千行。我只想从sheet1到sheet 2获取15个随机数据行。必须满足的标准是每列只有列的总和为3.如果不满足,则将采用其他数据。

here the example of my data

当我点击生成时。它将从数据表1复制到表2.我希望我的数据副本像红色圆圈一样。不喜欢红柱一个。请帮帮我

Option Explicit
Sub Random20()
Randomize
Dim MyRows() As Integer    
Dim numRows, percRows, nxtRow, nxtRnd, chkRnd, copyRow As Integer
'Determine Number of Rows in Sheet1 Column A
  numRows = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row

   percRows = 17

    ReDim MyRows(percRows) 
'Create Random numbers and fill array
     For nxtRow = 1 To percRows
getNew:
'Generate Random number
      nxtRnd = Int((numRows) * Rnd + 1)
'Loop through array, checking for Duplicates
       For chkRnd = 1 To nxtRow
'Get new number if Duplicate is found
        If MyRows(chkRnd) = nxtRnd Then GoTo getNew
       Next
'Add element if Random number is unique
      MyRows(nxtRow) = nxtRnd
     Next
'Loop through Array, copying rows to Sheet2
  For copyRow = 1 To percRows
   Sheets(1).Rows(MyRows(copyRow)).EntireRow.Copy _
     Destination:=Sheets(2).Cells(copyRow, 1)
  Next
End Sub

1 个答案:

答案 0 :(得分:0)

这将实现您的目标,但代码需要很长时间才能执行,我实际上使用RANDBETWEEN(1,COUNTIF(Sheet1!A:A,"<>"&""))RandBetweenInt(1,COUNTIF(Sheet1!A:A,"<>"&""),***Range of Random Integers from above***)(用户定义的函数找到{模拟了代码来模拟您的代码) {3}})。这计算得更快,并且不包括重复的随机数字。

Sub chkRand()

Application.Calculation = xlCalculationManual

Do Until Worksheets("Sheet3").Range("I18").Value = 1
Application.Calculate
Loop

End Sub

.Range("I18")具有公式=IF(COUNTIF(B18:H18,3)=7,1,0),因此这将强制手动计算,然后重新计算,直到所有列总数为3。

要小心,虽然我已经让这个宏运行了30分钟,但它仍然没有找到匹配。

如果您真的在寻找我将使用的仅限VBA的解决方案:

For Clm = 2 To 8
ClmTtl = 0
    For copyRow = 1 To percRows
     ClmTtl = ClmTtl + Sheets(1).Cells(MyRows(copyRow), clm).Value
    Next
    If Not ClmTtl = 3 Then Call Random20
Next

虽然我总是建议首先寻找基于公式的解决方案,但只在需要的地方使用宏。

由于这只能在前一个总计为3的情况下进入下一列,所以代码只能在它们全部具有所需总数时才能完成。希望这会有所帮助,祝你好运,减少运行时间。