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/à l'aise avec le concept de "gamme". 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)
Je vous remercie.
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
Trouvé cet extrait sur http://www.Java2s.com/Code/VBA-Excel-Access-Word/Excel/Checksvaluesinarange10rowsby5columns.htm Il semble être très utile en tant que 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 les cellules.
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 frappera tout dans la plage de A1 à la dernière cellule avec des données (la cellule en bas à droite)
Si vous regardez simplement les valeurs des cellules, vous pouvez stocker les valeurs dans un tableau de type variant. Il semble que l'obtention de la valeur d'un élément dans un tableau puisse être beaucoup plus rapide que l'interaction avec Excel, vous pouvez donc voir 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 vérifiant 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 façon de procéder 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. Comprendre le modèle d'objet Excel du point de vue d'un développeur Visual Studio 2005
Vous devrez essentiellement effectuer les opérations suivantes:
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 cette référence MSDN .
Vous pouvez essentiellement boucler sur une plage
Obtenez 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
La "grande grille" d'Excel 2007 fait passer le nombre maximal de lignes par feuille de calcul de 65 536 à plus d'un million et le nombre de colonnes de 256 (IV) à 16 384 (XFD). d'ici http://msdn.Microsoft.com/en-us/library/aa730921.aspx#Office2007excelPerf_BigGridIncreasedLimitsExcel
puis en boucle sur la plage
Range myBigRange = myWs.get_Range("A1", "A256");
string myValue;
foreach(Range myCell in myBigRange )
{
myValue = myCell.Value2.ToString();
}
Il existe plusieurs méthodes pour y parvenir, chacune ayant ses avantages et ses inconvénients; Tout d'abord, vous aurez besoin d'avoir une instance d'un objet Worksheet, Application.ActiveSheet fonctionne si vous voulez juste celui que l'utilisateur regarde.
L'objet Worksheet a trois propriétés qui peuvent être utilisées pour accéder aux données de cellule (Cellules, Lignes, Colonnes) et une méthode qui peut être utilisée pour 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, de sorte que 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 que vous souhaitez en un seul appel, ce qui peut avoir d'énormes avantages en termes de performances, mais cela vous oblige à utiliser des détails explicites plutôt que d'itérer à travers chaque entrée.
Ce message sur le forum MSDN montre un développeur VB.Net posant une question sur l'obtention des résultats d'une plage sous forme de tableau
Mes compétences 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 semble que la mise en évidence de la syntaxe des couleurs n'aime pas vba, mais j'espère que cela vous aidera quelque peu (au moins vous donnera un point de départ à partir duquel travailler).
Dans Excel VBA, cette fonction vous donnera le contenu de n'importe quelle cellule dans n'importe quelle 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 voulez vérifier la valeur des cellules, mettez simplement la fonction dans une boucle, donnez-lui la référence à la feuille de calcul que vous voulez et à l'index de ligne et à l'index de colonne de la cellule. L'index de ligne et l'index de colonne commencent tous deux à partir de 1, ce qui signifie que la cellule A1 sera ws.Cells (1,1) et ainsi de suite.