[英]Excel VBA - Copy from a range of cells and paste in one cell
I need to copy content from a range of cells in sheet1
, say A1:A10
, and paste all the data in a single cell in sheet2
in cell A1
This seems to be a simple use case but I couldn't find any solution so far.我需要从sheet1
的一系列单元格中复制内容,比如A1:A10
,并将所有数据粘贴到单元格A1
中sheet2
的单个单元格中这似乎是一个简单的用例,但到目前为止我找不到任何解决方案. Below is what I tried以下是我尝试过的
' Attempt 1
Sheets("shee1").Select
Range("A1:A10").Select
Selection.Copy
MsgBox Selection.Text ' Error: Type mismatch. If I add Selection.Text to watch I see an array kind of structure with each index having each cell data
Dim val = Selection.Text
Sheets("sheet2").Select
Range("A1") = val
' Attempt 2
Sheets("sheet1").Range("A1:A10").Copy(Sheets("sheet2").Range("A1") 'Doesn't copy in single cell A1, instead copies to multiple rows like in source
Perhaps this?也许这个?
Option Explicit
Sub Sample()
Dim MyAr As Variant
MyAr = Sheets("Sheet1").Range("A1:A10").Value2
Sheets("sheet2").Range("A1").Value = Join(Application.Transpose(MyAr), vbLf)
End Sub
This reads the range into an array and then joins them before writing the output to the relevant range.这会将范围读入一个数组,然后在将 output 写入相关范围之前将它们连接起来。
s
- Source, d
- Destination s
- 来源, d
- 目的地Option Explicit
Sub copyRangeData()
Const sName As String = "Sheet1"
Const sAddress As String = "A1:A10"
Const dName As String = "Sheet2"
Const dAddress As String = "A1"
Const dDelimiter As String = vbLf
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim sws As Worksheet: Set sws = wb.Worksheets(sName)
Dim srg As Range: Set srg = sws.Range(sAddress)
Dim sData As Variant: sData = srg.Value
Dim dstring As String
Dim r As Long
For r = 1 To UBound(sData, 1)
dstring = dstring & sData(r, 1) & dDelimiter
Next r
dstring = Left(dstring, Len(dstring) - Len(dDelimiter))
Dim dws As Worksheet: Set dws = wb.Worksheets(dName)
Dim dCell As Range: Set dCell = dws.Range(dAddress)
dCell.Value = dstring
End Sub
Sub copyRangeDataShorter()
Const sName As String = "Sheet1"
Const sAddress As String = "A1:A10"
Const dName As String = "Sheet2"
Const dAddress As String = "A1"
Const dDelimiter As String = vbLf
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim sData As Variant: sData = wb.Worksheets(sName).Range(sAddress).Value
Dim dstring As String
Dim r As Long
For r = 1 To UBound(sData, 1)
dstring = dstring & sData(r, 1) & dDelimiter
Next r
dstring = Left(dstring, Len(dstring) - Len(dDelimiter))
wb.Worksheets(dName).Range(dAddress).Value = dstring
End Sub
Sub copyRangeDataShortest()
Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
Dim sData As Variant: sData = wb.Worksheets("Sheet1").Range("A1:A10").Value
Dim dstring As String
Dim r As Long
For r = 1 To UBound(sData, 1)
dstring = dstring & sData(r, 1) & vbLf
Next r
dstring = Left(dstring, Len(dstring) - 1)
wb.Worksheets("Sheet2").Range("A1").Value = dstring
End Sub
You can use Chr(10)
which is equivalent to excel Alt + Enter command.您可以使用相当于 excel Alt + Enter命令的Chr(10)
。 It would set cells WrapText
to True
and enters data in next line.它会将单元格WrapText
设置为True
并在下一行输入数据。
Sub MultipleCells_To_OneCell()
Dim cell As Range, SelectedRange As Range
ThisWorkbook.Worksheets("Sheet2").Activate
Set SelectedRange = ThisWorkbook.Worksheets("Sheet2").Range("A1:A10")
For Each cell In SelectedRange
ThisWorkbook.Worksheets("Sheet3").Range("A1").Value = ThisWorkbook.Worksheets("Sheet3").Range("A1") _
& Chr(10) & cell
Next cell
End Sub
Hope this would help you.希望这会对你有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.