Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Copia contenuto celle non vuote

1,231 views
Skip to first unread message

nlfr...@libero.it

unread,
Oct 7, 2011, 7:57:07 AM10/7/11
to
Buongiorno,
in un foglio di lavoro ho 6 colonne con un centinaio di righe cad.
tante delle quali sono vuote.
Ho necessità di copiare il contenuto delle celle non vuote delle
colonne 1-6 nelle colonne 7-12.
Vi ringrazio dell'attenzione

eliano

unread,
Oct 7, 2011, 8:37:36 AM10/7/11
to
Probabilmente i dati sono insufficiiiienti, ma se ci copi anche quelle
vuote che ti cambia ?
Eliano

nlfr...@libero.it

unread,
Oct 7, 2011, 9:10:25 AM10/7/11
to
Cambia che non riesco ad ottenere quanto voluto.
Mi serve l'elenco delle sole celle non vuote, divise per colonna, in
quanto il risultato delle colonne (6-7 righe al massimo) sarà oggetto
di una formula "contatena" da inserire in un prospetto in un secondo
foglio di lavoro.

eliano

unread,
Oct 7, 2011, 9:15:55 AM10/7/11
to
Spiacente ma non capisco cosa c'entra la formula "concatena"; ma tu
vuoi copiare delle celle da alcune colonne ad altre o vuoi un elenco
delle celle non vuote ?

r

unread,
Oct 7, 2011, 9:16:00 AM10/7/11
to
On 7 Ott, 15:10, nlfra...@libero.it wrote:
usa una udf per concatenare ... in alternativa senza vba guarda qui:
http://sites.google.com/site/e90e50/scambio-file

Concatenate_with_interaction.xlsm


Function JoinUDF( _
Source As Variant, _
Optional Delimiter As Variant = "", _
Optional AcceptEmpty As Boolean = True) As String

Dim Rng As Range, x() As String, y As Variant
Dim i As Long

If TypeName(Source) = "Range" Then
For Each Rng In Source
If IsEmpty(Rng.Value) Imp AcceptEmpty Then
ReDim Preserve x(i)
x(i) = CStr(Rng.Value)
i = i + 1
End If
Next
ElseIf IsArray(Source) Then
For Each y In Source
If IsEmpty(Rng.Value) Imp AcceptEmpty Then
ReDim Preserve x(i)
x(i) = CStr(IIf(IsArray(y), JoinUDF(y), y))
i = i + 1
End If
Next
Else
ReDim x(0)
x(0) = CStr(Source)
End If

If IsArray(Delimiter) Or TypeName(Delimiter) = "Range" Then
Delimiter = JoinUDF(Delimiter)
End If
JoinUDF = Join(x, CStr(Delimiter))
End Function

saluti
r

nlfr...@libero.it

unread,
Oct 7, 2011, 9:29:25 AM10/7/11
to
> r- Nascondi testo citato
>
> - Mostra testo citato -

Grazie infinite, mi metto subito al lavoro!!!

nlfr...@libero.it

unread,
Oct 7, 2011, 9:26:40 AM10/7/11
to
> delle celle non vuote ?- Nascondi testo citato
>
> - Mostra testo citato -

cerco di spiegarmi meglio.
Nelle colonne intestate 1-6 ho una serie di formule (se vero = "testo
xxx" se falso = "").
Sono necessitato di un elenco, diviso per colonne, delle sole celle
non vuote per successiva elaborazione,

r

unread,
Oct 7, 2011, 3:21:59 PM10/7/11
to
"" non è cella vuota ... puoi modificare la udf ... vuoi la soluzione
con udf, vuoi usare colonne di appoggio o vuoi la soluzione con
iterazioni senza colonne di appoggio?

r

Domenico Zangrilli

unread,
Oct 7, 2011, 5:36:25 PM10/7/11
to
Prova questa macro da inserire nel VB
scrivi in foglio 1 partendo da C3 è il titolo ho messo H
in c4 c'è 1
in c5 c'è 2
in c6 c'è nulla ("")
in c7 c'è 4

ecc...

vedrai che applica il filtro e copia solo le celle con valori o celle non vuote e ti metterà
H
1
2
4
ecc.

oppure
H 1 2 4 ecc.

Ti ho messo anche la soluzione del trasponi cioè copia verticale e incolla Orizzontali ( Range("B6").Select)

per cui ripeti colonna per colonna e troverai solo dati ... e nessuna

Sub Macro2()
'
' Macro2 Macro
'

'
Sheets("Foglio1").Select
Range("C3:C15").Select
Selection.AutoFilter
ActiveSheet.Range("$C$3:$C$11").AutoFilter Field:=1, Criteria1:="<>"
Selection.Copy
Sheets("Foglio2").Select
Range("B3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
Range("B6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("F15").Select
End Sub

L'unico problema è se nelle righe di copiatura c'è una cella vuota non riportandola metterà quello sottostante

es
1-2- -4- - 6
3- - - 6- -7
-5 6- -7

avrai
1 | 2 | | 4
3 5 6

unendo hai
1-2-4
3-5-6
ecc..

Domenico Zangrilli

unread,
Oct 7, 2011, 5:40:42 PM10/7/11
to


"Domenico Zangrilli" ha scritto nel messaggio news:4e8f70c4$0$43505$4faf...@reader2.news.tin.it...

scusate ... non vedevo la soluzione di r

eliano

unread,
Oct 8, 2011, 8:07:22 AM10/8/11
to
> non vuote per successiva elaborazione,- Nascondi testo citato

>
> - Mostra testo citato -

Ciao.
Vedo che non rispondi alle domande di Roby e che non dichiari se le
risposte ricevute sono di tuo gradimento, quindi aggiungo la mia
artigianale che non avevo inviato visto la risposta di Roby.
In un Modulo standard, ad esempio Modulo1, copia/incolla questa
artigianale che, secondo quanto hai specificato, dovrebbe copiare
nelle colonne 7:12 i valori delle celle non vuote esistenti nelle
colonne 1:6; se in una colonna non esistono valori la riga sarà in
bianco.

Public Sub prova()
Dim C As Long, R As Long
Dim NC As Long, NR As Long
Dim X As Long, Y As Long
C = 1
R = 1
NC = 7
For Y = 1 To 6
For X = 1 To 100 '<<--------- Da Variare
If Cells(X, C).Value <> "" Then
Cells(Y, NC).Value = Cells(X, C).Value
NC = NC + 1
End If
Next X
NC = 7
C = C + 1
Next Y
End Sub

Se è quello che desideri, faccelo sapere così vediamo di completarla.
Saluti
Eliano

nlfr...@libero.it

unread,
Oct 10, 2011, 8:48:10 AM10/10/11
to
> Eliano- Nascondi testo citato

>
> - Mostra testo citato -

Oh, scusate, sono stato assente per qualche giorno dall'Ufficio e non
ho visto i Vostri riscontri. Vi ringrazio infinitamente,
Eliano, quest'ultima macro calza alla perfezione. Sono felice.
Grazie ancora a tutti per la collaborazione e arrivederci alla
prossima.

eliano

unread,
Oct 10, 2011, 6:59:26 PM10/10/11
to
> prossima.- Nascondi testo citato

>
> - Mostra testo citato -

Ti avevamo dato come disperso in Libia, invece eri in ferie.:-))
Grazie del riscontro.
Eliano

0 new messages