![]() |
|
#1
|
||||
|
||||
![]()
You could add a macro like the following to your 'main' sheet's code module, but you'll need to fix your spelling before the code will work properly.
Code:
Private Sub Worksheet_Change(ByVal Target As Range) Dim lRowTgt As Long, lRowDst As Long, i As Long, j As Long Dim StrDst As String, bFilled As Boolean, bDiff As Boolean, bCol As Boolean With Target.Worksheet ' Find the last row on the input sheet lRowTgt = .Range("A" & .Rows.Count).End(xlUp).Row ' Check whether we're on the last row If Not Intersect(Target, .Range("A" & lRowTgt & ":D" & lRowTgt)) Is Nothing Then ' Check whether all cells in columns A:D on the last row are filled in bFilled = True For i = 1 To 4 If .Cells(lRowTgt, i).Value = "" Then bFilled = False End If Next If bFilled = True Then ' All cells in columns A:D on the last row are filled in With Target.Worksheet ' Find the output sheet StrDst = "Customer " & UCase(Trim(.Cells(lRowTgt, 1).Value)) ' Find the last row on the output sheet With Sheets(StrDst) lRowDst = .Range("A" & .Rows.Count).End(xlUp).Row End With ' See if we can find a row on the output sheet that has the same values as the input sheet For i = 2 To lRowDst bDiff = True If .Cells(lRowTgt, 2).Value = Sheets(StrDst).Cells(i, 1).Value And _ .Cells(lRowTgt, 3).Value = Sheets(StrDst).Cells(i, 2).Value And _ .Cells(lRowTgt, 4).Value = Sheets(StrDst).Cells(i, 3).Value Then bDiff = False: Exit For End If Next If bDiff = True Then ' No matches, so copy from the input sheet to the output sheet lRowDst = lRowDst + 1 .Range("B" & lRowTgt & ":D" & lRowTgt).Copy With Sheets(StrDst) .Paste Destination:=.Range("A" & lRowDst) End With End If End With End If End If ' Find the last row on the input sheet lRowTgt = .Range("F" & .Rows.Count).End(xlUp).Row ' Check whether we're on the last row If Not Intersect(Target, .Range("F" & lRowTgt & ":I" & lRowTgt)) Is Nothing Then ' Check whether all cells in columns F:I on the last row are filled in bFilled = True For i = 6 To 9 If .Cells(lRowTgt, i).Value = "" Then bFilled = False End If Next If bFilled = True Then ' All cells in columns F:I on the last row are filled in With Target.Worksheet ' Find the output sheet StrDst = "Customer " & UCase(Trim(.Cells(lRowTgt, 6).Value)) ' Find the last row on the output sheet With Sheets(StrDst) lRowDst = .Range("F" & .Rows.Count).End(xlUp).Row End With ' See if we can find a row on the output sheet that has the same values as the input sheet For i = 2 To lRowDst bDiff = True If .Cells(lRowTgt, 7).Value = Sheets(StrDst).Cells(i, 5).Value And _ .Cells(lRowTgt, 8).Value = Sheets(StrDst).Cells(i, 6).Value And _ .Cells(lRowTgt, 9).Value = Sheets(StrDst).Cells(i, 7).Value Then bDiff = False: Exit For End If Next If bDiff = True Then ' No matches, so copy from the input sheet to the output sheet lRowDst = lRowDst + 1 .Range("G" & lRowTgt & ":I" & lRowTgt).Copy With Sheets(StrDst) .Paste Destination:=.Range("E" & lRowDst) End With End If End With End If End If End With Application.CutCopyMode = True End Sub
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#2
|
|||
|
|||
![]()
WOW! Thanks
but i am sorry i cannot understand what you say since i am very new and noob to excel. however i appreciate your help. please make some formula for me if you could. Last edited by macropod; 03-09-2014 at 12:23 AM. Reason: Deleted unnecessary quote of entire post replied to |
#3
|
||||
|
||||
![]()
It really isn't practical to do this with a formula, that's why I provided the macro. If you add it to your workbook's 'main' sheet code module, your other sheets will be updated automatically any time a new line is completed on the 'main' sheet.
To add the macro to your workbook's 'main' sheet code module, press Alt-F11 to start the VB Editor, double-click on the 'Sheet1(main)' entry on the left, then paste the code from my post into it. Oh, and fix up the spelling errors (e.g. 'Customer A', not 'cutomaer A')! PS: Please don't quote the entire post responded to in your replies; if something needs to be quoted, quote only that part.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#4
|
|||
|
|||
![]() Quote:
2. Thanks for the opinion, i would now quote only important things. Now since i am doing this for the first time, this easy job looks a bit hard for me here is what i did>>>>>> I copied your code, and in my workbook perss alt+ F11(it opened VB editor) i dubble click on sheet one(main) and paste your code there . after that i go to "file" Tab and choose> "Close and return to Microsoft Excel"(alt+Q) i dont see any changes in my workbook.nor i see any saved micro to run what to do now? i know i am not doing it in a right way.please help me |
#5
|
||||
|
||||
![]() Quote:
The macro doesn't change any existing data. If you need to transfer the existing data, I'd suggest sorting columns A to D by customer name, transferring their data to the Customer A & Customer B sheets, then doing the same for columns F to I. You can re-sort columns A to D & F to I by date afterwards.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
![]() |
Thread Tools | |
Display Modes | |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
How to Copy data from Outlook mail and Paste it in a Excel sheet? | padhu1989 | Outlook | 0 | 09-11-2012 04:07 AM |
sheet 2 data highlight in sheet 1 | gsrikanth | Excel | 1 | 04-21-2012 06:25 PM |
![]() |
fuchsd | Word | 6 | 10-25-2011 05:52 AM |
If two geographical data match in two sheets, copy unique id/code found in one sheet | alliage | Excel | 1 | 09-01-2011 05:23 AM |
copy cell from sheet 2 to sheet 3 macro | slipperyjim | Excel Programming | 1 | 02-18-2010 01:31 AM |