Ho visto e in effetti il problema dipendeva dal fatto che non veniva mantenuta la selezione a seguito della riselezione dell'ultima cella attiva.
Però anche mantenendo questa opzione, che è comoda perché altrimenti rimane la selezione dell'intero intervallo, lanciando il comando SendKeys impostando Wait su true le formule vengono inserite in tutto l'intervallo in forma matriciale.
Quindi la versione finale di una procedura per l'inserimento di una formula matriciale la cui stringa risulti superiore a 255 caratteri potrebbe essere questa:
'======================>
Option Explicit
Public Sub InsertFormulaArray()
'Procedura che consente di inserire in una cella, o intervallo di celle, una formula matriciale la cui
'lunghezza supera i 255 caratteri.
'L'inserimento diretto della stringa di testo senza la suddivisione in "sub stringhe" darebbe errore
'Per effettuare l'inserimento occorre sfruttare il comando SendKeys impostando la propietà Wait su True e
'dando il comando prima dell'inserimento nel testo della formula in modalità semplice ".Formula"
'Occore anche impostare DoEvents per lasciare il controllo degli eventi all'applicazione
Dim WB As Workbook
Dim SH As Worksheet
Dim rngFormule As Range, rCell As Range
Dim s1 As String
Set WB = ThisWorkbook
Set SH = WB.Sheets("Inserimento_Dati")
Set rCell = ActiveCell
With SH
Set rngFormule = SH.Range("_ColOrdinamentoClienti")
End With
s1 = "=IF(ISERROR(INDEX(_EC,MATCH(SMALL(IF(IF(ISERROR" _
& "(MATCH(_EC,_EC,0)),"""",MATCH(_EC,_EC,0))=ROW(_EC)-" _
& "(ROW(_F1)+1-ROW(R1C2)),1)*COUNTIF(_EC,""<=""&_EC),ROW" _
& "(_EC)-(ROW(_F1)+1-ROW(R1C2))+ROWS(_EC)-SUM(IF(ISERROR" _
& "(1/COUNTIF(_EC,_EC)),"""",1/COUNTIF(_EC,_EC)))),COUNTIF" _
& "(_EC,""<=""&_EC),))),"""",INDEX(_EC,MATCH(SMALL(IF(IF" _
& "(ISERROR(MATCH(_EC,_EC,0)),"""",MATCH(_EC,_EC,0))=ROW(_EC)-" _
& " (ROW(_F1)+1-ROW(R1C2)),1)*COUNTIF(_EC,""<=""&_EC),ROW(_EC)" _
& "-(ROW(_F1)+1-ROW(R1C2))+ROWS(_EC)-SUM(IF(ISERROR(1/" _
& "COUNTIF(_EC,_EC)),"""",1/COUNTIF(_EC,_EC)))),COUNTIF" _
& "(_EC,""<=""&_EC),)))"
'corrispondente della formula in Italiano
'SE(VAL.ERRORE(INDICE(_EC;CONFRONTA(PICCOLO(SE(SE(VAL.ERRORE(CONFRONTA(_EC;_EC;0));"";CONFRONTA(_EC;_EC;0))=RIF.RIGA(_EC)-(RIF.RIGA(_F1)+1-RIF.RIGA($B$1));1)*
CONTA.SE(_EC;"<="&_EC);RIF.RIGA(_EC)-(RIF.RIGA(_F1)+1-RIF.RIGA($B$1))+RIGHE(_EC)-SOMMA(SE(VAL.ERRORE(1/
CONTA.SE(_EC;_EC));"";1/
CONTA.SE(_EC;_EC))));
CONTA.SE(_EC;"<="&_EC);)));"";INDICE(_EC;CONFRONTA(PICCOLO(SE(SE(VAL.ERRORE(CONFRONTA(_EC;_EC;0));"";CONFRONTA(_EC;_EC;0))=RIF.RIGA(_EC)- (RIF.RIGA(_F1)+1-RIF.RIGA($B$1));1)*
CONTA.SE(_EC;"<="&_EC);RIF.RIGA(_EC)-(RIF.RIGA(_F1)+1-RIF.RIGA($B$1))+RIGHE(_EC)-SOMMA(SE(VAL.ERRORE(1/
CONTA.SE(_EC;_EC));"";1/
CONTA.SE(_EC;_EC))));
CONTA.SE(_EC;"<="&_EC);)))
Debug.Print Len(s1)
On Error GoTo XIT
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
With rngFormule
.Select
Application.SendKeys "{F2}^+~", True
.Formula = s1
DoEvents
End With
XIT:
rCell.Select
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
'<======================
Complimenti Norman :-)