每n列复制每n个单元格,并为每行粘贴新行

时间:2019-08-22 18:25:25

标签: excel vba copy-paste

enter image description here

在上面的示例中,我想从F2开始,复制F2,G2和H2,然后将这些值粘贴到新行中,我想继续这样做直到最后一列如果我从C2开始并且必须粘贴到新的工作表中,我也可以。我想继续这样做,直到最后一行为空。

我已经找到了,但是它只复制每个第三个单元格,而不是范围:

Sub CopyNthData()
Dim i As Long, icount As Long
Dim ilastrow As Long
Dim wsFrom As Worksheet, wsTo As Worksheet

Set wsFrom = Sheets("Sheet2")
Set wsTo = Sheets("Sheet1")
ilastrow = wsFrom.Range("B100000").End(xlUp).Row
icount = 1

For i = 1 To ilastrow Step 3
wsTo.Range("B" & icount) = wsFrom.Range("B" & i) 
icount = icount + 1
Next i
End Sub

我认为最好的方法是通过VBA,但是我对VBA还是个新手。任何建议,将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的评论,您只是想复制更大的范围?

您可以执行以下操作:

stepCt = 3
lr = stepCt-1
For i = 1 To ilastrow Step stepCt
    With wsTo
       .Range(.Cells(icount,2),.Cells(icount+lr,2)) = wsFrom.Range(wsFrom.Cells(i,2),wsFrom.Cells(i+lr,2)) 
    End With
    icount = icount + stepCt 'Accounts for multiple ROWS
Next i

可以执行与多列类似的操作,您可以将lr的列参数添加到Cells()的行参数中,而不是添加Cells()(最后一行)。在这种情况下,无需使用stepCt


编辑1:

更改为显示列而不是行,因为原始问题从要求将F2, F3, & F4复制到F2, G2, & H2来改变。

For i = 1 To ilastrow
    With wsTo
       .Range(.Cells(icount,6),.Cells(icount,8)).Value = wsFrom.Range(wsFrom.Cells(i,6),wsFrom.Cells(i,8)).Value 
    End With
    icount = icount + 1
Next i

答案 1 :(得分:0)

我不确定您要查找的是什么,但这会将从F2开始的范围内的所有数据粘贴到以C2开始的新工作表中。

from pyspark.sql import functions as F
df = spark.createDataFrame([("a", 0.694), ("b", -2.669), ("a", 0.245), ("a", 0.1), ("b", 0.3), ("c", 0.3)], ["n", "val"])
df.show()

+---+------+
|  n|   val|
+---+------+
|  a| 0.694|
|  b|-2.669|
|  a| 0.245|
|  a|   0.1|
|  b|   0.3|
|  c|   0.3|
+---+------+


df = df.groupby('n').count() #.sort(F.desc('count'))
df = df.withColumn('dummy', F.lit(1))
df.show()

+---+-----+-----+
|  n|count|dummy|
+---+-----+-----+
|  c|    1|    1|
|  b|    2|    1|
|  a|    3|    1|
+---+-----+-----+


df = df.groupBy('dummy').agg(F.min('count').alias('min'), F.max('count').alias('max')).drop('dummy')
df.show()

+---+---+
|min|max|
+---+---+
|  1|  3|
+---+---+