Ta bort celler med hjälp av en ”For Each Next”-slinga…Next”-slinga i Excel

  • 9/28/2020
  • 3 minuter att läsa
    • s
    • C
    • A
  • Gäller för: Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Office Excel 2002, Excel 97

Note

Office 365 ProPlus byter namn till Microsoft 365 Apps for enterprise. Mer information om den här ändringen finns i det här blogginlägget.

Sammanfattning

Microsoft Excel 2002 och senare versioner av Excel raderar celler i en ”För varje…nästa”-slinga på ett annat sätt än vad Microsoft Excel 97 och tidigare versioner av Excel gör.

Denna artikel beskriver skillnaderna och innehåller ett makroexempel i Visual Basic for Applications som illustrerar hur man raderar celler i en slinga.

Mer information

Microsoft tillhandahåller programmeringsexempel endast för att illustrera, utan uttrycklig eller underförstådd garanti. Detta inkluderar, men är inte begränsat till, de underförstådda garantierna för säljbarhet eller lämplighet för ett visst ändamål. Den här artikeln förutsätter att du är bekant med det programmeringsspråk som demonstreras och med de verktyg som används för att skapa och felsöka procedurer. Microsofts supporttekniker kan hjälpa till att förklara funktionaliteten hos en viss procedur. De kommer dock inte att ändra de här exemplen för att tillhandahålla ytterligare funktionalitet eller konstruera procedurer för att uppfylla dina specifika krav.

Sampeldata

För att använda makrot i den här artikeln skriver du följande exempeldata i ett kalkylblad:

A1: a B1: 1A2: b B2: 2A3: x B3: 3A4: x B4: 4A5: c B5: 5A6: x B6: 6A7: d B7: 7A8: x B8: 8A9: x B9: 9A10: e B10: 10

Sampelmakro

I en ny makromodul skriver du följande makro.

Hantering av exempelmakrot i Excel 2002 och i senare versioner av Excel

När du kör makrot DeleteCells i Excel 2002 och i senare versioner av Excel tas endast raderna 3, 6 och 8 bort. Även om raderna 4 och 9 innehåller ett ”x” i kolumn A raderar makrot inte raderna. Resultaten av makrot är följande:

A1: a B1: 1A2: b B2: 2A3: x B3: 4A4: c B4: 5A5: d B5: 7A6: x B6: 9A7: e B7: 10

När Microsoft Excel raderar rad 3 flyttas alla celler upp en rad. Exempelvis tar cell A3 över innehållet i cell A4, cell A4 tar över innehållet i cell A5 och så vidare. När slingan For Each…Next utvärderar en cell utvärderar den nästa cell; när cellerna flyttas kan de därför hoppa över av slingan.

Beteende hos exempelmakron i Microsoft Excel 5.0 och Microsoft Excel 7.0

När du kör makrot DeleteCells i Excel 5.0 och Excel 7.0 raderar makrot alla rader som innehåller ett ”x”. Resultaten av makrot är följande:

A1: a B1: 1A2: b B2: 2A3: c B3: 5A4: d B4: 7A5: e B5: 10

När rad 3 tas bort flyttas alla celler upp en rad. Då övertar cell A3 innehållet i cell A4, cell A4 övertar innehållet i cell A5 och så vidare.

Till skillnad från loopens beteende i Excel 2002 och i senare versioner av Excel utvärderar loopen ”For Each…Next” en cell i Excel 5.0 och Excel 7.0 och omvärderar loopen cellen på nytt om den raderas i loopen. Därför hoppas cellerna inte över.

Rekommenderad metod för att använda en slinga för att ta bort celler

Använd följande makro när du vill använda en slinga för att ta bort celler:

Resultaten av det här makrot i alla Excel-versioner är följande:

A1: a B1: 1A2: b B2: 2A3: c B3: 5A4: d B4: 7A5: e B5: 10

Tilläggsmetod för att använda en slinga för att ta bort celler

Det här är en alternativ metod till den metod som visas ovan. Metoden ger samma resultat.

Lämna ett svar

Din e-postadress kommer inte publiceras.