Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    35

    Macro in excel

    Salve,

    vorrei creare una macro che dopo aver selezionato la parte che voglio modificare mi faccia questo:

    Taglia il contenuto della seconda riga e la incolla subito dopo l'ultima cella della prima riga. Taglia il contenuto della quarta riga e la incolla subito dopo l'ultima cella della terza riga e così via. Inoltre vorrei che le righe vuote (in questo caso la seconda e la quarta) vengono eliminate. Adesso ho fatto un esempio su 4 righe ma questo lavoro é variabile, cioé potrei averlo bisogno per 6 o 60 righe.
    In fin dei conti vorrei avere una macro che mi crea una riga con il contenuto della riga dispari + contenuto della riga pari. Vorrei precisare che tutte le righe sono formate da 4 colonne. Quindi dopo aver fatto girare la macro il foglio sarà composto da righe di 8 colonne ciascuna. Spero di essermi spiegato.

    Mi scuso in anticipo se non ho formulato la domanda nella sezione giusta.

    Grazie

  2. #2
    .........si ho capito cosa vorresti fare!!!!!!!!


    ma la tua richiesta quale sarebbe????????
    cerchi qualcuno che la faccia al posto tuo??????
    quale è la tua difficoltà....???

    Ciao Massimo


    Ci sono solo 10 tipi di persone al mondo, chi conosce il binario e chi no.

    Disapprovo quello che dici, ma difenderò fino alla morte il tuo diritto a dirlo.

    Tanta bella giovinezza che si fugge tuttavia, chi vuol essere lieto sia, del doman non v'e' certezza.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    35
    Io ho provato con la funzione "registra macro"..ma dopo guardando il codice ho visto che le celle sono statiche.. cioé mi prende il range("A1414") x esempio e mi fa su un casino.. Se qualcuno mi può dare una dritta mi farebbe un favore.. Grazie.

    Ciao

  4. #4
    certo che le celle sono statiche......
    difatti programmando dovresti sostituirle con i valori che a te servono.........

    per prima cosa ti consiglio di
    aggiungere un ulteriore sheet al tuo Workbook

    dal 1° sheet ti fa tutti i calcoli e trascrivi i risultati sul tuo nuovo Sheet
    alla fine cancelli il 1° sheet e rinomini quello che hai creato....

    per quanto riguarda le celle.......
    puoi accedere o tramite stringhe del tipo

    Range = ("A" & nCol1 & "" & ncol2)

    oppure tramite gli indici numerici....

    activeWorkbook.sheets(1).cells(x,y)
    dove x e y te li crei e ci lavori sopra........

    chiaro.....?????? spero di Si

    ciao Maxximo
    Ci sono solo 10 tipi di persone al mondo, chi conosce il binario e chi no.

    Disapprovo quello che dici, ma difenderò fino alla morte il tuo diritto a dirlo.

    Tanta bella giovinezza che si fugge tuttavia, chi vuol essere lieto sia, del doman non v'e' certezza.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    158
    oggi avevo poco da fare e in mezz'oretta ti ho tirato fuori questo obrobrio...avevo cominciato a farlo con tutti i crismi, ma siccome non mi capita spesso di programmare macro in excel e siccome l'help di office è simpatico come un dito in culo.....

    codice:
    Sub Macro1()
    
        Dim tmpPosSx, tmpPosDx, PrimaRigaSelezione, UltimaRigaSelezione, _
            PrimaColonnaSelezione, UltimacClonnaSelezione, ColonneInSelezione As Integer
        Dim strFormatoStupido, tmpString As String
        
        
        strFormatoStupido = ActiveWindow.RangeSelection.Address(False, False, xlR1C1)
        tmpPosSx = InStr(1, strFormatoStupido, "[")
        tmpPosDx = InStr(1, strFormatoStupido, "]")
        PrimaRigaSelezione = CInt(Mid(strFormatoStupido, tmpPosSx + 1, (tmpPosDx - tmpPosSx) - 1) + 1)
        strFormatoStupido = Right(strFormatoStupido, Len(strFormatoStupido) - tmpPosDx)
        tmpPosSx = InStr(1, strFormatoStupido, "[")
        tmpPosDx = InStr(1, strFormatoStupido, "]")
        PrimaColonnaSelezione = CInt(Mid(strFormatoStupido, tmpPosSx + 1, (tmpPosDx - tmpPosSx) - 1) + 1)
        strFormatoStupido = Right(strFormatoStupido, Len(strFormatoStupido) - tmpPosDx)
        tmpPosSx = InStr(1, strFormatoStupido, "[")
        tmpPosDx = InStr(1, strFormatoStupido, "]")
        UltimaRigaSelezione = CInt(Mid(strFormatoStupido, tmpPosSx + 1, (tmpPosDx - tmpPosSx) - 1) + 1)
        strFormatoStupido = Right(strFormatoStupido, Len(strFormatoStupido) - tmpPosDx)
        tmpPosSx = InStr(1, strFormatoStupido, "[")
        tmpPosDx = InStr(1, strFormatoStupido, "]")
        UltimacClonnaSelezione = CInt(Mid(strFormatoStupido, tmpPosSx + 1, (tmpPosDx - tmpPosSx) - 1) + 1)
            
        ColonneInSelezione = UltimacClonnaSelezione - PrimaColonnaSelezione + 1
        
        For i = PrimaRigaSelezione To UltimaRigaSelezione Step 1
            If i Mod 2 = 0 Then
                Range(Cells(i, PrimaColonnaSelezione), _
                      Cells(i, PrimaColonnaSelezione + ColonneInSelezione)).Select
                Selection.Copy
                Range(Cells(i - 1, UltimacClonnaSelezione + 1), _
                      Cells(i - 1, UltimacClonnaSelezione + ColonneInSelezione)).Select
                ActiveSheet.Paste
                Range(Cells(i, PrimaColonnaSelezione), _
                      Cells(i, PrimaColonnaSelezione + ColonneInSelezione)).Select
                'Selection.EntireRow.Delete
            End If
        Next i
    End Sub

    NOTA BENE:
    Questo fa tutto tranne eliminare le righe pari.
    per fare questo bisogna che ti dichiari un'array dinamico e lo aggiorni ad ogni ciclo con l'indice di riga che vuoi eliminare.
    Poi ti scorri l'array con un'altro for(che priogrammerai tu tutto solo ) ed usi la righina che ho lasciato commentata per eliminare una riga intera dal foglio attivo...
    Prima di eliminare la riga devi selezionare almeno una cella di quella riga( proprio una a caso) sennò succedono dei casini.

    Ah, non ho messo nessuna gestione degli errori, se esegui la macro con solo una cella selezionata va tutto a meretrici.

    bye.
    DISCLAIMER
    quello che sta scritto qui sopra è dettato esclusivamente dall'intuito, non da specifiche conoscenze tecniche. Usate queste informazioni a vostro rischio e pericolo (anhe sui server di produzione

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2006
    Messaggi
    35
    Grazie mille! Dopo provo a guardarci dietro..
    grazie ancora e buona giornata

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.