Condividi:        

unisci celle con macro

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

unisci celle con macro

Postdi calculon » 04/08/11 19:01

II problema:

in una colonna ho una serie di parole. tra tutte ho necessità di trovare "MAMMA" per poi selezionare la cella e unirla alle tre accanto.

es.

b1 = MAMMA
C:h= "vuota"

1) trova "mamma"
2) unisci B1 a c1,d1,e1,f1,g1,h1 e centra il contenuto
3) ripeti questa operazione per tutta la colonna qualora vi fosse nuovamente la parola MAMMA (ad es. nella B228)

Vi ringrazio tantissimo
calculon
Utente Senior
 
Post: 161
Iscritto il: 07/01/11 15:08

Sponsor
 

Re: unisci celle con macro

Postdi Flash30005 » 04/08/11 22:26

Prova questa macro

Codice: Seleziona tutto
Sub Unisci()
Dim Ws1 As Worksheet
Set Ws1 = Sheets("Foglio1")
UR = Ws1.Range("B" & Rows.Count).End(xlUp).Row
For RR = 1 To UR
If UCase(Ws1.Range("B" & RR).Value) = "MAMMA" Then
Ws1.Range("B" & RR).Value = Ws1.Range("B" & RR).Value & " " & Ws1.Range("C" & RR).Value & " " & Ws1.Range("D" & RR).Value & " " & Ws1.Range("E" & RR).Value & " " & Ws1.Range("F" & RR).Value & " " & Ws1.Range("G" & RR).Value & " " & Ws1.Range("H" & RR).Value
End If
Next RR
End Sub


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: unisci celle con macro

Postdi calculon » 05/08/11 13:17

funziona benissimo però è molto complessa da capire. :(

Posso chiederti come fai a selezionare una cella sulla base del suo contenuto e poi selezionare attivare il range che va dalla stessa fino alla 5à a dx?


Es.
trova mamma
(mamma sta in a1)
allora attiva da a1 a d1
calculon
Utente Senior
 
Post: 161
Iscritto il: 07/01/11 15:08

Re: unisci celle con macro

Postdi Flash30005 » 05/08/11 21:04

calculon ha scritto:Posso chiederti come fai a selezionare una cella sulla base del suo contenuto e poi selezionare attivare il range che va dalla stessa fino alla 5à a dx?

Certo!
ti dice nulla questo passo?
Codice: Seleziona tutto
If UCase(Ws1.Range("B" & RR).Value) = "MAMMA" Then
Ws1.Range("B" & RR).Value = Ws1.Range("B" & RR).Value & " " & Ws1.Range("C" & RR).Value & " " & Ws1.Range("D" & RR).Value & " " & Ws1.Range("E" & RR).Value & " " & Ws1.Range("F" & RR).Value & " " & Ws1.Range("G" & RR).Value & " " & Ws1.Range("H" & RR).Value
End If

Spiego
prima riga se la cella è "MAMMA" allora
Codice: Seleziona tutto
Range("B" & RR).Value =   '<<<<il valore della cella deve essere uguale a...

Dove RR è la variabile riga per riga definita dal For... next
quindi prima B1, poi B2, B3, B4, etc
Quindi se in B1 trovo MAMMA allora "concatena"...
Codice: Seleziona tutto
Range("B" & RR).Value & " " & Range("C" & RR).Value & " " & Range("D" & RR).Value & " " & Range("E" & RR).Value & " " & Range("F" & RR).Value & " " & Range("G" & RR).Value & " " & Range("H" & RR).Value

significa B1 + spazio + C1 + spazio + D1 + etc

Il Ws1. è solo il foglio che in questo esempio ho tolto ma nella macro potrebbe essere necessario perché potresti attivare la macro da un altro foglio e non otterresti i risultati voluti

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: unisci celle con macro

Postdi calculon » 06/08/11 12:30

Sub UNISCI()
' UNISCI Macro
'

'
Dim crt As String
crt = "cartella"

Cells.Find(what:=crt, After:=ActiveCell, LookAt:=xlPart).Activate

Range(ActiveCell, Cells(ActiveCell.Row, ActiveCell.Column + 5)).Select

With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
.WrapText = False
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Selection.Merge
Selection.Font.Bold = True


End Sub

prendendo spunto dai tuoi suggerimenti sono riuscito ad ottenere il risultato sperato.

Ora devo affrontare un nuovo problema: la macro si blocca poiché excel mi chiede la conferma a questo messaggio: la selezione contiene valori di dati multipli. Unendola in una singola cella verranno mantenuti solo i dati presenti nella parte superiore sinistra.

Scegli OK oppure Annulla.

Io vorrei che non mi venisse posta questa domanda o quanto impostare un comando che risponda OK per tutto il ciclo.


Sono gasatissimo.
calculon
Utente Senior
 
Post: 161
Iscritto il: 07/01/11 15:08

Re: unisci celle con macro

Postdi calculon » 06/08/11 18:08

ancora, ho pensato di ripetere questa macro per tutta la colonna con un semplice

for i = 1 to 100

il risultato è che impiega tantissimo tempo a concludere il ciclo. esiste un'alternativa?
calculon
Utente Senior
 
Post: 161
Iscritto il: 07/01/11 15:08

Re: unisci celle con macro

Postdi Flash30005 » 07/08/11 05:08

calculon ha scritto:...Io vorrei che non mi venisse posta questa domanda ...


Codice: Seleziona tutto
Application.EnableEvents = False
                     '<<<< inserisci qui il tuo codice che fa apparire il messaggio
Application.EnableEvents = True


EDIT: correggo il codice sopra riportato (come ha fatto notare Anthony nel suo post)
Codice: Seleziona tutto
Application.DisplayAlerts = False
                     '<<<< inserisci qui il tuo codice che fa apparire il messaggio
Application.DisplayAlerts = True


Per rendere più veloce la macro prova ad inserire queste quattro righe
(le prime due all'inizio della macro le altre due alla fine)

Codice: Seleziona tutto
Sub TuaMacro()
Application.ScreenUpdating = False
Application.Calculation = xlManual
'... intero codice macro
'...
'...
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

End Sub



Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: unisci celle con macro

Postdi Anthony47 » 07/08/11 10:46

Non avendo seguito con attenzione la discussione non sono in grado di dare grandi suggerimenti, ma relativamente alla questione del messaggio di warning lo puoi evitare inserendo questa istruzione:
Codice: Seleziona tutto
ActiveCell.Range("B1:E1").Clear   '<<< AGGIUNTA
Selection.Merge   '<<< ESISTENTE

(Flash, vedi messaggio sopra) forse voleva suggerire Application.DisplayAlerts = False / Application.DisplayAlerts =True)

Per quanto riguarda il ciclo for i = 1 to 100, da una veloce lettura non sono riuscito a inquadrarne la finalita'; le istruzioni di Flash sono adatte per velocizzare qualsiasi macro, quindi probabilmente anche la tua, se pero' non ti risolvono prova a descrivere non solo "come hai pensato di farlo" ma anche "cosa vorresti fare".

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "unisci celle con macro":


Chi c’è in linea

Visitano il forum: Nessuno e 95 ospiti