Come ricercare lintestazione delle colonne
Hai un problema con Excel? 
di alfrimpa data: 13/11/2017 13:50:09
Ciao Mau
Allega un file di esempio con i dati, spiegazione e mostrando il risultato che vuoi ottenere.
Alfredo
di Mau (utente non iscritto) data: 13/11/2017 14:29:04
ho allegato un pezzo del foglio di lavoro su cui devo far funzionare la mia macro.
Utilizzando il "trova" e cercando la parola "karité"; il risultato è:
cella M2 Valore "Oleine di karité"
cella N5 Valore "Burro di karité"
cella N6 Valore "Burro di karité Bio"
cella N7 Valore "Burro di karité Extra"
Ciò che vorrei io, è inserire in un campo di ricerca il valore "karitè" e ottenere come risultato:
Oleine di karité - MATERIE PRIME - Oli vegetali
Burro di karité - MATERIE PRIME - Burri
Burro di karité Bio - MATERIE PRIME - Burri
Burro di karité Extra - MATERIE PRIME - Burri
Il tutto nella maniera più fruibile possibile, una msgbox sarebbe perfetta
di alfrimpa data: 13/11/2017 16:05:21
Ciao Mau
Ti ho riallegato il file (mau_2 gli altri sono sbagliati) con le macro che vedi sotto ed ho utilizzato un foglio di appoggio ed una userform per visualizzare i dati.
Tieni però presente che il funzionamento della macro è strettamente connesso alla assoluta identità della stringa inserita per la ricerca ed i dati presenti sul foglio.
La macro da eseguire è "prova".
Prova un po' e fai sapere.
Alfredo
Sub prova()
Dim ur As Long
Dim lr As Long
Dim PROD As String
lr = Sheets("INGREDIENTI").Cells(Rows.Count, 1).End(xlUp).Row
Dim rng As Range
Dim cel As Range
Set rng = Sheets("INGREDIENTI").Range("A2:An" & lr)
PROD = InputBox("Inserire il prodotto")
Application.ScreenUpdating = False
Sheets("Foglio1").Cells.ClearContents
For Each cel In rng
ur = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row
If InStr(1, cel.Value, PROD) Then
Sheets("Foglio1").Cells(ur + 1, 1).Value = cel.Value & "- " & Mid(Cells(1, cel.Column), 1, Application.WorksheetFunction.Find("-", Cells(1, cel.Column))) & Mid(Cells(1, cel.Column), Application.WorksheetFunction.Find("-", Cells(1, cel.Column)), 50)
End If
Next cel
UserForm1.Show
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_Initialize()
Dim I As Integer
Dim ur As Long
Application.ScreenUpdating = False
ur = Sheets("Foglio1").Cells(Rows.Count, 1).End(xlUp).Row
For I = 2 To ur
Me.ListBox1.AddItem Sheets("Foglio1").Range("a" & I).Value
Next I
Application.ScreenUpdating = True
End Sub
|
di Mau (utente non iscritto) data: 14/11/2017 09:50:11
Fantastico! E' quello che stavo cercando di fare, però necessita ancora di un paio di modifiche se possibile.
L'inserimento non deve essere necessariamente identico, anche perché in alcune materie prime ci sono caratteri speciali che non posso ricordare a memoria. Ho notato che anche se cambia il maiuscolo e il minuscolo non trova la stringa cercata...dici che si può fare?
di Mau (utente non iscritto) data: 14/11/2017 10:03:56
la porzione di testo l'ho risolta eliminando il Trim dalla funzione InStr, mentre il formato maiuscolo e minuscolo l'ho risolto con LCase. In pratica l'ho fatta diventare così:
If InStr(1, LCase(cel.Value), LCase(PROD)) Then
funziona perfettamente!
sei stato davvero un grande, grazie infinite
di alfrimpa data: 14/11/2017 10:39:31
Avresti potuto usare anche l'istruziono
Option Compare Text
In testa al modulo ed evitavi l'LCase.
Alfredo
Vuoi Approfondire?