从剪贴板粘贴转置到最后一个非空单元格

时间:2017-03-10 07:53:17

标签: excel transpose

我想要一个宏来粘贴剪贴板中的值(我从其他来源复制的值) 转置为工作表中的第E行中的非空单元格" sheet1"

任何帮助?

2 个答案:

答案 0 :(得分:0)

function findLastRowInCol(wks as excel.worksheet, col as long)
    dim rng as range
    with wks
        set rng = .cells(.rows.count, col).end(xlup)
        findLastRowInCol = rng.row
    end with
end function

从“立即”窗格进行测试:

debug.print findLastRowInCol(thisworkbook.sheets("sheet1"), 5)

这将为您提供指定列中最后一个非空单元格的行。请注意,这可能不是工作表的最后一行;选择不同的列可能会给出不同的结果,具体取决于该列的最后一个非空单元格。

编辑:将活动表替换为“sheet1”

编辑:要在另一个宏中使用的示例代码,以便从其他来源粘贴,

thisworkbook.sheets("sheet1").cells(findLastRowInCol(thisworkbook.sheets("sheet1"), 5), 5).pastespecial paste:=xlAll

如果从其他Excel工作表粘贴或剥离格式,您可以使用例如“xlPasteSpecialValues”

编辑添加:要从另一个工作表粘贴一行并进行转置,请使用上面的“.pastespecial”然后使用一些变体:

.pastespecial paste:=xlpastevalues, transpose:=True

最简单的实现是,

sub PasteToE()
thisworkbook.sheets("sheet1").cells(findLastRowInCol(thisworkbook.sheets("sheet1"), 5),5).pastespecial paste:=xlpastevalues, transpose:=True
end sub

将命令按钮添加到另一个工作表并将此宏指定给它。选择您的范围并复制它,然后单击按钮。

答案 1 :(得分:0)

尝试这样的事情:

Sub WriteFromClipboard()
Dim refRow As Integer
Dim Data As DataObject
Dim DataText As String
On Error Resume Next
    'Get row to write data:
    refRow = 1 + ThisWorkbook.Sheets("Sheet1").Columns(5).Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row
    If Err.Number > 0 Then
        refRow = 1
    End If
    Err.Clear
    'Get data from clipboard:
    Set Data = New DataObject
    Data.GetFromClipboard
    DataText = Data.GetText
    'Write data from clipboard on the spreadsheet:
    If Err.Number > 0 Then
        MsgBox "Clipboard doesn't contain valid data."
    Else
        ThisWorkbook.Sheets("Sheet1").Cells(refRow, 5).Select
        ThisWorkbook.Sheets("Sheet1").Paste
    End If
End Sub