Condividi:        

[Excel] Copiare Dati con ordine

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel] Copiare Dati con ordine

Postdi sax » 27/10/06 12:44

In un file di esportazione in formato excel "AnticipMese"
mi trovo una cella in cui si trovano dei caratteri
numerici "0010 - 32.00"
"0010" è il codice, e "32.00" importo in euro. Dovrei estrapolare i due
numeri in celle separate e copiarli in un altro file.
Tenendo presente che sulla riga 2 vi è il nominativo degli operai e dalla
riga 3 alla 33 vi sono le celle "codice-euro" ripetute per tante colonne
quante sono i dipendenti, Nel file "presenze_operai" i dipendenti sono
disposti in verticale e le intestazioni di ognuno si trovano nelle
celle "AQ7" - "AQ47" - "AQ87" ecc i primi numeri "0010" si devono copiare
nei range "AU7:AU37" "AU47:AU77" "AU87:AU117" ecc ed i secondi
numeri "32.00" si devono copiare nei range "AV7:AV37" "AV47:AV77"
"AV87:AV117" ecc. il problema più grosso è che i dipendenti non sono nello
stesso ordine, quindi se "AnticipMese!B2=Presenze_operai!AQ7 copiare il
Range "AnticipMese!B3:B33 in presenze_operai!AU7:AU37".
Forse è Meglio che clikkate sul link vi è un file zippato contenete il file
Anticipmese e presenze operai
http://freefilehosting.net/?id=rdn8kaze/Q==
Grazie per l'aiuto
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34

Sponsor
 

Postdi Anthony47 » 28/10/06 22:07

Ciao Sax,
allora potresti usare la seguente macro:
Codice: Seleziona tutto
Sub CopySax1()
FileFrom = "Anticipmese.xls"    '<<< Cambare se necessario
ColCopy = "AU1"                 '<<< Colonna Di Incolla
   
FileTo = ActiveWorkbook.Name
If FileTo = FileFrom Then
MsgBox ("FileTo e FileFrom sono uguali, errore; abortito")
Exit Sub
End If
ShNome = ActiveSheet.Name
CCNum = Range(ColCopy).Column
Windows(FileFrom).Activate
LastCol = Range("B2").End(xlToRight).Column
FormulaA = "=MATCH(R[1]C,[" & FileTo & "]" & ShNome & "!C43,0)"
Application.DisplayAlerts = False
For I = 1 To LastCol - 1
Windows(FileFrom).Activate
Range("A3").Select
Selection.Offset(-2, I).FormulaR1C1 = FormulaA
DestROff = Selection.Offset(-2, I).Value
If IsError(DestROff) Then
MsgBox ("Valore " & Selection.Offset(-1, I).Value & " - Non trovata su Col AQ; saltata")
GoTo Skippa
End If
Selection.Offset(0, I).Range("A1:A31").Copy
Windows(FileTo).Activate
Range("A1").Offset(DestROff - 1, CCNum - 1).Select
ActiveSheet.Paste
On Error Resume Next
Application.CutCopyMode = False
    Selection.TextToColumns DataType:=xlDelimited _
        , TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
        :="-", FieldInfo:=Array(Array(1, 2), Array(2, 1)), TrailingMinusNumbers:=True
On Error GoTo 0
Skippa:
Next I
Application.DisplayAlerts = True
End Sub


Copiala in uno dei Moduli di codice che hai nel tuo file "presenze_operai", eventualmente associagli un tasto di scelta rapida o associala a un pulsante.

Ho assunto che, come da esempio, la riga 1 di "anticipmese" sia libera da B verso destra e la uso per metterci una formula; es B2 =CONFRONTA(B2;[presenze_operai.xls]Ott!$AQ:$AQ;0); ma questo e' fatto dalla macro, l' importante e' che la cella sia libera (se non lo e' dimmelo, possiamo cambiare la posizione).

Lanciare la macro dal foglio "presenze_operai"; la colonna AU viene lasciata in formato testo, mentre la colonna AV e' "generale", cioe' (nel nostro caso) il contenuto sara' considerato un numero; se vuoi che anche AU sia un numero, modifica il parametro (Array(1, 2) in (Array(1, 1).

Facci sapere se ti funziona.

Un paio di informazioni relative alle macro sul tuo foglio:
-intanto puoi eliminare tutti i moduli vuoti (da vba editor: File ->Rimuovi Modulo)
-nelle macro registrate puoi cancellare tutte le istruzioni del tipo ActiveWindow.SmallScroll o ActiveWindow.LargeScroll, come pure del tipo Range(XXXX).Select seguite poi da un' altra Range(YYYY).Select (ne vedo tante in Cancella_F_M_N), che non producono nulla di utile.

Ciao,
Avatar utente
Anthony47
Moderatore
 
Post: 19438
Iscritto il: 21/03/06 16:03
Località: Ivrea

Postdi sax » 30/10/06 08:29

Perfetto come sempre.
MILLE VOLTE GRAZIE.
sax
Utente Junior
 
Post: 93
Iscritto il: 20/05/06 19:34


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Copiare Dati con ordine":


Chi c’è in linea

Visitano il forum: Nessuno e 108 ospiti