#1   Report Post  
Posted to microsoft.public.excel.programming
sw sw is offline
external usenet poster
 
Posts: 4
Default VB Code

I only have limited knowledge of vb and am looking for the
code to help me do the following;

I have a spreadsheet as example following

Acc No. Acc Name Invoice No. Value
100 ABC 250 50
100 ABC 252 45
102 EFG 198 34
100 ABC 253 89
103 XYZ 134 76

I need to bring the records together onto one row for each
account no so that it looks like the following;

Acc No Acc Name Invoice No. Value Invoice No. Value etc
100 ABC 250 50 252 45
102 EFG 198 34 134 76

Is there any code that is able to look at each change in
the Account No and bring all relating invoice no's and
values onto the same row?

I am trying to achieve this for 6000 records that are
grouped together so that a mail merge can be performed for
each account no.

Any help would be great!

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 135
Default VB Code

This should work:

Sub Tester()

Cells.Sort _
Key1:=Range("A2"), _
Order1:=xlAscending, _
Header:=xlYes, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom

LastRow = Cells(65536, 1).End(xlUp).Row
For i = 2 To LastRow - 1
CurNo = Cells(i, 1)
Do
j = j + 1
NextNo = Cells(i + j, 1)
If NextNo = CurNo Then ShiftCells i, j
Loop Until NextNo < CurNo
i = i + j - 1
j = 0
Next i

Columns(1).SpecialCells(xlCellTypeBlanks).EntireRo w.Delete
y = Cells(1, 1).CurrentRegion.Columns.Count

For i = 5 To y - 1 Step 2
Cells(1, i) = "Invoice No"
Cells(1, i + 1) = "Value"
Next i

End Sub
Sub ShiftCells(i, j)
LastCell = Cells(i, 1).End(xlToRight).Column
Cells(i, LastCell + 1) = Cells(i + j, 3)
Cells(i, LastCell + 2) = Cells(i + j, 4)
Rows(i + j).ClearContents
End Sub

Shockley





"sw" wrote in message
...
I only have limited knowledge of vb and am looking for the
code to help me do the following;

I have a spreadsheet as example following

Acc No. Acc Name Invoice No. Value
100 ABC 250 50
100 ABC 252 45
102 EFG 198 34
100 ABC 253 89
103 XYZ 134 76

I need to bring the records together onto one row for each
account no so that it looks like the following;

Acc No Acc Name Invoice No. Value Invoice No. Value etc
100 ABC 250 50 252 45
102 EFG 198 34 134 76

Is there any code that is able to look at each change in
the Account No and bring all relating invoice no's and
values onto the same row?

I am trying to achieve this for 6000 records that are
grouped together so that a mail merge can be performed for
each account no.

Any help would be great!



  #3   Report Post  
Posted to microsoft.public.excel.programming
sw sw is offline
external usenet poster
 
Posts: 4
Default VB Code

That's great and the code works, how about if I place
other columns of information in against each account
number e.g. displays the address details for each record.
what part of the code would I need to change to enable me
to do exactly the same thing (bringing the invoice no. and
value onto same row) if I have more than 2 other columns
(e.g. at the moment it's just Acc No and Acc Name, but I
may want to have Address, Town, City columns?)

Hope this makes sense & thanks for your help on this!

-----Original Message-----
This should work:

Sub Tester()

Cells.Sort _
Key1:=Range("A2"), _
Order1:=xlAscending, _
Header:=xlYes, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom

LastRow = Cells(65536, 1).End(xlUp).Row
For i = 2 To LastRow - 1
CurNo = Cells(i, 1)
Do
j = j + 1
NextNo = Cells(i + j, 1)
If NextNo = CurNo Then ShiftCells i, j
Loop Until NextNo < CurNo
i = i + j - 1
j = 0
Next i

Columns(1).SpecialCells

(xlCellTypeBlanks).EntireRow.Delete
y = Cells(1, 1).CurrentRegion.Columns.Count

For i = 5 To y - 1 Step 2
Cells(1, i) = "Invoice No"
Cells(1, i + 1) = "Value"
Next i

End Sub
Sub ShiftCells(i, j)
LastCell = Cells(i, 1).End(xlToRight).Column
Cells(i, LastCell + 1) = Cells(i + j, 3)
Cells(i, LastCell + 2) = Cells(i + j, 4)
Rows(i + j).ClearContents
End Sub

Shockley





"sw" wrote in message
...
I only have limited knowledge of vb and am looking for

the
code to help me do the following;

I have a spreadsheet as example following

Acc No. Acc Name Invoice No. Value
100 ABC 250 50
100 ABC 252 45
102 EFG 198 34
100 ABC 253 89
103 XYZ 134 76

I need to bring the records together onto one row for

each
account no so that it looks like the following;

Acc No Acc Name Invoice No. Value Invoice No. Value

etc
100 ABC 250 50 252 45
102 EFG 198 34 134 76

Is there any code that is able to look at each change in
the Account No and bring all relating invoice no's and
values onto the same row?

I am trying to achieve this for 6000 records that are
grouped together so that a mail merge can be performed

for
each account no.

Any help would be great!



.

  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 135
Default VB Code

If you change the number of columns NOT to be shifted, say, if you add a
column called "Acc Address", then it must go in one of the first 3 columns,
and you would change the public constant "BaseValues" to "3" (from "2") in
the constants declaration section (first line of code).

Now the code handles any number of "BaseValues" and "ShiftValues".

The code assumes that the original sheet has headers for each populated
column, eg, in your example, the first row would look like:

Acc No Acc Name Invoice No Value Address Town City

Hope this is clear enough,
Shockley


Public Const BaseValues As Integer = 2
Public ShiftValues As Integer
Sub Tester()

ShiftValues = Cells(1, 1). _
End(xlToRight).Column - BaseValues
Cells.Sort _
Key1:=Range("A2"), _
Order1:=xlAscending, _
Header:=xlYes, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom
LastRow = Cells(65536, 1).End(xlUp).Row

For i = 2 To LastRow - 1
CurNo = Cells(i, 1)
Do
j = j + 1
NextNo = Cells(i + j, 1)
If NextNo = CurNo Then ShiftCells i, j
Loop Until NextNo < CurNo
i = i + j - 1
j = 0
Next i

Columns(1).SpecialCells(xlCellTypeBlanks) _
.EntireRow.Delete
y = Cells(1, 1).CurrentRegion.Columns.Count
z = BaseValues + ShiftValues + 1

For i = z To y - ShiftValues + 1 Step ShiftValues
For j = 1 To ShiftValues
Cells(1, i + j - 1) = Cells(1, BaseValues + j)
Next j
Next i

End Sub
Sub ShiftCells(i, j)
LastCell = Cells(i, 1).End(xlToRight).Column
For k = 1 To ShiftValues
Cells(i, LastCell + k) = Cells(i + j, BaseValues + k)
Next k
Rows(i + j).ClearContents
End Sub





"sw" wrote in message
...
That's great and the code works, how about if I place
other columns of information in against each account
number e.g. displays the address details for each record.
what part of the code would I need to change to enable me
to do exactly the same thing (bringing the invoice no. and
value onto same row) if I have more than 2 other columns
(e.g. at the moment it's just Acc No and Acc Name, but I
may want to have Address, Town, City columns?)

Hope this makes sense & thanks for your help on this!

-----Original Message-----
This should work:

Sub Tester()

Cells.Sort _
Key1:=Range("A2"), _
Order1:=xlAscending, _
Header:=xlYes, _
OrderCustom:=1, _
MatchCase:=False, _
Orientation:=xlTopToBottom

LastRow = Cells(65536, 1).End(xlUp).Row
For i = 2 To LastRow - 1
CurNo = Cells(i, 1)
Do
j = j + 1
NextNo = Cells(i + j, 1)
If NextNo = CurNo Then ShiftCells i, j
Loop Until NextNo < CurNo
i = i + j - 1
j = 0
Next i

Columns(1).SpecialCells

(xlCellTypeBlanks).EntireRow.Delete
y = Cells(1, 1).CurrentRegion.Columns.Count

For i = 5 To y - 1 Step 2
Cells(1, i) = "Invoice No"
Cells(1, i + 1) = "Value"
Next i

End Sub
Sub ShiftCells(i, j)
LastCell = Cells(i, 1).End(xlToRight).Column
Cells(i, LastCell + 1) = Cells(i + j, 3)
Cells(i, LastCell + 2) = Cells(i + j, 4)
Rows(i + j).ClearContents
End Sub

Shockley





"sw" wrote in message
...
I only have limited knowledge of vb and am looking for

the
code to help me do the following;

I have a spreadsheet as example following

Acc No. Acc Name Invoice No. Value
100 ABC 250 50
100 ABC 252 45
102 EFG 198 34
100 ABC 253 89
103 XYZ 134 76

I need to bring the records together onto one row for

each
account no so that it looks like the following;

Acc No Acc Name Invoice No. Value Invoice No. Value

etc
100 ABC 250 50 252 45
102 EFG 198 34 134 76

Is there any code that is able to look at each change in
the Account No and bring all relating invoice no's and
values onto the same row?

I am trying to achieve this for 6000 records that are
grouped together so that a mail merge can be performed

for
each account no.

Any help would be great!



.




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
split post code (zip code) out of cell that includes full address Concord Excel Discussion (Misc queries) 4 October 15th 09 06:59 PM
Code to conditional format all black after date specified in code? wx4usa Excel Discussion (Misc queries) 3 December 26th 08 07:06 PM
Drop Down/List w/Code and Definition, only code entered when selec Spiritdancer Excel Worksheet Functions 2 November 2nd 07 03:57 AM
Convert a Number Code to a Text Code Traye Excel Discussion (Misc queries) 3 April 6th 07 09:54 PM
copying vba code to a standard code module 1vagrowr Excel Discussion (Misc queries) 2 November 23rd 05 04:00 PM


All times are GMT +1. The time now is 06:22 PM.

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

About Us

"It's about Microsoft Excel"