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

enter image description here

0
sc1324 17 nov. 2017 à 21:35

4 réponses

Meilleure réponse

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
0
user8959429user8959429 17 nov. 2017 à 18:42

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:

RES

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.

2
ja72 17 nov. 2017 à 19:25

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.

0
Harun24HR 18 nov. 2017 à 08:05

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
3
QHarr 17 nov. 2017 à 19:35
47357158