Domanda

Ho bisogno semplicemente di passare attraverso tutte le celle in un Foglio di calcolo di Excel e controllare i valori nelle celle.Le celle possono contenere testo, numeri o essere vuoto.Io non sono molto familiare / agio a lavorare con il concetto di "Campo".Pertanto, qualsiasi codici di esempio sarebbe molto apprezzato.(Ho provato a cercare su google, ma i frammenti di codice che ho trovato non riusciva a fare quello che mi serviva)

Grazie.

È stato utile?

Soluzione

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

Trovato questo snippet http://www.java2s.com/Code/VBA-Excel-Access-Word/Excel/Checksvaluesinarange10rowsby5columns.htm Sembra essere molto utile come funzione di illustrare i mezzi per controllare i valori nelle celle in un insieme ordinato di moda.

Basta immaginare come una Matrice 2d di sorta e applicare la stessa logica a loop attraverso le cellule.

Altri suggerimenti

Se avete solo bisogno di guardare le celle che sono in uso, è possibile utilizzare:

sub IterateCells()

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

End Sub

che ha colpito tutto il range da A1 fino all'ultima cella dati (in basso a destra della cella)

Se sei solo alla ricerca dei valori delle celle è possibile memorizzare i valori in un array di tipo variant.Sembra che ottenere il valore di un elemento di un array può essere molto più veloce di interagire con Excel, in modo che si può vedere una certa differenza in termini di prestazioni, utilizzando una matrice di tutti i valori della cella rispetto ripetutamente di ottenere cellule singole.

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

Poi si può ottenere il valore di una cella solo controllando ValArray( riga , colonna )

È possibile utilizzare una Per Ogni per scorrere tutte le celle in un intervallo definito.

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

Per il VB o C# app, un modo per farlo è tramite l'Ufficio di Interoperabilità.Questo dipende dalla versione di Excel che si sta lavorando con.

Per Excel 2003, questo articolo di MSDN è un buon posto per iniziare.Comprendere il Modello a Oggetti di Excel da Visual Studio 2005 di vista dello Sviluppatore

In pratica dovrai fare le seguenti cose:

  • Avviare l'applicazione Excel.
  • Aprire la cartella di lavoro di Excel.
  • Recuperare il foglio di lavoro della cartella di lavoro per nome o di un indice.
  • Scorrere tutte le Celle del foglio di lavoro che sono stati recuperati come un intervallo.
  • Esempio (non testato) estratto di codice qui di seguito per l'ultimo passo.

    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.
        }
    }

Per Excel 2007, tenta questo riferimento MSDN.

Ci sono diversi metodi per fare questo, ciascuno dei quali presenta vantaggi e svantaggi;In primo luogo, si sta andando ad avere bisogno di avere un'istanza di un oggetto Foglio di lavoro di Applicazione.ActiveSheet funziona se si desidera solo quello che l'utente sta guardando.

L'oggetto Foglio di lavoro ha tre proprietà che può essere utilizzato per accedere a cella dati (Celle, Righe, Colonne) e un metodo che può essere utilizzato per ottenere un blocco di cella dati (get_Range).

Gli intervalli possono essere ridimensionate e tale, ma potrebbe essere necessario utilizzare la proprietà di cui sopra per scoprire dove i confini dei tuoi dati sono.Il vantaggio di una Gamma diventa evidente quando si lavora con grandi quantità di dati, poiché i componenti aggiuntivi VSTO sono ospitati al di fuori dei confini di Excel applicazione stessa, in modo che tutte le chiamate di Excel deve essere superato attraverso un livello con in testa;ottenere una Gamma consente di ottenere o impostare tutti i dati che si desidera in una sola chiamata, che può avere enormi vantaggi di prestazioni, ma richiede l'uso di dettagli espliciti anziché scorrere ogni voce.

Questo post del forum MSDN mostra un VB.Net sviluppatore chiede una domanda su come ottenere i risultati di una serie come un array

Si può, in pratica, loop su una Gamma

Prendi un foglio

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

Ottenere la Gamma siete interessati dentro Se si vuole veramente a controllare ogni cella utilizzare Excel limiti

Excel 2007 "Grande Griglia" aumenta il numero massimo di righe per foglio di lavoro da 65.536 a oltre 1 milioni di, e il numero di colonne da 256 (IV) a 16.384 (XDA).da qui http://msdn.microsoft.com/en-us/library/aa730921.aspx#Office2007excelPerf_BigGridIncreasedLimitsExcel

e poi un ciclo su tutta la gamma

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

        string myValue;

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

In VBA di Excel, questa funzione vi darà il contenuto di una cella qualsiasi del foglio di lavoro.

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

Quindi, se si desidera controllare il valore di celle, basta inserire la funzione in un ciclo, di dare il riferimento al foglio di lavoro che si desidera e l'indice di riga e di colonna indice della cella.L'indice di riga e di colonna indice di entrambe partono da 1, il che significa che la cella A1 sarà ws.Cells(1,1) e così via.

La mia VBA abilità sono un po ' arrugginito, ma questa è l'idea generale di ciò che mi piacerebbe fare.
Il modo più semplice per farlo sarebbe quello di scorrere un anello per ogni colonna:

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

sembra che il colore di evidenziazione della sintassi non come vba, ma speriamo che questo vi aiuterà un po ' (almeno dare un punto di partenza per lavorare da).

  • Brisketeer
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top