Microsoft ha delle chiare istruzioni per superare queste situazioni:
https://support.microsoft.com/en-us/hel ... contain-meTradotto: fallo a mano
Con un po' di pazienza (e qualche approssimazione) si puo' fare qualcosa con macro.
Ad esempio, mentre imposti "Unisci Celle" puoi usare la sequente macro che, lavorando sulle celle appena unite e selezionate, dovrebbe impostare l'altezza altrimenti ottenuta con Autofit:
- Codice: Seleziona tutto
Sub MCAntoFit()
Dim SAdr As String, myC As Range, MaxRH As Single
Dim cComp As Single, mcW As Single, CC11W As Single
'
MaxRH = 300 '<<< La max altezza riga consentita
SAdr = Selection.Address
cComp = 0.64 'Compensazione per margini omessi
If SAdr <> Selection.Cells(1, 1).Address And Selection.Rows.Count = 1 Then
CC11W = Selection.Cells(1, 1).ColumnWidth
Selection.UnMerge
'Width complessiva:
mcW = -(cComp) * 1
For I = 1 To Range(SAdr).Columns.Count
mcW = mcW + Range(SAdr).Cells(1, I).ColumnWidth + cComp
Next I
'Autofit su singola colonna:
With Range(SAdr).Cells(1, 1)
.EntireColumn.ColumnWidth = mcW
.WrapText = True
.EntireRow.AutoFit
If .Height > MaxRH Then .RowHeight = MaxRH
End With
'Ripristino
Range(SAdr).Merge
Range(SAdr).Cells(1, 1).EntireColumn.ColumnWidth = CC11W
End If
End Sub
Il codice va inserito in un Modulo Standard del vba.
Ripeto l'uso: si seleziona una (sola) area di celle unite, si esegue la macro
Nella macro e' impostata una altezza max pari a 300 punti; in situazioni estreme quindi il contenuto potrebbe non essere tutto visibile. Volendo questo Max puo' essere modificato fino a 400.
Immagino pero' che dopo l'impostazione iniziale, visto che parli di dati importati dal web, i dati cambieranno ma l'altezza righe non cambiera' automaticamente.
Puoi ottenere il riallineamento delle altezze utilizzando questa ulteriore macro:
- Codice: Seleziona tutto
Sub RangeFit()
Dim RHArr() As Single, myC As Range
Dim cRow As Long
'
Application.ScreenUpdating = False
ReDim RHArr(1 To Intersect(Selection, ActiveSheet.UsedRange).Row + Application.Intersect(Selection, ActiveSheet.UsedRange).Rows.Count)
For Each myC In Application.Intersect(Selection, ActiveSheet.UsedRange)
myC.Select
If myC.Row <> cRow Then myC.EntireRow.AutoFit: cRow = myC.Row
Call MCAntoFit
If myC.Height > RHArr(myC.Row) Then RHArr(myC.Row) = myC.Height
DoEvents
Next myC
For I = 1 To UBound(RHArr)
If RHArr(I) > 0 Then Cells(I, 1).EntireRow.RowHeight = RHArr(I)
Next I
Application.ScreenUpdating = True
MsgBox ("Completato...")
End Sub
Il codice va inserito in un Modulo Standard del vba.
Poi si seleziona un intervallo del foglio che si vuole sistemare (possono essere anche intere colonne, tipo A:L) e si avvia la macro. Un messaggio informera' del completamento delle operazioni.
Tra le assunzioni fatte, che le celle unite siano su una unica riga (cioe' che siano state unite Colonne, non Righe).
Fai sapere...
Edit: Modificato il codice della Sub RangeFit per inserire la gestione ScreenUpdating False /True