Pagina 1 di 1

[Risolto] trova e sostituisci valori

Inviato: venerdì 5 settembre 2014, 14:07
da b1313
Ciao!
ho una colonna che contiene valori separati da virgola.
vorrei che nella colonna a fianco mi uscissero i valori sostituiti (come esempio colonna RISULTATO) seguendo una legenda creata nel Foglio2.
qualcuno mi può aiutare con una macro?
allego un esempio del file.
grazie

Re: trova e sostituisci valori

Inviato: venerdì 5 settembre 2014, 16:21
da Gaetanopr
Bisogna definire l'area del secondo foglio "A2:B11" con il nome "TABELLA"

Codice: Seleziona tutto

Sub Main
Dim Riscontri()
Dim svc As Object
doc=thiscomponent
Sh1 =  Doc.Sheets(0)
Sh2 =  Doc.Sheets(1)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow             
svc = createUnoService("com.sun.star.sheet.FunctionAccess")
Tabella = Sh2.getCellRangeByName("TABELLA")  

  For i = 1 to LastRow   
    x = 0 
    oCell1 = Sh1.getCellByPosition(0, i)
    Array1 = Split(oCell1.String,",")
    For n = Lbound(Array1) To Ubound(Array1)
        vlook = svc.callFunction("VLOOKUP",Array(Array1(n), Tabella, 2, False))
        If IsEmpty(vlook) = False Then
           Redim Preserve Riscontri(0 to x)
           Riscontri(x) = vlook 
           x = x + 1
        End If     
    Next n
    If x > 0 Then 
       Sh1.getCellByPosition(2, i).String = Join( Riscontri(), "," )
    Else 
       Sh1.getCellByPosition(2, i).String = ""
    End if   
  Next i          
   

End Sub

Re: trova e sostituisci valori

Inviato: lunedì 8 settembre 2014, 9:31
da b1313
Ciao!
grazie per l'aiuto.
Ho provato la macro aggiungendo dei valori nel foglio TABELLA, non so se sbaglio io, ma salta i valori dopo il 10, come vedi nel file allegato.

grazie
Gaetanopr ha scritto:Bisogna definire l'area del secondo foglio "A2:B11" con il nome "TABELLA"

Codice: Seleziona tutto

Sub Main
Dim Riscontri()
Dim svc As Object
doc=thiscomponent
Sh1 =  Doc.Sheets(0)
Sh2 =  Doc.Sheets(1)
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow             
svc = createUnoService("com.sun.star.sheet.FunctionAccess")
Tabella = Sh2.getCellRangeByName("TABELLA")  

  For i = 1 to LastRow   
    x = 0 
    oCell1 = Sh1.getCellByPosition(0, i)
    Array1 = Split(oCell1.String,",")
    For n = Lbound(Array1) To Ubound(Array1)
        vlook = svc.callFunction("VLOOKUP",Array(Array1(n), Tabella, 2, False))
        If IsEmpty(vlook) = False Then
           Redim Preserve Riscontri(0 to x)
           Riscontri(x) = vlook 
           x = x + 1
        End If     
    Next n
    If x > 0 Then 
       Sh1.getCellByPosition(2, i).String = Join( Riscontri(), "," )
    Else 
       Sh1.getCellByPosition(2, i).String = ""
    End if   
  Next i          
   

End Sub

Re: trova e sostituisci valori

Inviato: lunedì 8 settembre 2014, 9:36
da Gaetanopr
Gaetanopr ha scritto:Bisogna definire l'area del secondo foglio "A2:B11" con il nome "TABELLA"
L'area che avevo definito arriva alla cella B11 se allunghi la tabella devi pure modificare l'area di questa andando su Inserisci - Nomi - Definisci - selezioni TABELLA e modifichi il range

Altrimenti cambia la macro in questo modo, così non c'è bisogno di definire il nome "TABELLA"

Codice: Seleziona tutto

Sub Main
Dim Riscontri()
Dim svc As Object
doc=thiscomponent
Sh1 =  Doc.Sheets.getByName("Foglio1")
Sh2 =  Doc.Sheets.getByName("TABELLA")
c = Sh1.createCursor
c.gotoEndOfUsedArea(false)
LastRow = c.RangeAddress.EndRow

a = Sh2.createCursor
a.gotoEndOfUsedArea(false)
LastRow2 = a.RangeAddress.EndRow
               
svc = createUnoService("com.sun.star.sheet.FunctionAccess")
Tabella = Sh2.getCellRangeByName("A2:B" & LastRow2+1)  

  For i = 1 to LastRow   
    x = 0 
    oCell1 = Sh1.getCellByPosition(0, i)
    Array1 = Split(oCell1.String,",")
    For n = Lbound(Array1) To Ubound(Array1)
        vlook = svc.callFunction("VLOOKUP",Array(Array1(n), Tabella, 2, False))
        If IsEmpty(vlook) = False Then
           Redim Preserve Riscontri(0 to x)
           Riscontri(x) = vlook 
           x = x + 1
        End If     
    Next n
    If x > 0 Then 
       Sh1.getCellByPosition(1, i).String = Join( Riscontri(), "," )
    Else 
       Sh1.getCellByPosition(1, i).String = ""
    End if   
  Next i          
   

End Sub

Re: trova e sostituisci valori

Inviato: lunedì 8 settembre 2014, 12:18
da b1313
perfetto grazie!
 Editato: Eliminata citazione, perchè inutile (moderatore charlie)