|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, Vorrei, se possibile, mediante una macro rendere automatica un'operazione che attualmente viene fatta manualmente (con conseguenti: "che barba, che noia", ma sopra tutto con possibilità di errori e sicuramente con grande perdita di tempo). Prima di descrivere il problema posto un'immagine che aiuta molto a capire velocemente ciò che vorrei fare: Dati: - tabella 1 reale parte da riga18, da col.B a col.G - le celle selezionate da cui prelevare i dati sono in una colonna del foglio residente in altra area (variabile) Esempio: SE le celle selezionate, sempre in una sola colonna e in righe adiacenti (già chiamata "catasta"), contengono i seguenti dati (variabili di volta in volta, ma strutturati allo stesso modo: numero, apice, numero) 73'52 73'37 72'21 69'108 61'49 etc. VORREI che la macro cercasse in tabella 1, col.B i dati delle celle selezionate e partendo dalle rispettive righe in cui si trovano colorasse le celle da col.C a col.G della riga più le rispettive delle dieci righe precedenti. Nel ns. caso, nell'immagine: trova 73'52 e colora C12:G2 trova 73'37 e colora C27:G17 etc. fino all'ultimo dato dell'area (colonna) selezionata Se la cosa aiutasse a facilitare il compito, l'area da selezionare (contenente i dati) potrebbe essere col.B, da riga 7 fino al massimo di riga 15. Spero che sia una cosa fattibile.... ;)) Grazie assai e buona giornata eZio
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve non ho capito molto del problema. Devi selezionare una cella in un foglio esterno, confrontarlo con il valore della Tabella 1 e colorare 10 celle a ritroso. Non si caspisce se la selezione e singola o multipla. PS. non era già stato fatto qualcosa di simile? saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, no... la cella, o meglio le celle in colonna (stessa colonna) sono nello stesso foglio. E' selezione unica (per intenderci: senza l'uso di Ctrl), le celle sono adiacenti nella stessa colonna es. B7:B12 Negativo: ho cercato se era già stato fatto qualcosa del genere, ma non ho trovato nulla. C'era una macro per la ricerca di un valore nella tabella (previa InputBox) da evidenziare colorando la cella... ma non c'è nulla relativo a una ricerca così complessa, in fondo dall'esito diverso.... Qui selezioni l'area dei dati, lanci la macro che: 1) cerca in col.B della tabella 1 quei dati, 2) seleziona l'area da col.C a col.G della stessa riga dei dati trovati fino alle celle di col.C:G di 10 righe sopra a quella dei dati trovati, 3) colora l'area che ha appena selezionato... Grazie assai e buona giornata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve comincia da qui e vedi se ha almeno sfiorato il problema. Sub seleziona10() Set area = Range("B2", Range("B2").End(xlDown)) Set selez = Selection For Each Cl In selez For Each Itm In area If Itm.Value = Cl.Value Then riga = Itm.Row Soglia = riga - 9 If riga - 9 < 2 Then Soglia = 2 End If For N = riga To Soglia Step -1 Cells(N, 2).Offset(0, 1).Resize(1, 5).Interior.ColorIndex = 6 Next Exit For End If Next Next set area=nothing set selez=nothing End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, premesso che ho modificato l'istruzione Set area = Range("B2", Range("B2").End(xlDown)) in Set area = Range("B4", Range("B4").End(xlDown)) per una comodità di impostazione delle mie tabelle
la macro lavora colorando l'area adiacente a quel range, che nella prova che ho fatto è B4:B11, da C11 a G2... invece dovrebbe: 1) cercare nella tabella 1, col.B, ciascuno dei valori scritti nella selezione (che nella tabella 1 non sono uno di seguito all'altro, come nella selezione) 2) per ognuno di essi partendo dalla propria riga di competenza, da col.C a col.G, dovrebbe colorare salendo fino a 10 righe sopra alla riga ... dovrebbe cioè fare come nell' es. che ho illustrato sopra... Un altro es.
selezione unica cella B4 68'121 cella B5 64'32 cella B6 61'51
Macro In tabella 1 trova 68'121 in B121 ---> colora C121:G111 trova 64'32 in B198 ---> colora C198:G188 trova 61'51 in B362 ---> colora C362:G352
La macro cioè dovrebbe scansionare la col.B da riga 18 fino a fine tabella1 e dove trova i codici che sono scritti nell'area selezionata colora l'area di competenza come sopra descritto...
Grazie assai (come sempre sei un Tesoro), e buon pomeriggio eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve la macro esegue questa procedura date un numero x di celle selezionate: Cerca per ogni selezione una corrispondenza nella tabella 1 in colonna B se la trova applica un colore di sfondo alle celle di colonne C:G a partire dalla riga trovata fino a 9 righe precedenti ad essa. Mi pare che esegua quanto da te indicato nell'ultimo post, non riesco a vedere differenze tra quanto dici e quanto esegue la macro. come vedi nell'immagine, selezionata la cella AJ7, nella colonna B, trova corrispondenza in tabella 1 in cella B20 colorando le celle da C11:G20 saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, come al solito era la megacippagalattica a "cannare"... se la mia tabella 1 inizia da riga 18 devo "adattare" a riga 18 l'istruzione Set area = Range("B2", Range("B2").End(xlDown)) E altrettanto come al soltito con quattro splendide righe di istruzioni mi hai dato una mano pazzesca... Le tue creature sono di un'eleganza davvero ineguagliabile!! Grazie di tutto e buona serata, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve bene. stavolta ci abbiamo preso al primo colpo. Eppure..... ho mente di aver già soddisfatto una richiesta simile a questa, forse un altro con problematica simile. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, forse ti riferivi a questa:
Sub confronta1() Dim cl As Variant, cl2 As Variant riga = ActiveCell.Row If riga <= 10 Then MsgBox ("Numero Riga selezionata errata") Exit Sub End If n = 1 Set area = Range(Cells(riga, 8), Cells(riga, 19)) Set area2 = Range(Cells(riga - 10, 3), Cells(riga - 1, 7)) For Each cl In area RRiga = riga - 10 For Each cl2 In area2 Select Case RRiga Case riga - 10 colore = 39 Case riga - 11 colore = 40 Case riga - 12 colore = 41 Case riga - 13 colore = 42 Case riga - 14 colore = 43 Case riga - 15 colore = 44 Case riga - 16 colore = 37 Case riga - 17 colore = 46 Case riga - 18 colore = 47 Case riga - 19 colore = 48 End Select If cl.Value = cl2.Value Then cl.Interior.ColorIndex = colore cl2.Interior.ColorIndex = 3 End If If n = 5 Then RRiga = RRiga - 1 n = 1 Else n = n + 1 End If Next cl2 Next cl Set area = Nothing Set area2 = Nothing ActiveCell.Offset(-1, 0).Range("A1").Select End Sub
La macro confronta i dati di tabella 2, range su una singola riga (la riga della cella selezionata in col.B), con i dati di tabella 1, col.C:G sulla stessa riga più le 10 righe precedenti e ne evidenzia, sia in tabella 1 che in tabella 2, i codici presenti in entrambe le tabelle. In tabella 1 usa il colore Rosso, mentre in tabella 2 usa diversi colori a seconda della riga in cui si trovano in tabella 1. Insomma: un autentico capolavoro!! Più guardo le tue creature, più le ammiro... e più le adoro!!! Geniali.... Grazie infinite e buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
|
|
Guest |