Question

Je dois simplement parcourir toutes les cellules d'une feuille de calcul Excel et vérifier les valeurs dans les cellules. Les cellules peuvent contenir du texte, des chiffres ou être vides. Je ne suis pas très familier / confortable avec le concept de 'Range'. Par conséquent, tout exemple de code serait grandement apprécié. (J'ai essayé de le rechercher sur Google, mais les extraits de code que j'ai trouvés ne faisaient pas tout à fait ce dont j'avais besoin)

Merci.

Était-ce utile?

La solution

Sub CheckValues1()
    Dim rwIndex As Integer
    Dim colIndex As Integer
    For rwIndex = 1 To 10
            For colIndex = 1 To 5
                If Cells(rwIndex, colIndex).Value <> 0 Then _
                    Cells(rwIndex, colIndex).Value = 0
            Next colIndex
    Next rwIndex
End Sub

Cet extrait a été trouvé sur http: // www. java2s.com/Code/VBA-Excel-Access-Word/Excel/Checksvaluesinarange10rowsby5columns.htm Il semble être très utile comme fonction pour illustrer les moyens de vérifier les valeurs dans les cellules de manière ordonnée.

Imaginez-le simplement comme un tableau 2D et appliquez la même logique pour parcourir en boucle les cellules.

Autres conseils

Si vous avez seulement besoin de regarder les cellules en cours d'utilisation, vous pouvez utiliser:

sub IterateCells()

   For Each Cell in ActiveSheet.UsedRange.Cells
      'do some stuff
   Next

End Sub

qui va toucher tout dans la plage allant de A1 à la dernière cellule avec des données (la cellule la plus à droite)

Si vous ne regardez que les valeurs de cellules, vous pouvez les stocker dans un tableau de type variant. Il semble que l'obtention de la valeur d'un élément dans un tableau puisse s'avérer beaucoup plus rapide que d'interagir avec Excel. Vous pouvez donc constater une différence de performances en utilisant un tableau de toutes les valeurs de cellule par rapport à l'obtention répétée de cellules uniques.

Dim ValArray as Variant
ValArray = Range("A1:IV" & Rows.Count).Value

Ensuite, vous pouvez obtenir une valeur de cellule simplement en cochant ValArray (ligne, colonne)

Vous pouvez utiliser un For Each pour parcourir toutes les cellules d'une plage définie.

Public Sub IterateThroughRange()

Dim wb As Workbook
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range

Set wb = Application.Workbooks(1)
Set ws = wb.Sheets(1)
Set rng = ws.Range("A1", "C3")

For Each cell In rng.Cells
    cell.Value = cell.Address
Next cell

End Sub

Pour une application VB ou C #, une solution consiste à utiliser Office Interop. Cela dépend de la version d'Excel avec laquelle vous travaillez.

Pour Excel 2003, cet article MSDN est un bon point de départ. Présentation du modèle objet Excel à partir de la perspective du développeur de Visual Studio 2005

En principe, vous devrez procéder comme suit:

  • Démarrez l'application Excel.
  • Ouvrez le classeur Excel.
  • Récupérez la feuille de travail du classeur par nom ou par index.
  • Parcourez toutes les cellules de la feuille de calcul qui ont été récupérées sous forme de plage.
  • Extrait de l'extrait de code (non testé) ci-dessous pour la dernière étape.

    Excel.Range allCellsRng;
    string lowerRightCell = "IV65536";
    allCellsRng = ws.get_Range("A1", lowerRightCell).Cells;
    foreach (Range cell in allCellsRng)
    {
        if (null == cell.Value2 || isBlank(cell.Value2))
        {
          // Do something.
        }
        else if (isText(cell.Value2))
        {
          // Do something.
        }
        else if (isNumeric(cell.Value2))
        {
          // Do something.
        }
    }

Pour Excel 2007, essayez de cette référence MSDN .

Il existe plusieurs méthodes pour y parvenir, chacune d’elles présentant des avantages et des inconvénients; Tout d’abord, vous aurez besoin d’une instance d’un objet de feuille de calcul, Application.ActiveSheet fonctionnera si vous ne voulez que celui que l’utilisateur recherche.

L'objet de feuille de calcul comporte trois propriétés permettant d'accéder aux données de cellule (cellules, lignes, colonnes) et une méthode permettant d'obtenir un bloc de données de cellule (get_Range).

Les plages peuvent être redimensionnées et autres, mais vous devrez peut-être utiliser les propriétés mentionnées ci-dessus pour savoir où se trouvent les limites de vos données. L'avantage d'une plage devient évident lorsque vous travaillez avec de grandes quantités de données, car les compléments VSTO sont hébergés en dehors des limites de l'application Excel elle-même. Par conséquent, tous les appels à Excel doivent être passés via une couche avec surcharge. L’obtention d’une plage vous permet d’obtenir / définir toutes les données souhaitées en un seul appel, ce qui peut avoir d’énormes avantages en termes de performances, mais vous devez utiliser des détails explicites plutôt que de parcourir chaque entrée.

Ce message de forum MSDN montre un site VB.Net. développeur posant une question sur l'obtention des résultats d'une plage sous forme de tableau

En gros, vous pouvez effectuer une boucle sur une plage

Obtenir une feuille

myWs = (Worksheet)MyWb.Worksheets[1];

Obtenez la plage qui vous intéresse Si vous voulez vraiment vérifier chaque cellule, utilisez les limites d'Excel

  

Excel 2007 " Big Grid " augmente   le nombre maximum de lignes par   feuille de travail de 65 536 à plus de 1   millions, et le nombre de colonnes   de 256 (IV) à 16 384 (XFD).   à partir d'ici http://msdn.microsoft.com/en-us/ bibliothèque / aa730921.aspx # Office2007excelPerf_BigGridIncreasedLimitsExcel

puis passez en boucle sur la plage

        Range myBigRange = myWs.get_Range("A1", "A256");

        string myValue;

        foreach(Range myCell in myBigRange )
        {
            myValue = myCell.Value2.ToString();
        }

Dans Excel VBA, cette fonction vous donnera le contenu de toutes les cellules d'une feuille de calcul.

Function getCellContent(Byref ws As Worksheet, ByVal rowindex As Integer, ByVal colindex As Integer) as String
    getCellContent = CStr(ws.Cells(rowindex, colindex))
End Function

Donc, si vous souhaitez vérifier la valeur des cellules, placez simplement la fonction dans une boucle, donnez-lui la référence à la feuille de calcul souhaitée, ainsi que l'index des lignes et des colonnes de la cellule. Les index de ligne et de colonne commencent tous deux à partir de 1, ce qui signifie que la cellule A1 sera ws.Cells (1,1), etc.>.

Mes compétences en matière de VBA sont un peu rouillées, mais c’est l’idée générale de ce que je ferais.
La façon la plus simple de procéder consiste à parcourir une boucle pour chaque colonne:

public sub CellProcessing()
on error goto errHandler

    dim MAX_ROW as Integer   'how many rows in the spreadsheet
    dim i as Integer
    dim cols as String

    for i = 1 to MAX_ROW
        'perform checks on the cell here
        'access the cell with Range("A" & i) to get cell A1 where i = 1
    next i

exitHandler:
    exit sub
errHandler:
    msgbox "Error " & err.Number & ": " & err.Description
    resume exitHandler
end sub

Il semblerait que la coloration syntaxique des couleurs ne soit pas adaptée à vba, mais nous espérons que cela vous aidera (vous aurez au moins un point de départ sur lequel travailler).

  • Brisketeer
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top