Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: Macro in Excel

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    35

    Macro in Excel

    Ciao a tutti,

    Ho un problema da risolvere riguardo ad excel.

    Ho un file di excel nel quale ho delle tabelle, nel primo foglio ho una tabella con dei dati (non numerici) e devo creare una macro che mi permetta, una volta selezionata una riga della tabella, di copiare i dati nella tabella che si trova nel foglio 2.

    Mi sapete dire come posso fare?

    Non ho mai avuto a che fare con le macro quindi non so da dove partire.

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Lancia questa macro dal foglio da cui devi copiare

    codice:
    Sub copiaIncolla()
    Dim intervallo As Range
    Dim ultimarigaFog2 As Long
    Set intervallo = Application.InputBox(Prompt:="Seleziona le righe", Title:="Copia e incolla", Type:=8)
    'ricavo l'ultima riga scritta del foglio 2 per incollare nella cella sottostante
    ultimarigaFog2 = Sheets("Foglio2").Range("A65536").End(xlUp).Row
    intervallo.Copy
    Sheets("Foglio2").Select
    Rows(ultimarigaFog2 + 1 & ":" & ultimarigaFog2 + 1).Select
    ActiveSheet.Paste
    ' se dopo la copia vuoi tornare automaticamente al foglio1 togli il commento alla riga qui sotto
    'Sheets("Foglio1").Select
    Application.CutCopyMode = False
    End Sub

  3. #3
    Utente di HTML.it L'avatar di leomac
    Registrato dal
    Mar 2009
    Messaggi
    188
    Ciao,
    il tutto è più facile di quanto si pensi, difatti nel caso tu abbia excel 2007 (si più specifico la prossima volta, specificare il tipo di programma rende molto più semplice la discussione) come il sottoscritto, esiste un comando denominato REGISTRA MACRO che permette di trasformare ciò che tu fai "manualmente" col mouse, ad esempio spostarti da foglio a foglio o copiare e incollare, in stringhe di codice in Visual Basic 6. Quindi visto che te non devi compilare un codice così complesso direi che questa sia la soluzione più semplice.
    Per registrare una macro vai su VISUALIZZA-> MACRO -> REGISTRA MACRO.
    Ti si apirà una finsetra con vari dati commpreso il nome della macro, ad esempio Macro1. Lasciando perdere tutto il resto clicca su OK. A questo punto parte la registrazione (compare un quadrato blu in basso a sinistra della finisetra del foglio, il solito simbolo di STOP che trovi su lettori mp3 e registratori). Esegui i comandi che vuoi che la macro faccia e la registrazione trasforma il tutto in codice. Una volta concluso, clicca sullo STOP prima menzionato. Ora vai su VISUALIZZA -> MACRO ->VISUALIZZA MACRO comparirà altra finestra col nome delle macro da te create. Clicca su quella appena creata MACRO1 e poi su MODIFICA. Quindi si apre VB6 con le stringhe di codice dei movimenti che te avevi effettuato da excel.
    Ho provato io a fare quello da te richiesto ed è uscito:
    codice:
       Sheets("Foglio1").Select 'seleziona foglio 1
    Range("A1:C5").Select 'seleziona celle da A1 a C5
        Selection.Copy ' copia
        Sheets("Foglio2").Select ' seleziona foglio 2
        Range("A1:C5").Select ' seleziona celle da A1 a C5
        ActiveSheet.Paste 'incolla
    Come vedi è molto semplice. Ma il lignuaggio è molto "primitivo". Prova anche te e poi fammi sapere. Comunque ti consiglio di vederti qualche guida su Visual basic. Una semplice la trovi a questo link
    http://programmazione.html.it/guide/...a-visual-basic
    sperando funzioni ancora.
    Inoltre nella home di questo forum vedi la sezione LATO SERVER -> Programmazione
    Subforums: Visual Basic e .Net Framework, trovi cose utili su macro e VB6 in generale.


  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    35
    Scusa ma sono alle prime armi con le macro, mi sai dire come faccio ad eseguire la macro?

    Come devo fare? Con che cosa la devo scrivere?

    Grazie e ciao.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Vai su strumenti => macro => macro. Assegni un nome alla macro, incolli il codice e salvi. Poi seguendo lo stesso percorso fai click su esegui.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    35
    Ho fatto come mi ha suggerito leomac e funziona ma adesso vorrei sapere come modificare la macro in modo che vada bene per ogni riga della tabella in cui mi posiziono, altrimenti devo creare una macro per ogni riga.

    Questo e' il codice della mia maro:

    Sub CopiaPO()
    '
    ' CopiaPO Macro
    ' Macro recorded 11/06/2009 by alb31665
    '

    '
    Range("B7:Q7").Select
    Selection.Copy
    Sheets("Foglio 2").Select
    Range("B7:Q7").Select
    ActiveSheet.Paste
    Sheets("Foglio 1").Select
    End Sub

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da AB03
    Ho fatto come mi ha suggerito leomac e funziona ma adesso vorrei sapere come modificare la macro in modo che vada bene per ogni riga della tabella in cui mi posiziono, altrimenti devo creare una macro per ogni riga.
    Se devi copiare intervalli non contigui li selezioni tramite la macro che ti ho scritto e hai finito.

  8. #8
    Utente di HTML.it L'avatar di leomac
    Registrato dal
    Mar 2009
    Messaggi
    188
    In questo caso non devi definire un intervallo preciso ma dirgli che ti incolli il tutto a partire dalla casella da te selezionata. In questo caso però il pulsante di attivazione macro deve essere presente nel foglio in cui devi incollare.
    Se ho capito bene ciò che intendi, dovrebbe essere cosi:
    codice:
    Sub Macro3()
        Sheets("Foglio1").Select
        Range("B7:Q7").Select
        Selection.Copy
        Sheets("Foglio2").Select
        ActiveCell.PasteSpecial
    End Sub

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    35
    Originariamente inviato da nicola75ss
    Se devi copiare intervalli non contigui li selezioni tramite la macro che ti ho scritto e hai finito.
    Ok, la tua soluzione funziona ma quando mi copia la riga nel foglio 2 di destinazione me la copia all'inizio mentre io voglio che me la copi nella stessa posizione in cui si trova nel foglio 1, per esempio nel foglio 1 ho la riga che si trova in B7 voglio che me la copi nel foglio 2 nella posizione B7, mi sai dire come posso fare?

    Grazie.

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    35
    Originariamente inviato da leomac
    In questo caso non devi definire un intervallo preciso ma dirgli che ti incolli il tutto a partire dalla casella da te selezionata. In questo caso però il pulsante di attivazione macro deve essere presente nel foglio in cui devi incollare.
    Se ho capito bene ciò che intendi, dovrebbe essere cosi:
    codice:
    Sub Macro3()
        Sheets("Foglio1").Select
        Range("B7:Q7").Select
        Selection.Copy
        Sheets("Foglio2").Select
        ActiveCell.PasteSpecial
    End Sub
    Ciao, ho adottato la tua soluzione e va bene c'e' solo un problema, prima di avviare la macro devo controllare che il cursore si trovi nella posizione desiderata del file di destinazione.

    Non c'e' un modo per evitare di controllare che il cursore sia nella posizione corretta?

    Perche' nel mio file tutte le tabelle hanno la prima cella libera in B7 e quindi quando copio la riga che parte da B7 del foglio 1 la devo copiare nella riga che parte da B7 del foglio 2 e cosi' anche per le successive righe; quella in B8 del foglio 1 copiata nella riga B8 del foglio due ...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.