Auguri nel voler creare 744 label :)
Vedi questo esempio (file esempio: File esempio 2) dove, diversamente dal precedente, ho nominato le label in modo continuativo (1,2,3,...,744) con un contantore che si incrementa di 1 ad ogni ciclo "combinato" i + j.
Quindi in pratica alla label1 corrisponde la prima cella dell'intervallo (cella 1,1), poi man mano ogni label corrisponde alla cella successiva seguendo l'ordine righe x colonne.
Se questo è lo schema che utilizzerai anche tu alla seguente procedura dovresti poter eliminare le parti che evidenzio in con la "barratura":
Private Sub UserForm_Initialize()
'< --- costanti e variabli non necessarie se i controlli label sono già creati manualmente --- >
Const Itop As Double = 5
Const Ileft As Double = 5
Const deltaTop As Double = 5
Const deltaLeft As Double = 5
Dim lHeight As Double, lWidth As Double
Dim cLabel As MSForms.Label
'</ --- costanti e variabli non necessarie se i controlli label sono già creati manualmente --- >
Const sRange As String = "A1:AE24"
Dim oRange As Range
Dim NumRighe As Long, NumCol As Long
Dim i As Long, j As Long
Dim cont As Long
Dim iLng As Long
Set oRange = ThisWorkbook.Worksheets("Foglio1").Range(sRange)
With oRange
NumRighe = .Rows.Count
NumCol = .Columns.Count
End With
With Me
'< --- codice che non è necessario se la UserForm è già dimensionata manualmente --- >
.Width = Application.UsableWidth - 5
.Height = .Width / 2
lWidth = (.Width - (Ileft * 3) - (deltaLeft * (NumCol - 1))) / NumCol
lHeight = (.Height - (Itop * 6.5) - (deltaTop * (NumRighe - 1))) / NumRighe
'</ --- codice che non è necessario se la UserForm è già dimensionata manualmente --- >
For i = 1 To NumRighe
For j = 1 To NumCol
cont = cont + 1
'< --- codice che non è necessario se i controlli Label sono già creati manualmente --- >
Set cLabel = .Controls.Add("Forms.Label.1")
With cLabel
.Name = "Label" & cont
.Height = lHeight
.Width = lWidth
.TextAlign = fmTextAlignCenter
If i = 1 Then
.Top = Itop
Else
.Top = deltaTop + Me.Controls("Label" & cont - NumCol).Top + _
Me.Controls("Label" & cont - NumCol).Height
End If
If j = 1 Then
.Left = Ileft
Else
.Left = deltaLeft + Me.Controls("Label" & cont - 1).Left + _
Me.Controls("Label" & cont - 1).Width
End If
End With
'< --- codice che non è necessario se i controlli Label sono già creati manualmente --- >
With .Controls("Label" & cont)
iLng = oRange(i, j)
.Caption = iLng '<=== questo può essere eliminato se non interessa avere i valori nelle label
Select Case iLng
Case 1
.BackColor = RGB(255, 0, 0)
Case 2
.BackColor = RGB(0, 255, 0)
Case 3
.BackColor = RGB(0, 0, 255)
Case 4
.BackColor = RGB(255, 0, 255)
Case 5
.BackColor = RGB(255, 255, 0)
Case 6
.BackColor = RGB(0, 0, 255)
Case 7
.BackColor = RGB(0, 0, 0)
Case 8
.BackColor = RGB(125, 0, 0)
Case 9
.BackColor = RGB(0, 125, 0)
Case 10
.BackColor = RGB(0, 0, 125)
Case 11
.BackColor = RGB(75, 75, 75)
Case 12
.BackColor = RGB(150, 150, 150)
End Select
End With
Next j
Next i
End With
End Sub
ovviamente i colori da assegnare dovrai modificarli in base alle tue esigenze (io ho messo un po' di colori a caso)