【问题标题】:Excel Copy and Pasting data into multiple cellsExcel 将数据复制并粘贴到多个单元格中
【发布时间】:2016-12-19 01:29:47
【问题描述】:

我有一个 Excel 问题,分为两部分:首先,如果我想将数据从一个工作表复制到工作表 1 所在的另一个:

A
B
C
D
E

对于工作表 2,我希望每个单元格重复三次,这样当我将前五个单元格粘贴到工作表 2 中时,每个单元格都会出现三次:

A
A
A
B
B
B
C
C   
C
D
D
D
E
E
E

我该怎么做?我个人现在确实知道任何可以让我这样做的公式或函数,因此非常期待您的建议。

完成后,有没有办法使用 VBA 编写它?我对 VBA 非常陌生,只是在想是否可能。否则,我将只录制一个宏。非常感谢你!

【问题讨论】:

    标签: excel vba excel-formula


    【解决方案1】:

    Sheet1 中的数据如下:

    在 Sheet2 中,单元格 A1 输入:

    =INDEX(Sheet1!A:A,ROUNDUP(ROW()/3,0))
    

    然后抄下来:

    (如果您想要每个数据项 4 个副本,请在公式中使用 4)

    【讨论】:

    • 嗨!感谢你的回复!它绝对可以完成这项工作。但是,我必须手动将公式向下拖动到最后一行,这是原始数组长度的 3 倍。有没有办法以原始数组长度的 3 倍自动填充列直到 Sheet 2 的最后一行?
    • 例如,如果 Sheet 1 的最后一行是 A7,我们希望每个单元格重复 3 次,Sheet 2 的最后一行是 A21。我们如何自动填充到只有 A21?提前谢谢!!!
    • @LovetoLearn 我们需要对照 0 检查公式结果并返回空白 ??
    【解决方案2】:

    一种VBA方式:

    Option Explicit
    
    Sub main()
        Dim data As Variant, datum As Variant
        Dim iDatum As Long, nTimes As Long
    
        With Worksheets("Sheet 1") '<--| reference your "source" worksheet (change "Sheet 1" to your actual "source" sheet name
            data = Application.Transpose(.Range("A1", .Cells(.Rows.count, 1).End(xlUp)).Value) '<--| store its column A cells values from row 1 down to last not empty one into an array
        End With
    
        nTimes = 3 '<--| set how many times you want to copy the same value
        With Worksheets("Sheet 2") '<--| reference your "target" worksheet (change "Sheet 2" to your actual "target" sheet name
            .Range("A1").Resize(nTimes) = data(LBound(data)) '<--| write 1st 'data' array value 'nTimes' from its cell A1 down
            For iDatum = LBound(data) + 1 To UBound(data) '<--| loop through other 'data' array values
                .Cells(.Rows.count, 1).End(xlUp).Offset(1).Resize(nTimes) = data(iDatum) '<--| write them 'nTimes' from first empty row after last not empty one down
            Next iDatum
        End With
    End Sub
    

    【讨论】:

    • 嗨,由于某种原因,Excel 说它超出了范围。不过谢谢。
    • 这一行: .Range("A1").Resize(nTimes) = data(LBound(data)) 另外,如果我的工作表 1 从 A2 开始,但工作表 2 从 A7 开始。在您给出的示例中,我是否将第一个 A1 替换为 A2,将第二个 A1 替换为 A7?
    • 是的。我的示例假设两张纸都从 A1 开始。
    • 你有没有用你争论的那些替换尝试我的代码,我确认了你?
    【解决方案3】:

    最终,我按照老式的方式一步一步地进行操作,并且奏效了:

    LastRow = have.Cells(have.Rows.Count, "A").End(xlUp).Row
    Dim p As Long
    pp = 3
    For p = 1 To LastRow
        want.Range("A" & pp) = have.Range("A" & p).Value
        pp = pp + 1
        want.Range("A" & pp) = have.Range("A" & p).Value
        pp = pp + 1
        want.Range("A" & pp) = have.Range("A" & p).Value
        pp = pp + 1
    Next p
    

    【讨论】:

    • 如果你真的“爱学习”,就必须放弃这种方式(不是“老套”而是“表现不佳”),尝试向他人学习
    猜你喜欢
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2021-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多