Newsgroup: it.comp.macintosh
Titolo: Foglio Elettronico: fusione tra due celle

Ciao a tutti,
sto lavorando con un foglio elettronico ed avrei bisogno di unire i
valori presenti in due colonne adiacenti.
Ad esempio, ipotizzando di avere i nomi nella colonna A e i cognomi
nella colonna B, vorrei avere una sola colonna contenente nome e
cognome.
Con Excel (Test Drive 2004) non ho proprio trovato la voce che crea una
fusione tra due colonne, per cui sono passato subito a Calc (NeoOffice)
Su Calc è possibile effettuare una fusione tra due o più celle e
selezionando singole coppie di celle (su una riga) ottengo il risultato.
Il problema è che le righe sono "mille mila", per cui è improponibile il
procedimento manuale.
Se seleziono più righe e richiamo la fusione, tutto il blocco diventa
giustamente un unica cella.
Esisterà da qualche parte un comando che applichi una fusione alle celle
procedendo per righe?
In alternativa pensavo di esportare il foglio come cvs, ma i dati sono
molto diversi tra loro, e anche sfruttando grep la vedo dura... : /
-- 
Mr. Fix @ work

 procedendo per righe?
beh posso farti una semplicissima macro se mi mandi un file di esempio
f.
-- 
http://loscimmiotto.splinder.com/

 cognome.
In Excel io farei cosě: nella cella C1 scrivi
=A1 & " " & B1
Poi prendi il quadratino in basso a destra nella cella C1 e tiri giů in
modo da copiare la formula nelle celle sotto.
-- 
Ci sono 10 tipi di persone: quelle che capiscono il
sistema binario e quelle che non lo capiscono.

 modo da copiare la formula nelle celle sotto.
Anzi, non hai neanche bisogno di trascinarlo: facci un doppio click
sopra.


 
oplà confermo che funziona perfettamente anche con neooffice
-- 
http://loscimmiotto.splinder.com/

 beh posso farti una semplicissima macro se mi mandi un file di esempio
Uhm... Giusto, effettivamente ad una macro non avevo proprio pensato...
Un file di esempio č molto semplice da realizzare, basta popolare un
paio di colonne con nomi e cognomi a casaccio:
A          B
Donald     Duck
Mickey     Mouse
Scrooge    McDuck
Cip        Ciop
...
Il risultato ottimale sarebbe il seguente
A               B
Donald Duck     Altri dati
Mickey Mouse    Altri dati
...
Ma andrebbe bene anche (colonne A e B fuse)
A          B
Donald Duck
Mickey Mouse
...
Comunque, se non erro, in questo caso, eliminando la colonna B si
possono lasciare i dati "nascosti" nella colonna A
Ho provato a registrare una Macro ed a osservare il codice... Devo
ammettere che non ci capisco davvero una favazza!  : )
A logica direi che serve un'iterazione (for? while?) con un dato
incrementale riguardante le righe (le colonne sono sempre le stesse)
Fondendo due coppie di celle (due righe) ho ottenuto tutta questa roba
(due o tre cose le capisco, per il resto Nebbia in Val Padana...):
REM  *****  BASIC  *****
Sub Main
End Sub
sub UnisciCelle
rem --------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem --------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem --------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem
----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$A$1:$B$1"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args2())
rem --------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "MoveContents"
args3(0).Value = true
dispatcher.executeDispatch(document, ".uno:MergeCells", "", 0, args3())
rem --------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "ToPoint"
args4(0).Value = "$A$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args4())
rem --------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$A$2:$B$2"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())
rem --------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "MoveContents"
args6(0).Value = true
dispatcher.executeDispatch(document, ".uno:MergeCells", "", 0, args6())
end sub


 =A1 & " " & B1
Uhm, giusto, è un'altra buona idea... : )
Però... (c'è sempre un "però...  ; )
Siccome alla fine dovrei produrre un file con un numero finito e
ordinato di colonne, avrei due colonne in più.
Potrei nasconderle ma preferirei proprio elminarle, visto che il file
passerà ad altre persone e non vorrei che uscisse fuori qualche
casotto... : )
C'è un modo per trasformare il contenuto di una cella da una formula al
risultato della formula stessa?


 Uhm... Giusto, effettivamente ad una macro non avevo proprio pensato...
guarda credo che la soluzione di madprof sia molto più snella ed elegante
-- 
http://loscimmiotto.splinder.com/

 fusione tra due colonne,
Seleziona le colonna A e la colonna B cliccando sopra la barra nella
posizione in cui c'è la "A" e la "B" tenendo premuto shift ...
Poi quando si colorano fai ctrl+click ( o tasto detro ) a questo punto
quando tisi aprirà il menu scegli formato celle ---> Allineamento
In basso troverai unisci celle
... fatto? .-)
Saluti
Riddler ?

 risultato della formula stessa?
Sě: copiando solo i valori della cella. Se hai Office 2004, fai un
semplice copia-incolla e poi nel bottone che ti appare scegli "Solo
valori". Se invece hai una versione piů vecchia, dopo aver copiato
scegli "Incolla speciale..." dal menu "Modifica", e poi seleziona
"Valori".


 ... fatto? .-)
Perché non ci provi prima tu...? ;-)


 "Valori".
Giŕ che avevo NeoOFfice aperto ho preferito lui. Copiando ed incollando
(speciale) solo le stringhe, si ottiene il risultato ottimale!
Grazie mille, un cruccio in meno in background...  : )


 ... fatto? .-)
Muchacha? (Muciaccia? Dopo l'imitazione di Fiorello non ricordo piů come
si chiama 'sto tizio... : )
Ho fatto ma si presenta il problema che illustravo nel primo post, un
blocco unico di varie celle, non una fusione delle celle riga per riga
Credo che la soluzione piů rapida sia quella suggerita inizialmente dal
buon Venerandi, ovvero una macro che unisca le celle riga per riga
(cancellando poi la seconda colonna), ma anche la soluzione di MadProf
funziona a dovere, č solo leggermente piů laboriosa.


la macro l'avrei anche fatta, ma c'è un problema, credo un limite del 
dispatcherhelp che anche se io specifico che voglio unire le celle con 
spostamento, lui mi fa apparire la finestra di dialogo chiedendo se 
voglio spostarle. poi qualunque cosa premi lui fa l'unione con 
spostamento, ma comunque dovresti premete invio per ogni riga.
se ti interessa ri faccio la macro usando UNO e non il dispatcher, ma 
prima dimmi se ti serve dopo l'ultimo consiglio di madprof.
qui per la cronaca la macro:
sub unione_celle_per_fix
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
dim i
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim valore
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "By"
args1(0).Value = 1
args1(1).Name = "Sel"
args1(1).Value = true
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "MoveContents"
args2(0).Value = true
dim args3(1) as new com.sun.star.beans.PropertyValue
args3(0).Name = "By"
args3(0).Value = 1
args3(1).Name = "Sel"
args3(1).Value = false
do until valore = ""
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoRight", "", 0, args1())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:MergeCells", "", 0, args2())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args3())
valore = Thiscomponent.currentselection.string
loop
end sub
-- 
http://loscimmiotto.splinder.com/

 
Nel dubbio ... prima di postare ... ho provato .-)
Riddler ?

 Nel dubbio ... prima di postare ... ho provato .-)
E a te, col metodo descritto, non ti crea un'unica cellona con dentro
solo il contenuto della cella A1 originaria...?


 =Concat(a1,b1)
Così viene NomeCognome, anziché Nome Cognome...


 qui per la cronaca la macro:
Me la studio un po', thanks!  : )


 funziona a dovere, č solo leggermente piů laboriosa.
Se la macro te la fa qualcun altro... ;-)


 Così viene NomeCognome, anziché Nome Cognome...
lo so; si trattava di una indicazione concettuale; anche il separatore
di lista puo' variare da foglio a foglio.
Comunque e' la stessa indicazione che abbiamo dato piu' o meno tutti (io
piu' in ritardo, visto che sono su commutata...)



Descrizione e prova ... un pò troppo frettolosa ... :-(
La procedura va fatta riga per riga, più semplicemente con una macro
che si passa tutte le righe e le mette insieme ...
O a "manina" ma se i dati sono molti conviene una macro ...
Saluti a tutti
Riddler ?

 valori".
Visto che proprio in questo periodo sto"masticando" un pò di Macro ...
Ecco la macro
Public Sub Unisci_Celle()
    Dim SH As Worksheet
    Dim rng As Range
    Dim rCell As String
    Dim iLastRow As Long
    Dim n As Long
    Set SH = ActiveWorkbook.Sheets.Item(1) ' oppure Sheets("Foglio1") '
<--- Nome del foglio in uso...
    SH.Activate
    iLastRow = SH.Cells(Rows.Count, "A").End(xlUp).Row ' Se in A NON ci
sono celle vuote ...
    For n = 1 To iLastRow
        rCell = SH.Range("B" & n).Value
        SH.Range("B" & n).Clear
        SH.Range("A" & n).Value = SH.Range("A" & n).Value & " " & rCell
    Next n
End Sub
Basta poi assegnarla ad un pulsante e verrà applicata alle colonne A e
B a meno di cambiare il codice e su ogni foglio ...
Se ci sono delle formule e il risultato NON è quello ottenuto
sostituore
.Value
con
.Text
In modo da non ricopiare la formula se NON interessa ...
Sperando di aver fornito un aiuto o uno spunto di partenza
saluto tutti
Riddler ?

 O a "manina" ma se i dati sono molti conviene una macro ...
In realtà non fa molta differenza se i dati sono molti o pochi: per
estendere la formula a tutta la colonna basta un doppio click
sull'angolo in basso a destra della prima cella. Poi il copia-incolla lo
fai selezionando le colonne intere...


 Se la macro te la fa qualcun altro... ;-)
Effettivamente... : )


 cognome.
Ho sbagliato a rispondere ... scusate ...


 > Cosě viene NomeCognome, anziché Nome Cognome...
= Concatenate(a1,d1,b1)
dove d1 e' una cella con solo lo spazio

 dove d1 e' una cella con solo lo spazio
Va be', ma perché farsi del male...?


 Va be', ma perché farsi del male...?
Per avere piu' opzioni ed esercitare il libero arbitrio :-)

 Per avere piu' opzioni
Più rogne, casomai... Con la tua formula dovresti prima riempire con uno
spazio le celle della colonna D, dalla D1 alla Dn (dove n è il numero di
celle piene nelle colonne A e B). Al limite
= Concatenate(a1,$d$1,b1)
;-)


 = Concatenate(a1,$d$1,b1)
Giusto, ma cosi' diventa tropo facile :-)

 Sperando di aver fornito un aiuto o uno spunto di partenza
Un otimo aiuto, grazie ancora.


 
Di niente ... .-)
salù
Riddler ?