Si potrebbe fare anche con formule, ma preferisco proporre una User Function, corrispondente a questo codice:
- Codice: Seleziona tutto
Function GimmePrezzo(ByVal Prov As String, ByRef PList As Range) As Variant
Dim mySplit, oArr(), tjTxt As String, J As Long
Dim ProPos As Long, lStr As String
'
ReDim oArr(1 To PList.Columns.Count - 1)
tjTxt = Application.WorksheetFunction.TextJoin("#", True, Application.WorksheetFunction.Index(PList, 0, 1))
ProPos = InStr(1, tjTxt, Split(Prov & " ", " ", , vbTextCompare)(0), vbTextCompare)
If ProPos > 0 Then
lStr = Left(tjTxt, ProPos)
rnum = Len(lStr) - Len(Replace(lStr, "#", "", , , vbTextCompare))
For J = 2 To PList.Columns.Count
oArr(J - 1) = PList.Cells(1 + rnum, J)
Next J
GimmePrezzo = oArr
Else
GimmePrezzo = CVErr(xlErrNA)
Exit Function
End If
End Function
Va inserito in un Modulo standard del vba, e così avrai a disposizione la funzione GimmePrezzo, che ti restituira' le colonne della riga corrispondente alla provincia; se indichi piu' province (es PE TE) verra' cercata solo la prima (quindi PE, nell'esempio)
Metti in U3 la formula
- Codice: Seleziona tutto
=GimmePrezzo(T3;Foglio2!$B$3:$H$100)
poi copia verso il basso.
Nella formula data T3 rappresenta la provincia cercata
B3:H100 rappresenta l'area in cui cercare: la prima colonna contiene le province, le colonne restanti sono i prezzi. La formula restituisce tanti valori quanto larga e' l'area dei prezzi indicata.
Avendo tu Office365 la formula riempira' automaticamente le colonne adiacenti, indipendentemente dalle intestazioni (che quindi nel foglio Prezzi devono rispecchiare esattamente quelle di Foglio2).
Prova e fai sapere...