Cyberdude
07-30-2008, 01:45 PM
Given that I have two text strings . . . one in cell ?A1? and the other in cell ?A2?. I want to manually copy the string in cell ?A2? and insert it at the end of the string in cell ?A1?. Something like this:
In ?A1? I have ?Hello there?.
In ?A2? I have ? good friend.?.
I want to construct in ?A1? the string ?Hello there good friend.?
I know, why don?t I tust type it in? Because sometimes I have a lot of these to construct. Other times the string in ?A2? might be quite long.
Here?s what happens:
Step 1: Click on cell ?A2? .
Step 2: Click on the icon at the top of my screen that I use to copy.
Step 3: Click on cell ?A1?
Step 4: Move my cursor to the end of the string in cell ?A1? and click it.
When I do that, the icon that I use to paste is suddenly grayed out, so I can?t paste what I copied.
What rule am I violating?
malik641
07-30-2008, 02:01 PM
When you select a cell and click the copy icon, you are copying a Range object, and not just the text. So when you click in the formula bar after clicking A1, you lose the Paste icon because I guess excel cannot handle understanding you want to paste the .Value property into the location that you click at.
So what you should do is click cell A2, then click the formula bar and select the text and THEN click the Copy icon. Then click cell A1 and click in the formula bar and the Paste icon WILL be available to you and you can paste the text you copied.
In addition, I believe Excel uses it's own Clipboard object to store Class objects, and when you click the formula bar, it's using the system's clipboard. Again, this is what I think.
mdmackillop
07-30-2008, 02:40 PM
Hi Sid,
Here's a short macro I use for that requirement
Sub JoinCells()
Dim txt As String, cel As Range
For Each cel In Selection
txt = txt & cel & " "
Next
txt = Left(txt, Len(txt) - 1)
Selection.ClearContents
Selection(1) = txt
End Sub
Bob Phillips
07-30-2008, 02:52 PM
Snap! Here's mine
Private Sub JoinColumns()
Dim LastCol As Long
Dim cell As Range
Dim j As Long
For Each cell In Selection
With cell
.Value = .Value & " " & .Offset(0, 1).Value
.Offset(0, 1).Value = ""
LastCol = Cells(.Row, Columns.Count).End(xlToLeft).Column
For j = .Column + 1 To LastCol - 1
Cells(.Row, j).Value = Cells(.Row, j + 1).Value
Cells(.Row, j + 1).Value = ""
Next j
End With
Next cell
End Sub
Mine will process multiple rows, if selected.
I also have one for trimming the tail of a selection
Private Sub TrimTail()
Dim cell As Range
Dim i As Long
For Each cell In Selection
i = Len(cell.Value)
Do Until i = 1 Or (Mid(cell.Value, i, 1) <> " " And Asc(Mid(cell.Value, i, 1)) <> 160)
i = i - 1
Loop
cell.Value = Left(cell.Value, i)
Next cell
End Sub
and of course one to break up the other way
Sub TextToColumns()
Selection.TextToColumns Destination:=ActiveCell, DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), _
Array(7, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1))
End Sub
Why all of this nonsense? Because I often copy data in a worksheet to test for problems, and it is often drawn in as one string, especially from NGs, and so I pull it in, split it, then tidy it up. Those buttons save me hours.
Cyberdude
07-31-2008, 04:44 AM
Thanx, Gang! Your suggestions are a big help. Who would have guessed that such a simple operation could be so complicated.
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions Inc. All rights reserved.