Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从剪贴板粘贴转置到最后一个非空单元格_Excel_Transpose - Fatal编程技术网

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

Excel 从剪贴板粘贴转置到最后一个非空单元格,excel,transpose,Excel,Transpose,我想要一个宏来粘贴剪贴板中的值(我从另一个源复制的值) 转置到工作表“sheet1”中E行的最后一个非空单元格 有什么帮助吗 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

我想要一个宏来粘贴剪贴板中的值(我从另一个源复制的值) 转置到工作表“sheet1”中E行的最后一个非空单元格

有什么帮助吗

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)
这将为您提供指定列中最后一个非空单元格的行。请注意,这可能不是工作表的最后一行;选择不同的列可能会得到不同的结果,具体取决于该列的最后一个非空单元格

编辑:将activesheet替换为“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

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

尝试以下操作:

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

我会尝试一下,但是在你的代码中,我没有看到任何关于从剪贴板粘贴和在底部转置简单粘贴代码的地方。您没有指定要粘贴的内容或粘贴位置。这将影响你如何转换值。我不知道如何在vba中编辑你的代码。我从同一工作簿的另一个工作表中的列复制值。您知道吗,您甚至不需要一个宏来复制和转置?这是真的!选择要复制的内容,然后在功能区的“常用”选项卡上单击“复制”。然后转到要粘贴的位置,并在最后一个单元格中单击。返回功能区并单击“粘贴”下的小向下箭头。其中一个选项是“转置”。点击那个,你就完成了。所以问题是,我上面的建议是否满足你的需要?或者您仍然需要宏?我收到一个错误编译错误:用户定义类型未在第三行定义抱歉,您必须引用“Microsoft Forms 2.0对象库”。要执行此操作,请转到“工具”菜单,然后单击“引用…”。。。在对话框中选中“Microsoft Forms 2.0对象库”选项,然后单击“确定”。如果由于某种原因,该引用未出现在列表中,请单击“浏览”并选择位于Windows文件夹的System32子文件夹中的文件FM20.DLL。单击“确定”,您就可以开始了:)就这样……感谢您的支持。我做了一些更改,因为我希望它粘贴在转置中,但保留原来的格式。并将sheet1重命名为所需的图纸名称。现在就完美了