1) unire valori - 2) trovare corrispondenze

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Pagine: [1], 2, 3
pasquale@Excel
00martedì 9 agosto 2016 07:34
Buon giorno, avrei bisogno di aiuto con Excel.
ho un file Excel (2010) con due Fogli (Testo e Dizionario).
Il foglio testo è formato da 670130 righe; il Foglio Dizionario da 39225 righe.
Il foglio testo ha diverse colonne (da A a F, la Colonna E è vuota);
Il Foglio Dizionario ha 2 colonne: A (con le Parole - alcune sono duplicate anche diverse volte) e B (con le corrispondenti definizioni).

Io avrei bisogno:
Preliminarmente
1) Nel Foglio Dizionario vorrei unificare i valori duplicati di Colonna A combinando tra loro le differenti Definizioni presenti in Colonna B (tra una definizione e l'altra vorrei mettere il segno ||. (Le definizioni unificate vanno sulla stessa riga).
Una volta sistemato il Dizionario:
1) trovare le Parole di Colonna C, presenti nel Foglio Testo, nella Colonna A del Foglio Dizionario;
2) e una volta trovata nella Colonna A del Foglio Dizionario la Parola eguale (non importa se il carattere è maiuscolo o minuscolo), prendere la Definizione (il testo) che è in Colonna B (del Foglio Dizionario) e riportarla nella Colonna E del Foglio Testo (nella riga corrispondente a quella della parola cercata di Colonna C).

Grazie per l'aiuto
Pasquale
patel45
00martedì 9 agosto 2016 09:20
sei certo di aver inviato il file giusto ? in questo formato mi sembra difficile capire quello che vuoi fare
dodo47
00martedì 9 agosto 2016 09:56
Ciao
giusta osservazione di Patel (saluti). Se hai il file corretto è molto meglio (comunque si potrebbe fare).
Se il file è così come l'allegato che hai sottoposto, per prima cosa andrebbe "ripulito" dai tag.

Un altro cosa: (è passato qualche "giorno" dai miei banchi di scuola [SM=g27813] ...ma) nel foglio testo, le descrizioni di colonna D si riferiscono alla parola in B e non in C. (ES: D43 "Terza persona singolare imperfetto...." si riferisce a B43 "esset" e non a C43 "Sum".
E così per tutte le altre.
La struttura risultante dovrà conservare il formato attuale o va variata?

Infine eliminerei la seconda parte della col B, da < A HREF in poi in quanto la parola contenuta dopo tale tag è quella di col. C.

Ma sono tutte supposizioni.

Facci sapere.

saluti
pasquale@Excel
00martedì 9 agosto 2016 12:04
Grazie per le risposte. I tag HTML non posso rimuoverli perché tutto il contenuto partendo da colonna B fino a colonna F saranno inseriti in un altro programma che opera con i tag HTML i tag mi servono per il grassetto, il corsivo e a capo e per hiperlink (href).
Per quanto riguarda il Testo in colonna B c'è la parola latina e l'hiperlink esterno ad un dizionario formato da files html. quindi in colonna C la radice da trovare nel foglio Dizionario colonna A e definizione in colonna B.
Il file testo può essere anche ordinato diversamente (in colonna A ho la numerazione progressiva per riposizionare tutto il testo).
L'unica attenzione e che le definizioni delle parole duplicate del dizionario vengano unificate fra loro ponendo per dividere le varie definizioni il segno // (sbarre diritte) o altro segno equipollente.
pasquale@Excel
00martedì 9 agosto 2016 12:14
Nel senso che in colonna C vi è il Lemma (della Parola di colonna B) che si trova sfogliando un dizionario anche cartaceo, mentre in colonna D vi è l'analisi grammaticale della Parola di colonna B.
dodo47
00martedì 9 agosto 2016 13:09
ok, è più semplice (spero)

prova l'allegato

saluti

Edit: provalo così com'è prima di trasferirlo sul tuo file. Credo che, considerati i tempi con pochi dati, il programma ci metterà un bel po'. La causa principale è l'accorpamento delle descrizioni del foglio Dizionario e la relativa cancellazione delle righe accorpate.

Ho sostituito l'allegato causa una mia interpretazione errata.
pasquale@Excel
00martedì 9 agosto 2016 18:48
Graziiiissime, sembra che faccia quello che deve alla perfezione.Più tardi la provo su dati massivi e se ho problemi ti faccio sapere.
Grazie di nuovo [SM=x423017] [SM=x423017]
dodo47
00martedì 9 agosto 2016 19:09
Ciao
bene. Potresti inserire un contatore (anche se rallenta ancora un po') per vedere le righe in elaborazione ed avere certezza che la macro non si blocca (non dovrebbe, ma il condizionale è d'obbligo)

saluti
pasquale@Excel
00domenica 14 agosto 2016 09:05
Ciao, la macro funziona benissimo.
Si ferma e restituisce errore 1004.. solo quando nel dizionario c'è qualche definizione molto lunga, finora mi è capitato su tre parole: a, ago, e cum. Bypasso il problema copiando a mano i dati quando incontro queste parole.

Avrei bisogno, se possibile, di questi cambiamenti:
1) Mantenere la formattazione di partenza delle celle sia nel dizionario (quando unisce le parole duplicate che si ripetono nelle celle) sia quando copia le definizioni dal foglio Dizionario nelle celle E del Foglio testo;
2) Ok per provare anche il contatore.

grazie anticipate
dodo47
00domenica 14 agosto 2016 10:34
Ciao
per l'errore 1004 è stata una mia dimenticanza. Vedi se va bene con queste variazioni (Nota: il contatore lo vedi nella cella A1 del foglio testo.
Option Explicit

Sub StartProc()
Dim WkDiz As Worksheet, WkTest As Worksheet, urD As Long, urT As Long, r As Integer
Dim i As Long, c As Object, k As Long, k1 As Long, strTmp As String
Dim ToFind As String
'Application.ScreenUpdating = False
On Error GoTo xit
Set WkDiz = Worksheets("Dizionario")
Set WkTest = Worksheets("Testo")
urD = WkDiz.Range("A" & Rows.Count).End(xlUp).Row
urT = WkTest.Range("A" & Rows.Count).End(xlUp).Row

'sort Dizionario
With WkDiz.Sort
    .SortFields.Clear
    .SetRange Range("A1:B" & urD)
    .SortFields.Add Key:=Range("A1") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

k1 = 0 'contatore
'unisce descrizioni dizionario
With WkDiz
    For i = urD To 2 Step -1
        Cells(1, 1) = k1
        k1 = k1 + 1
        If UCase(.Cells(i, 1)) = UCase(.Cells(i - 1, 1)) Then
        .Cells(i - 1, 2) = .Cells(i - 1, 2) & "||" & .Cells(i, 2)
        .Cells(i, 1).EntireRow.Delete
        End If
    Next i
End With

'riporta in Testo descrizioni Dizionario
Worksheets("Testo").Select
r = 2
k = 0
strTmp = ""
For i = r To urT
    Cells(1, 1) = k1
    k1 = k1 + 1
    If Cells(i, 3) <> "" Then
        ToFind = Cells(i, 3)
        With WkDiz.Range("A:A")
            Set c = .Find(ToFind, LookIn:=xlValues, lookat:=xlWhole)
            If Not c Is Nothing Then
                strTmp = strTmp & .Cells(c.Row, 2)
                k = k + 1
            End If
        End With
    End If
    If strTmp <> "" Then Cells(i, 5) = strTmp
    strTmp = ""
Next i
Application.ScreenUpdating = True
MsgBox "Fine elaborazione. Trovati: " & k
cells(1,1)=""
Exit Sub
xit:
MsgBox Err.Number & " - " & Err.Description
Application.ScreenUpdating = True
cells(1,1)=""
End Sub


Per quanto riguarda i font non capisco: il foglio testo ha courier new 10,5 e, anche dopo l'elaborazione, resta tale in col E, lo stesso per il foglio Dizionario: è Times New Roman 12 e così resta.

saluti
pasquale@Excel
00domenica 14 agosto 2016 23:20
Grazie Domenico funziona benissimo anche questa.

A rileggerci
pasquale@Excel
00venerdì 19 agosto 2016 10:26
Bibbia Vulgata per ricerche grammaticali
Biblia Sacra Vulgata con tag grammaticali
Non so se aprire una Nuova Discussione, intanto la inserisco qui. Poi qualcuno mi consiglierà se aprire una nuova Discussione.
Ho copiato tutte le definizioni del Dizionario ed ora desidererei un grande aiuto per la fase 2 a cui forse seguirà una fase 3.

Lo scopo è predisporre una Bibbia Latina sulla quale effettuare Ricerche morfologiche complesse, Advanced Search Engine, ossia vedere in quanti e quali versetti ad un nome o altra figura grammaticale segue una determinata forma verbale, o ad un aggettivo o altro, per vedere come è strutturato il testo biblico. Interessante sarebbe poter porre anche delle condizioni come trovare una forma grammaticale nel centro di un versetto o dopo/o prima un numero determinato di parole (ma questo non riesco a spiegarlo bene).
In rete non ho trovato niente di simile.
Se potessi avere un aiuto sarei veramente contento.
Ho predisposto un UserForm che più o meno ha le opzioni che allo stato potrebbero bastare.
Allego un file di esempio con un foglio di istruzioni.

Grazie anticipate
Pasquale
PS. (Mi è venuto il dubbio che l'Userform, che ho inserito nel file allegato, non è la soluzione più indicata e che bisognerebbe prevedere opzioni più complesse).
19-08-2016 ore 10:12 sostituito il file di esempio
dodo47
00venerdì 19 agosto 2016 19:20
Ciao
prova a riallegare il file perché non va bene

saluti

(da come ho capito cerca di essere esauriente nelle spiegazioni in quanto la vedo difficile uscirne fuori)
pasquale@Excel
00venerdì 19 agosto 2016 21:33
Ciao Domenico, riallego il file. Ho inserito nel foglio 4 del file delle istruzioni che mi sembrano dettagliate.
Credo che ti sia accorto che sono a digiuno di Excel, da tanti anni provo ma non mi entra in testa, un "veterano del forum" ne sa qualcosa.
Se ti viene in mente, oltre a qquelle da me indicate, qualche altro tipo di ricerca di combinazioni va benissimo.

Grazie

Pasquale
dodo47
00sabato 20 agosto 2016 10:35
Ciao
è un po' complesso quanto chiedi, ci proviamo ma non garantisco.
Intanto un po' di domande:

1)posso allineare il Progressivo e il Book alla prima parola di ciascun versetto? Quindi per esempio 1 gen 1:1 in

2) servirebbe una col d'appoggio: utilizzerei GA del foglio Testo
e un foglio che chiamerò Work.

3) words e lemma sono esclusi dalle ricerche?

4) le sequenze solo sulla colonna PoS ?

5) in allegato trovi un facsimile con due tipi di filtro applicati: è corretto?

Questo per il momento

saluti
pasquale@Excel
00sabato 20 agosto 2016 11:35
Grazie Domenico,

Rispondo alle tue domande:
1) La Colonna Progressivo mi serviva solo per ricostruire l'esatta sequenza del testo, quindi se non serve potrebbe anche essere eliminata, quindi nessun problema ad allineare il progressivo.
2) Ok per la Colonna di appoggio GA;
3) Pensandoci bene words e lemma potrebbero entrare nella ricerca;
4) Credo che per le sequenze possa bastare solo su PoS, con un dubbio: mettendo solo su PoS se uno cerca due "Noun" nello stesso versetto (o nell'intervallo selezionato) al Nominativo (o altro caso), oppure due verbi consecutivi al tempo presente attivo può cercarli?
5) Il file di esempio mi pare che risponda alle aspettative.

Aggiunta: potrebbe anche essere inserito una riga sotto la fine della parte testuale (nel senso in Colonna A se è la prima Colonna o altra) un riassunto numerico che specifichi quante volte si ripete la condizione posta (sequenza cercata)?
Nell'esempio frequenze dove ci sono 2 versetti che soddisfano la condizione iniziale potrebbe essere: All Part of Speech agree: 2 times in 2 verses (per intendere che soddisfano le condizioni poste 2 volte (times) in 2 versetti (verses).
Se uno cerca una parola specifica "words" (per esempio "caelum": caelum : 1 time in 1 verse (per intendere che soddisfano le condizioni poste 1 volta (time) in 1 versetto (verse).

Grazie
dodo47
00domenica 21 agosto 2016 12:40
Ciao Pasquale
...pretendi un po' troppo senza un minimo coinvolgimento da parte tua.
Questo è un forum, dove si presume che chi rivolge domande abbia una certa conoscenza del prodotto da utilizzare (excel in questo caso) e sottoponga qualche test anche non funzionante per correggerlo insieme.
Altrimenti diventa un lavoro da softer-house.

Vedrò se potrò far qualcosa.

saluti
pasquale@Excel
00domenica 21 agosto 2016 14:11
[SM=g27811] Domenico, grazie per quello che hai fatto fino ad ora.
Riconosco di essere troppo esigente per l'aiuto che si può ricevere in un forum senza conoscere la complessità delle richieste e senza contribuire alla stesura del codice o altro (sono completamente a digiuno di macro) ma non per cattiva volontà ma per scarsa conoscenza di Excel (per costruire la base dati ci lavoro da tempo e ho sudato le fatidiche sette camicie, ma questo non mi esime da impegnarmi nella stesura del codice) e se sei d'accordo archivio il progetto a tempi migliori.
A rileggerci. [SM=g27811] [SM=g27811] [SM=g27811]
Pasquale
dodo47
00domenica 21 agosto 2016 19:08
Ciao
ripeto: ...vedrò se potrò far qualcosa..."

Il fatto che tu abbia poca o nessuna dimestichezza di codice ti farà sempre essere dipendente da altri anche per piccole correzioni o modifiche che invece una conoscenza, anche di base, ti permetterebbe di effettuare in autonomia.

Quello che hai richiesto è un po' complesso d'accordo ma seguire un codice e capirne "grosso modo" il funzionamento secondo me ti sarebbe molto d'aiuto.

Ciò premesso, per il momento, allego una prova "parziale" del lavoro specificando alcuni punti:

- per l'alimentazione delle listbox della userForm "FILTRI" ho creato in un foglio di lavoro "Work" le colonne cui le stesse sono legate.
Tali colonne (una volta che il foglio Testo è completato) non sarà più necessario ricrearle. Per eseguire la macro che le alimenta nel foglio Selection c'è un pulsante.
A tali colonne sono stati assegnati dei nomi (vedi menu formule > gestione nomi) con formule particolari affinché le varie listbox non mostrino "righe" vuote.

- Una volta aperto il file, verrà visualizzato il foglio Selection.
Premi il pulsante visualizza ed appare la userform.
Per il momento, puoi fare solo quanto segue:
1) scegliendo soltanto From verse To verse e premendo il pulsante in basso: Print..... stamperà nel foglio Appoggio i versetti richiesti nel formato da te voluto. E' funzionante anche la cboBox show dictionary.

2) scegliendo From verse To verse e selezionando una o più words (oppure uno o più lemmi) dovresti ottenere il risultato sempre nel foglio Appoggio che, ad ogni nuova elaborazione viene cancellato e rifatto.

Tutte le altre listbox (da PoS a +Case) anche se selezionabili (fai i controlli) sono ininfluenti.

Nel foglio Select trovi i due pulsanti di alimentazione filtri (che sull'esempio allegato è inutile rilanciare, comunque se vuoi fallo) e di visualizzazione della userform.

saluti
pasquale@Excel
00domenica 21 agosto 2016 20:56
Grazie Domenico,
per la disponibilità.
Hai ragione io per Excel sono completamente forum..dipendente e mi spiace.
Ho effettuato il download del file che hai inserito e lo sto testando.

Mi dava un errore iniziale quando dopo aver scelto i versetti from to mi dava errore in A2 (ho cambiato "Long" con "String" ed ora funziona). Non so se questo cambiamento nella Dichiarazione (A2 da Long a String) potrebbe influire su altro??

Nella selezione From To nel risultato della Colonna appoggio il Versetto (ad es. Gen 1:1) dovrebbe venire in Colonna A e quindi a seguire (a partire da Colonna B) in orizzontale il testo del versetto in grassetto (ora il testo in grassetto viene sopra a partire da Colonna A e il versetto (ad es. Gen 1:1 viene nella riga sotto sempre in Colonna A).

Quando invece si fa una ricerca Lemma /words il Versetto (ad. es. Gen 1:1 (in Colonna A) e il testo in grassetto (a partire da Colonna B) escono corretti).


Ho provato a fare delle modifiche nel Codice (puntando sulle differenze tra i due codici e in particolare su Bold e EntireRow.Insert) visto che nel secondo caso il Versetto esce come desiderato e nel primo caso From To, non esce come desiderato ma non sono riuscito ad ottenere l'effetto desiderato.

grazie ancora.

Pasquale
dodo47
00lunedì 22 agosto 2016 08:45
Ciao
si, bene per A2 as string è stata una dichiarazione aggiunta all'ultimo momento.

Per l'allineamento in caso di from to i due metodi non sono comparabili in quanto se solo from>to stampa una sequenza, se ci aggiungi la ricerca di una parola, non è detto che i versetti che la contengono siano in sequenza.

Comunque, verso la fine della macro, dopo mAp.Select, sostituisci il ciclo for con il seguente:
    For i = 3 To urAp
        If mAp.Cells(i, 1) <> "" Then
            rTo = mAp.Cells(i, 1).Row - 1
            Do Until mAp.Cells(i, 2) = ""
                A2 = A2 & Join(Array(mAp.Cells(i, 2), Chr(2)))
                i = i + 1
            Loop
            A = mTe.Cells(i, 1).Row - 1
            mAp.Cells(rTo, 2).Resize(, A - rTo + 1) = Split(A2, Chr(2))
            mAp.Rows(rTo).Font.Bold = True
            mAp.Cells(rTo, 1) = mAp.Cells(rTo + 1, 1)
            mAp.Cells(rTo + 1, 1) = ""
        End If
        A2 = ""
        mAp.Rows(i).EntireRow.Insert
        i = i + 1
    Next i


Se hai difficoltà fammi sapere.

Dimenticavo di dirti che la col A progressivo, visto che non ti serve, l'ho utilizzata per una numerazione univoca dei versetti. Volendo si può pure nascondere.

Per quanto riguarda il discorso delle sequenzialità, devo capire bene prima di fare lavori a vuoto:

sequenza anche di words o lemma?

Altro: cerchi dal vers 1 a vers 3 la sequenza: noun-verb-noun e vuoi ottenere (scrivo solo le parole ma ovviamente rispetteremo lo schema):
vers 1:
principio
creavit
deus

vers 3:
deus
fio
lux

E' corretto quanto sopra?

Sempre per la sequenzialità: intendi presenti nel versetto/i oppure uno dopo l'altro sempre nel versetto/i?

Ancora: mi riferisco a quanto da te detto al post #16:

4) Credo che per le sequenze possa bastare solo su PoS, con un dubbio: mettendo solo su PoS se uno cerca due "Noun" nello stesso versetto (o nell'intervallo selezionato) al Nominativo (o altro caso), oppure due verbi consecutivi al tempo presente attivo può cercarli?

qui la cosa è assai complessa. Finchè selezioni più scelte in una sola delle listbox da PoS a +Case, non ci sono problemi, ma se vuoi abbinare anche qualcuna delle altre listbox (es: PoS + Voice + Mood), la selezione della scelta nelle 3 listbox relative non può essere che 1 soltanto.
es: PoS=Verb - Mood=indicative va bene
PoS=Verb/noun - Mood=indicative NON va bene

Spero di esser stato chiaro.

saluti
pasquale@Excel
00lunedì 22 agosto 2016 10:05
Ciao Domenico,
grazie per le modifiche apportate.

Cerco di rispondere alla questione sequenze:
ES: cerchi dal vers 1 a vers 3 la sequenza: noun-verb-noun e vuoi ottenere (scrivo solo le parole ma ovviamente rispetteremo lo schema):

ma se per esempio il campo voice è valorizzato con "active" otterrai la sola sequenza del vers 3.

Scusa Domenico per valorizzato intendi selezionato nella ListBox?

Se è stato selezionato nella listbox (acvtive) il risultato dovrebbe essere solo il versetto 1 che in Voice ha "active" (il vers 3 ha in Voice un "passive"), e se non fosse selezionato niente li dovrebbe riportare tutti e due i versetti).
Comunque se le selezioni (di voice, tense ecc) della ListBox diventano "ingestibili" a livello di codice o troppo complesse si potrebbe ripiegare solo sulle sequenze delle figure grammaticali principali (senza andare nei dettagli ulteriori).


Una richiesta se fattibile e se ammessa:
Quando si selezionano delle "words" o dei "lemma" nel risultato del foglio appoggio la "words o lemma" o le "words o lemma" cercate (per intenderci le colonne B e C della riga dove viene riportata la words, il lemma e l'analisi grammaticale) potrebbero la "words" e il "lemma" essere scritte in rosso per dare una evidenza visiva immediata?

grazie
Pasquale

PS. per il progressivo OK, spero che mi dirai anche come lo posso inserire nel mio file di 660.000 righe?
grazie
dodo47
00lunedì 22 agosto 2016 10:13
ciao
ti prego rileggere il precedente post : ho aggiunto qualcosa alla fine

saluti
dodo47
00lunedì 22 agosto 2016 10:17
sequenza anche di words o lemma?
pasquale@Excel
00lunedì 22 agosto 2016 10:31
Domenico,
per words e lemma non serve la sequenza.

Per l'altra questione delle sequenze:
1) Ok: presenti uno dopo l'altro nello stesso versetto.
2) Ok: Finchè selezioni più scelte in una sola delle listbox da PoS a +Case, non ci sono problemi;
3) OK: per la selezione della scelta nelle 3 listbox relative non può essere che 1 soltanto.
OK questa: es: PoS=Verb - Mood=indicative va bene
PoS=Verb/noun - Mood=indicative NON va bene

Quindi per rispondere a:
ES: cerchi dal vers 1 a vers 3 la sequenza: noun-verb-noun e vuoi ottenere (scrivo solo le parole ma ovviamente rispetteremo lo schema):
ma se per esempio il campo voice è valorizzato con "active" otterrai la sola sequenza del vers 3.

Quindi se è solo valorizzato Noun-Verb-Noun in una sola delle ListBox (PoS) il risultato è sia vers 1 che vers 3 (ho capito bene?) (nel senso che non tiene conto nè di active, passive, deponet o altro)?

Grazie
Pasquale

dodo47
00lunedì 22 agosto 2016 10:53
si, hai capito bene
fai più selezioni in unica list box = ok
fai 1 selezione in più list box = ok
se fai più selezioni in diverse list box non potrai farlo

saluti

è la correzione con colorazione x word o lemma
pasquale@Excel
00lunedì 22 agosto 2016 12:27
Scusa Domenico si blocca e mi da errore dopo aver fatto le selezioni:
Private Sub Sequences_Click()------diventa gialla
e il cursore va su End Sub

il codice errore è il seguente:
Errore di compilazione: For senza Next

Grazie ancora
Pasquale

dodo47
00lunedì 22 agosto 2016 12:39
si scusa
cancella la macro Private Sub Sequences_Click() e NON utilizzare il pulsante Sequences.

saluti
pasquale@Excel
00lunedì 22 agosto 2016 15:04
Ok,
grazie

Pasquale
dodo47
00martedì 23 agosto 2016 09:34
Ciao
se ci riesco lo evito, ma ci sono problemi se il "Book" viene copiato in tutte le relative righe del foglio Testo?

saluti
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 11:01.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com