JavascriptProva

venerdì 26 febbraio 2016

Approccio VBA a un documento

Veniamo al VBA...

Devo elaborare un file di risposte di pazienti a un'intervista.
Lo avevo già fatto, ma dal momento che rimuovo attivamente memorie connesse a questa attività che detesto, rimuovo anche i codici.
Così è meglio che metta tutto per iscritto.
Mi rianalizzo un po' il codice.
Sub main()
For n = 1 To 100
Sheets("Risposte").Cells(n, 1).Formula = n
Sheets("Risposte").Cells(n, 2).Formula = Sheets("Questionario").Cells(1, n).Formula
Next n
End Sub
In italiano, significa che nel foglio chiamato "Risposte", su 100 righe nella prima colonna mettiamo il numero di riga, mentre nella seconda mettiamo il contenuto delle celle su 100 colonne progressive della prima riga del foglio "Questionario".

Creo un nuovo foglio chiamato "Risposte" per vedere come funziona senza peraltro combinare danni.
Ecco applicata la macro:

Foglio "Questionario":


Foglio "Risposte":


Era come ho previsto io.

Ma ora sono a un punto morto: come ho fatto a ottenere i SI NO? Da quali dati?

Cerchiamo di decifrare altri files...

Ho dimenticato tutto.
Riprendo il file originale e me lo ristudio con calma...



Ecco, qui sono presentati in modo molto confuso. L'unico riferimento è il numero che sta sulla colonna Q.
Dal momento che devo fare calcoli mi conviene avere le colonne in formato numerico.

Fatto! Strumenti->Opzioni->Generale->Stile di riferimento R1C1.

Fatto questo, mi vorrei separare le varie interviste. Il punto di riferimento è il numero nella colonna Q, che ora diventa colonna 17! (E infatti contando sulle ditine ho verificato che la Q è la 17esima lettera dell'alfabeto inglese... GUH! GUH!)

Separarle potrebbe significare mettere delle righe vuote per separare ciascuna intervista dall'altra.
O anche, più elegantemente e funzionalmente, ricopiare ognuna su un foglio separato!
Studierei una macro in tal senso...

Contare le righe che presentano il numero 1 sulla colonna 17...
Sub suddividi()
Dim contatore As Integer
contatore = 0
Dim linea As Integer
linea = 174

Do Until Cells(linea, 17).Formula <> 3
linea = linea + 1
contatore = contatore + 1
Loop
Debug.Print linea & " " & contatore
End Sub
Cambiando il numero di linea iniziale e il numero da ricercare nella colonna 17 ottengo sempre lo stesso numero.
88 86
174 86
260 86

Ora, su questa base, costruisco un codice in cui copio ogni singolo troncone di 86 linee su un nuovo foglio di Excel.
Separo, praticamente, le interviste, ognuna su un nuovo foglio---

Nessun commento:

Posta un commento