VBA PER SOTTRAZIONE



  • mancini6864
    di mancini6864 data: 24/04/2015 11:21:14

    Buongiorno a tutti

    dovrei risolvere un problema e non so come fare quindi spero che mi potete aiutare..

    ho molti file contenti qualche migliaia di righe dove sono presenti nella colonna H dei numeri i quali li vorrei sottrarre con un numero della stessa colonna che pero da un file all'altro cambia sia di posizione che di valore e lo vorrei rintracciare tramite una parola che si trova nella colonna A che non è mai variabile ES:

    A B C D E F G H
    casa " " " " " " 17.95
    auto " " " " " " 17
    borsa " " " " " " 16.95
    dut1 " " " " " " 18.95

    la parola che non cambia mai è dut1

    ho fatto varie prove per costruire una macro ma con risultati deludenti spero nel vostro aiuto

    Grazie





  • di Mister_x (utente non iscritto) data: 24/04/2015 14:35:10

    ciao

    dovresti postare un file per vedere la struttura dei duoi dati e capire con degli esempi inseriti cosa vuoi ottenere

    ciao





  • di mancini6864 data: 24/04/2015 15:35:20

    Ciao e grazie per l'interesse

    ho inserito un allegato contenente un esempio dei file che devo modificare.

    prima cosa devo trovare la parola DUT1 che si trova nella colonna A .
    una volta trovata la parola devo andare a prendere il valore che si trova nella cella H in questo caso 17.475 e sottrarre questo valore a tutta la colonna H

    stessa operazione da fare sulla colonna I

    la parola DUT1 non la trovo mai alla stessa riga ma sempre nella stessa colonna.

    grazie,



  • di MIster_x (utente non iscritto) data: 24/04/2015 16:11:01

    ciao

    la sub() e' questa da inderire nel foglio di utilizzo e non in un modulo
    comunque io per controllo ho sritto il valore di H in K e di I in L
    se il tuo scopo e ' proprio di sottrarre il valore di K o di I basta che sostituisci H con K e L con I
    Riallogo file con sub() inserita in un foglio nuovo
    ciao
     
    Option Explicit
    Sub SottraiDUT1()
    Dim Nriga As Long, i As Long
    Dim DUT1valH As Single, Dut1valI As Single
    Nriga = Cells(Rows.Count, "A").End(xlUp).Row
    For i = 1 To Nriga
      If Trim(Cells(i, "A")) = "DUT1" Then
        DUT1valH = Cells(i, "H")
        Dut1valI = Cells(i, "I")
        Exit For
      End If
    Next i
    For i = 1 To Nriga
      Cells(i, "K") = Cells(i, "H") - DUT1valH  '''k - H
      Cells(i, "L") = Cells(i, "I") - Dut1valI  '''L - I
    Next i
    End Sub
    






  • di mancini6864 data: 24/04/2015 16:36:35

    l' ho provata e sembra funzionare proprio come mi aspettavo.

    l'unica cosa se mi puoi ancora aiutare è che i numeri che mi trovo in H dovrebbero essere in decimali invece li trovo in migliaia

    mi spiego meglio siccome il file di partenza è un txt che poi porto in Excel per lavorarci.

    i file della colonna H e I dovrebbero essere tipo :
    A H I
    c10 17.575 1.415
    diciassette... uno...
    invece in realtà mi trovo 17575 1415
    diciassettemila millequattrocento
    come posso risolvere

    grazie



  • di Mister_x (utente non iscritto) data: 24/04/2015 18:40:38

    ciao

    solito problema di quando si importa dei valori da un altro tipo di file dove al posto della virgola mettono il punto
    comunque in base ai tuoi dati cambia la sub() di prima con questa
    PS tutta la colonna la devi formattare a valore con 3 decimali

    riallego lo stesso file pero' con la modifica

    ciao
     
    Option Explicit
    Sub SottraiDUT1()
    Dim Nriga As Long, i As Long
    Dim DUT1valH As Single, Dut1valI As Single
    Nriga = Cells(Rows.Count, "A").End(xlUp).Row
    For i = 1 To Nriga
      If Trim(Cells(i, "A")) = "DUT1" Then
        DUT1valH = Cells(i, "H")
        Dut1valI = Cells(i, "I")
        Exit For
      End If
    Next i
    For i = 1 To Nriga
      If Fix(Cells(i, "H")) <> 0 Then
      Cells(i, "K") = (Cells(i, "H") - DUT1valH) / 1000 '''k - H
        Else
      Cells(i, "K") = ((Cells(i, "H") * 1000) - DUT1valH) / 1000 '''k - H
      End If
      If Fix(Cells(i, "I")) <> 0 Then
      Cells(i, "L") = (Cells(i, "I") - Dut1valI) / 1000 '''L - I
        Else
      Cells(i, "L") = ((Cells(i, "I") * 1000) - Dut1valI) / 1000 '''L - I
      End If
    Next i
    End Sub
    






  • di mancini6864 data: 27/04/2015 07:24:00

    grazie ancora

    dovrei risolvere ancora un problema devo effettuare la spessa operazione nel foglio2 ma il nome dut1 con i rispettivi numeri da sottrarre li trovo nel foglio1.

    ancora grazie



  • di Mister_x (utente non iscritto) data: 27/04/2015 09:39:35

    ciao

    come stessa operazione intendi che gli stessi dati, e la stessa struttura, tu li hai in foglio2 con la sola variante che DUT1 lo trovi solamente in colonna A:A del foglio1, se e' questo che intendi fare fai sapere
    PS scrivi anche se il foglio1 e' nominato Foglio1 o a un altro nome, tipo Pippo o Pluto, perche' col VBA e' molto importante definire questi
    la modifica insestessa della Sub() che tu gia' ai provato e' semplice da fare

    ciao





  • di mancini6864 data: 27/04/2015 09:48:26

    si hai capito proprio quello che intendevo la struttura è la stessa ma il nome dut1 lo trovo solo nel foglio1

    grazie



  • di mancini6864 data: 27/04/2015 09:49:42

    si il foglio2 si chiama foglio2



  • di Mister_x (utente non iscritto) data: 27/04/2015 09:53:25

    ciao

    da inserire nel foglio2
    Ps attenzione che devi sempre modificare i dati della colonna di destinazione come la sub() di prima

    ciao
     
    Option Explicit
    Sub SottraiFoglio2()
    Dim Nriga As Long, i As Long
    Dim DUT1valH As Single, Dut1valI As Single
    Dim VarA1 As Variant
    Nriga = Sheets("Foglio1").Cells(Rows.Count, "A").End(xlUp).Row
    For i = 1 To Nriga
    VarA1 = Sheets("Foglio1").Cells(i, "A")
      If Trim(VarA1) = "DUT1" Then
        DUT1valH = Sheets("Foglio1").Cells(i, "H")
        Dut1valI = Sheets("Foglio1").Cells(i, "I")
        Exit For
      End If
    Next i
    For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
      If Fix(Cells(i, "H")) <> 0 Then
      Cells(i, "K") = (Cells(i, "H") - DUT1valH) / 1000 '''k - H
        Else
      Cells(i, "K") = ((Cells(i, "H") * 1000) - DUT1valH) / 1000 '''k - H
      End If
      If Fix(Cells(i, "I")) <> 0 Then
      Cells(i, "L") = (Cells(i, "I") - Dut1valI) / 1000 '''L - I
        Else
      Cells(i, "L") = ((Cells(i, "I") * 1000) - Dut1valI) / 1000 '''L - I
      End If
    Next i
    End Sub