Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Text To Columns then insert rows

Hello,

I need help! I have spreadsheets with tons of data and I am looking
to write a macro to do what i need. I have varrying number of data
within a cell and need to seperate them out. I current do text to
columns to seperate into seperate columns. Then I count the number of
columns in each row, and then insert that number of rows below and
then copy and paste special transpose to get them into their own
rows. The are in the fourth column of data. I then copy down the
first three columns over and over for each value.

I do very beginner code writing as this is not my training or job, but
I can usually figure it out. I am stuck on this one, any help is
appreciated.

Thanks,
A
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1,522
Default Text To Columns then insert rows

On Sep 20, 9:46*am, Adrienne Miller wrote:
Hello,

I need help! *I have spreadsheets with tons of data and I am looking
to write a macro to do what i need. *I have varrying number of data
within a cell and need to seperate them out. *I current do text to
columns to seperate into seperate columns. *Then I count the number of
columns in each row, and then insert that number of rows below and
then copy and paste special transpose to get them into their own
rows. *The are in the fourth column of data. *I then copy down the
first three columns over and over for each value.

I do very beginner code writing as this is not my training or job, but
I can usually figure it out. *I am stuck on this one, any help is
appreciated.

Thanks,
A


Send your file with a complete explanation and examples to dguillett1
@gmail.com
  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3,514
Default Text To Columns then insert rows

Here's one way...

Sub SplitCellDataToRows()
Dim v, vDataIn, vTemp(), vDataOut() 'as type Variant
Dim n&, x&, k&, lRowsIn&, lColsOut& 'as type Long
Dim sPad As String

Const sDelimiter As String = " " '//revise to suit

'Parse the data into an array of arrays
lRowsIn = ActiveSheet.UsedRange.Rows.Count
vDataIn = Range(Cells(1, 1), Cells(lRowsIn, 1))
ReDim vTemp(1 To lRowsIn)
For n = LBound(vDataIn) To UBound(vDataIn)
vTemp(n) = Split(vDataIn(n, 1), sDelimiter)
x = UBound(vTemp(n)) + 1
If x lColsOut Then lColsOut = x
Next 'n

'Pad any missing data to match column output
ReDim vDataOut(1 To lRowsIn, 1 To lColsOut)
For n = 1 To lRowsIn
x = (UBound(vTemp(n)) + 1): sPad = Join(vTemp(n), sDelimiter)
If x < lColsOut Then sPad = sPad _
& Application.WorksheetFunction.Rept(sDelimiter, lColsOut - x)
k = 1
For Each v In Split(sPad, sDelimiter)
vDataOut(n, k) = v: k = k + 1
Next 'v
Next 'n

'Write the data back to the same rows
Range("A1").Resize(lRowsIn, lColsOut) = vDataOut
End Sub

This assumes the data is a 'text dump' stored in colA, and all cols to
the right are empty. It does not preserve the original data in colA.

--
Garry

Free usenet access at http://www.eternal-september.org
ClassicVB Users Regroup! comp.lang.basic.visual.misc


  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3,514
Default Text To Columns then insert rows

Here's another way that allows you to choose where the output goes by
changing the constant 'lOutputCol' in the final loop. Also, it writes
to the worksheet one row at a time.


Sub SplitCellDataToCols()
Dim v, vDataIn 'as type Variant
Dim n&, x&, lRowsIn&, lColsOut& 'as type Long

Const sDelimiter As String = " " '//revise to suit
Const lOutputCol As Long = 2 '//revise to suit

lRowsIn = ActiveSheet.UsedRange.Rows.Count
vDataIn = Range(Cells(1, 1), Cells(lRowsIn, 1))

'Get the number of output columns
For n = LBound(vDataIn) To UBound(vDataIn)
v = Split(vDataIn(n, 1), sDelimiter)
x = UBound(v) + 1: If x lColsOut Then lColsOut = x
Next 'n

'Parse the data out (row by row)
Application.ScreenUpdating = False
For n = LBound(vDataIn) To UBound(vDataIn)
v = Split(vDataIn(n, 1), sDelimiter)
Cells(n, lOutputCol).Resize(1, lColsOut) = _
Split(Join(v, sDelimiter) _
& Application.WorksheetFunction.Rept(sDelimiter, _
lColsOut - (UBound(v) + 1)), sDelimiter)
Next 'n
Application.ScreenUpdating = True
End Sub

--
Garry

Free usenet access at http://www.eternal-september.org
ClassicVB Users Regroup! comp.lang.basic.visual.misc


  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1,522
Default Text To Columns then insert rows

On Sep 20, 7:29*pm, GS wrote:
Here's another way that allows you to choose where the output goes by
changing the constant 'lOutputCol' in the final loop. Also, it writes
to the worksheet one row at a time.

Sub SplitCellDataToCols()
* Dim v, vDataIn 'as type Variant
* Dim n&, x&, lRowsIn&, lColsOut& 'as type Long

* Const sDelimiter As String = " " '//revise to suit
* Const lOutputCol As Long = 2 '//revise to suit

* lRowsIn = ActiveSheet.UsedRange.Rows.Count
* vDataIn = Range(Cells(1, 1), Cells(lRowsIn, 1))

* 'Get the number of output columns
* For n = LBound(vDataIn) To UBound(vDataIn)
* * v = Split(vDataIn(n, 1), sDelimiter)
* * x = UBound(v) + 1: If x lColsOut Then lColsOut = x
* Next 'n

* 'Parse the data out (row by row)
* Application.ScreenUpdating = False
* For n = LBound(vDataIn) To UBound(vDataIn)
* * v = Split(vDataIn(n, 1), sDelimiter)
* * Cells(n, lOutputCol).Resize(1, lColsOut) = _
* * * Split(Join(v, sDelimiter) _
* * * & Application.WorksheetFunction.Rept(sDelimiter, _
* * * lColsOut - (UBound(v) + 1)), sDelimiter)
* Next 'n
* Application.ScreenUpdating = True
End Sub

--
Garry

Free usenet access athttp://www.eternal-september.org
ClassicVB Users Regroup! comp.lang.basic.visual.misc

======================
Here is what I sent
Option Explicit

Sub LineEmUpSAS()
Dim i As Long
Dim lc As Long


Application.ScreenUpdating = False

Columns("D").TextToColumns Destination:=Range("D1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False,
Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False

On Error Resume Next
For i = ActiveSheet.UsedRange.Rows.Count To 2 Step -1
lc = Cells(i, Columns.Count).End(xlToLeft).Column - 4
Rows(i + 1).Resize(lc).Insert
Cells(i, "e").Resize(, lc).Copy
Cells(i + 1, "d").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
Transpose:=True
Cells(i, 1).Resize(, 3).AutoFill Destination:=Cells(i, 1).Resize(lc +
1, 3), Type:=xlFillCopy
Next i

'housekeeping
lc = Cells.Find("*", Cells(Rows.Count, Columns.Count) _
, , , xlByColumns, xlPrevious).Column
Columns("e").Resize(, lc).Delete
Columns("B:D").WrapText = False
Range("c1:D1").WrapText = True
Columns("D").NumberFormat = "@"
Columns("b").AutoFit
Columns("a").ColumnWidth = 6
Columns("C").ColumnWidth = 9.22
Columns("D").ColumnWidth = 7.33
Rows.AutoFit
ActiveSheet.UsedRange.Borders.LineStyle = xlContinuous
Range("b2").Select

Application.ScreenUpdating = True
End Sub













  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3,514
Default Text To Columns then insert rows

Don Guillett laid this down on his screen :
On Sep 20, 7:29*pm, GS wrote:
Here's another way that allows you to choose where the output goes by
changing the constant 'lOutputCol' in the final loop. Also, it writes
to the worksheet one row at a time.

Sub SplitCellDataToCols()
* Dim v, vDataIn 'as type Variant
* Dim n&, x&, lRowsIn&, lColsOut& 'as type Long

* Const sDelimiter As String = " " '//revise to suit
* Const lOutputCol As Long = 2 '//revise to suit

* lRowsIn = ActiveSheet.UsedRange.Rows.Count
* vDataIn = Range(Cells(1, 1), Cells(lRowsIn, 1))

* 'Get the number of output columns
* For n = LBound(vDataIn) To UBound(vDataIn)
* * v = Split(vDataIn(n, 1), sDelimiter)
* * x = UBound(v) + 1: If x lColsOut Then lColsOut = x
* Next 'n

* 'Parse the data out (row by row)
* Application.ScreenUpdating = False
* For n = LBound(vDataIn) To UBound(vDataIn)
* * v = Split(vDataIn(n, 1), sDelimiter)
* * Cells(n, lOutputCol).Resize(1, lColsOut) = _
* * * Split(Join(v, sDelimiter) _
* * * & Application.WorksheetFunction.Rept(sDelimiter, _
* * * lColsOut - (UBound(v) + 1)), sDelimiter)
* Next 'n
* Application.ScreenUpdating = True
End Sub

--
Garry

Free usenet access athttp://www.eternal-september.org
ClassicVB Users Regroup! comp.lang.basic.visual.misc

======================
Here is what I sent
Option Explicit

Sub LineEmUpSAS()
Dim i As Long
Dim lc As Long


Application.ScreenUpdating = False

Columns("D").TextToColumns Destination:=Range("D1"),
DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False,
Tab:=True, _
Semicolon:=False, Comma:=True, Space:=False, Other:=False

On Error Resume Next
For i = ActiveSheet.UsedRange.Rows.Count To 2 Step -1
lc = Cells(i, Columns.Count).End(xlToLeft).Column - 4
Rows(i + 1).Resize(lc).Insert
Cells(i, "e").Resize(, lc).Copy
Cells(i + 1, "d").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone,
Transpose:=True
Cells(i, 1).Resize(, 3).AutoFill Destination:=Cells(i, 1).Resize(lc +
1, 3), Type:=xlFillCopy
Next i

'housekeeping
lc = Cells.Find("*", Cells(Rows.Count, Columns.Count) _
, , , xlByColumns, xlPrevious).Column
Columns("e").Resize(, lc).Delete
Columns("B:D").WrapText = False
Range("c1:D1").WrapText = True
Columns("D").NumberFormat = "@"
Columns("b").AutoFit
Columns("a").ColumnWidth = 6
Columns("C").ColumnWidth = 9.22
Columns("D").ColumnWidth = 7.33
Rows.AutoFit
ActiveSheet.UsedRange.Borders.LineStyle = xlContinuous
Range("b2").Select

Application.ScreenUpdating = True
End Sub


Looks like you got a sample file from OP and catered exactly to that.
My offerings are more generic and so not as much detail!<g

--
Garry

Free usenet access at http://www.eternal-september.org
ClassicVB Users Regroup! comp.lang.basic.visual.misc


  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3,514
Default Text To Columns then insert rows

Don,
Nice example of how to use TextToColumns with VBA! Thanks for
posting...

--
Garry

Free usenet access at http://www.eternal-september.org
ClassicVB Users Regroup! comp.lang.basic.visual.misc


  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1,522
Default Text To Columns then insert rows

On Sep 21, 3:29*pm, GS wrote:
Don,
Nice example of how to use TextToColumns with VBA! Thanks for
posting...

--
Garry

Free usenet access athttp://www.eternal-september.org
ClassicVB Users Regroup! comp.lang.basic.visual.misc



I did get his file and, thanks!
Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
CANT INSERT CELLS, ONLY ROWS & COLUMNS robin l Excel Worksheet Functions 1 April 16th 09 05:43 PM
Insert many columns with many rows AFTER data has already been typ CLR Excel Discussion (Misc queries) 0 March 30th 09 04:12 PM
Text to Rows and then Insert Blank Rows [email protected] Excel Discussion (Misc queries) 1 December 20th 08 04:23 PM
How do I insert collapsable columns/rows into a worksheet? Ginger Excel Discussion (Misc queries) 1 July 23rd 07 03:40 AM
Summing columns after insert rows Tom Cote Excel Programming 2 June 21st 05 07:51 PM


All times are GMT +1. The time now is 02:52 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"