J'essaie d'attribuer des valeurs à la colonne z à l'aide d'un tableau mais je n'obtiens pas les résultats souhaités. Je teste pour attribuer la cellule Z1 = A
, la cellule Z2 = B
, la cellule Z3 = C
À l'heure actuelle, mes codes attribuent les 3 cellules à C. J'ai publié mes résultats souhaités ci-dessous.
Sub test()
Dim ws1 As Worksheet
Dim i, j As Long
Dim v As Variant
Set ws1 = Worksheets("Sheet1")
With ws1
v = Array("A", "B", "C")
For i = LBound(v) To UBound(v)
For j = 1 To 3
Cells(j, 26).Value = v(i)
Next j
Next i
End With
End Sub
4 réponses
Essaye ça
Sub test()
Dim ws1 As Worksheet
Dim i, j As Long
Dim v As Variant
Set ws1 = Worksheets("Sheet1")
With ws1
v = Array("A", "B", "C")
For i = LBound(v) To UBound(v)
For j = 1 To 3
Cells(j, 26).Value = v(j - 1)
Next j
Next i
End With
End Sub
Pour apprendre à lire et à écrire des tableaux VBA 1D ou 2D dans des cellules, consultez le code ci-dessous:
Public Sub TestArrayReadAndWrite()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
' Set a 1D array in VBA
' Write the array to cells
Dim v() As Variant
v = Array("A", "B", "C")
ws.Range("A1").Resize(3, 1).Value = WorksheetFunction.Transpose(v)
ws.Range("A5").Resize(1, 3).Value = v
' Set a 3×3 array in VBA
' Write the array to cells
Dim a() As Variant
ReDim a(1 To 3, 1 To 3)
a(1, 1) = "A11": a(1, 2) = "A12": a(1, 3) = "A13"
a(2, 1) = "A21": a(2, 2) = "A22": a(2, 3) = "A13"
a(3, 1) = "A31": a(3, 2) = "A32": a(3, 3) = "A13"
ws.Range("C1").Resize(3, 3).Value = a
' Read Array 100×1 array of cells
' Modify the array by doubling the values
' Write the array back to the next column over
Dim b() As Variant, i As Long
b = ws.Range("G1").Resize(100, 1).Value
For i = 1 To 100
b(i, 1) = 2 * b(i, 1)
Next i
ws.Range("G1").Offset(0, 1).Resize(100, 1).Value = b
End Sub
Et le résultat:
Il est beaucoup plus rapide et concis d'écrire des tableaux entiers avec une seule commande en affectant à Range().Resize(n,m).Value = x
puis de parcourir toutes les valeurs et de les définir une par une.
Qu'en est-il de ce code simple.
Private Sub cmdFill_Click()
Dim i As Integer
For i = 1 To 26
Cells(i, 26).Value = Chr(64 + i)
Next i
End Sub
Vous pouvez régler 26 si vous n'en avez besoin que de 3.
Vous pouvez définir l'option base 1 afin d'utiliser des références de ligne valides lors de l'écriture des valeurs (si le tableau lbound était égal à 0, vous ne pourriez pas utiliser .Cells (0, 26) = v (0) comme aucune ligne 0 dans la feuille.
Option Base: utilisé au niveau du module pour déclarer la limite inférieure par défaut pour les indices de tableau. La valeur par défaut est la base 0.
L'utilisation de la base 1 signifie que vous pouvez accéder à tous les éléments du tableau et utiliser la même variable incrémentielle pour la feuille et le tableau, c'est-à-dire ne peut utiliser qu'une seule variable longue i.
Option Base 1
Sub test()
Dim ws1 As Worksheet
Dim i Long
Dim v As Variant
Set ws1 = Worksheets("Sheet1")
v = Array("A", "B", "C")
With ws1
For i = LBound(v) To UBound(v)
.Cells(i, 26) = v(i)
Next i
End With
End Sub
De nouvelles questions
excel
Uniquement pour les questions sur la programmation contre des objets ou des fichiers Excel, ou le développement de formules complexes. Vous pouvez combiner la balise Excel avec VBA, VSTO, C #, VB.NET, PowerShell, l'automatisation OLE et d'autres balises et questions liées à la programmation, le cas échéant. Une aide générale concernant MS Excel pour les fonctions de feuille de calcul unique est disponible sur Super User.