Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Brazil85,
Avrei bisogno di una mano per completare una macro su un foglio di calcolo
Sulla cella A2 ho un determinato valore di tipo testo, poi, nelle celle successive A3,A4 e cosi via celle vuote finchè sulla cella A(n) vi è un nuovo valore, poi ancora celle vuote e cosi via la cosa si ripete.
Avrei bisogno che la macro mi copiasse il valore trovato nella cella A2 ed incollarlo nelle celle vuote sottostanti, dopodiché copiare il nuovo valore nella prima cella avente il nuovo testo ed incollarlo nelle celle vuote successive e cosi via.
Ho provato registrando la macro ma ovviamente funziona solo con i range che seleziono e che cambiano ogni volta.
E' per un lavoro molto importante, vi sarei grato se qualcuno mi potesse aiutare.
Se vuoi utilizzare una macro, prova qualcosa del genere:
- Alt+F11 per aprire l'editor di VBA
- Alt+IM per inserire un nuovo modulo di codice
- Nel nuovo modulo vuoto, incolla il seguente codice:
'=========>>
Option Explicit
'--------->>
Public Sub Tester()
Dim WB As Workbook
Dim SH As Worksheet
Dim Rng As Range, Rng2 As Range, rArea As Range
Dim LRow As Long
Const sFoglio As String = "Foglio1" '<<=== Modifica
Set WB = ThisWorkbook
Set SH = WB.Sheets(sFoglio)
With SH
LRow = LastRow(SH, .Columns("A:A"))
Set Rng = .Range("A2:A" & LRow)
End With
On Error Resume Next
Set Rng2 = Rng.SpecialCells(xlCellTypeBlanks)
On Error GoTo 0
If Not Rng2 Is Nothing Then
For Each rArea In Rng2.Areas
With rArea
.Value = .Cells(0).Value
End With
Next rArea
End If
End Sub
'--------->>
Public Function LastRow(SH As Worksheet, _
Optional Rng As Range, _
Optional minRow As Long = 1, _
Optional sPassword As String)
Dim bProtected As Boolean
With SH
If Rng Is Nothing Then
Set Rng = .Cells
End If
bProtected = .ProtectContents = True
If bProtected Then
.Unprotect Password:=sPassword
End If
End With
On Error Resume Next
LastRow = Rng.Find(What:="*", _
after:=Rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
If LastRow < minRow Then
LastRow = minRow
End If
If bProtected Then
SH.Protect Password:=sPassword, _
UserInterfaceOnly:=True
End If
End Function
'<<=========
- Alt+Q per chiudere l'editor di VBA e tornare a Excel
- Salva il file con l’estensione xlsm
- Alt+F8 per aprire la finestra di gestione delle macro
- Seleziona Tester
- Esegui
Potresti scaricare il mio file di prova Brazil85_20171116.xlsm
In questo file, premi il pulsante Avvia Macro! per eseguire il codice.
Nota, però, che potresti ottenere i risultati voluti molto velocemente senza ricorre a VBA:
Seleziona l'intervallo di interesse, ad esempio A2:A100
F5
Speciale
Vuote
OK
Digita il segno = e premi la freccia su
Ctrl Invio
Seleziona l'intero intervallo A2:A100
Copia | Incolla speciale | Valori
OK
===
Regards,
Norman