Just nu i M3-nätverket
Gå till innehåll

Excel VBA koll om cellområde är tomt


Tommy H

Rekommendera Poster

Hej!

Jag skulle vilja kontrollera om ett cellområde är tomt.

Jag har följande kod, men det måste finnas något bättre sätt än att kontrollera varje enskild cell i området.

With C
    Dim myCell As Range
    Dim MyRn2 As Range
    Set MyRn2 = Range(.Offset(0, 5), .Offset(4, 16))


    For Each myCell In MyRn2
        If myCell = "" Then
            .Offset(0, 14).Value = "RESERV"
        End If
    Next myCell
      
End With

 

Det ska givetvis till lite mer runt omkring sedan men jag behöver ha koll på om det är tomt eller ej!

/Tommy

Länk till kommentar
Dela på andra webbplatser

Hmmm....

Ja, funktionerna har jag ju bry att få att fungera...

Det jag vill är att få bekräftat om det finns något i mitt område för i så fall ska jag söka vidare till nästa, annars om det är tomt så ska något annat ske.

Dvs. jag kommer att gå vidare med en "If-sats" som baseras på typ sant eller falsk för innehållet i mitt område.

Det känns ju tungt att behöva "räkna" eller kontrollera, ja vad blir det 15x4=60st celler för varje område.

Men visst, tanken är ju god!

Hur gör jag med ditt förslag?

kan jag bara lägga in den raden i min kod?

måste inte funktionen då ligga i en egen modul?

(som sagt jag kan inte det här med funktionerna)

/Tommy

 

Länk till kommentar
Dela på andra webbplatser

Ja, det fungerar precis som jag önskade, och så enkelt med bara en rad kod!

Stort tack!

/Tommy

Länk till kommentar
Dela på andra webbplatser

Hej!

Jag återkommer till "IF WorksheetFunction.CountA(MyRn2) >0 then".

Det fungerar klockrent utom i vissa fall då funktionen visar (via felbevakningen) att det kan ge svaret 2, 3 eller 4 trots att Myrn2 är tomt.

Det ligger något gammalt dolt kvar i cellerna som inte syns.

Något tips hur man kommer runt det?

Kan man ev. räkna om det finn "text" istället för om det är "något" i cellen, eller?

/Tommy

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

Är det något du vill göra med det aktuella området eftersom du vill kontrollera om det är tomt eller inte? Jag tänker mig att det i så fall kanske är mer rakt på sak att helt enkelt med kod definiera området explicit som tomt och därefter har du någon kod som gör vad du önskar med området ifråga.

Något i stil med:

Worksheets("SheetName").Range("A1:B10").ClearContents

 

Länk till kommentar
Dela på andra webbplatser

Hej Ove!

Det jag vill uppnå är att om det inom min MyRn2 är helt tomt så ska jag lägga till text i 2st celler, annars så stegar jag vidare via Find-funktion.

MyRn2 består ju av 12 kolumner och 4 rader = 48 celler, så det är ju ett smidigt sätt att se om dessa är tomma!

Tråkigt bara att cellerna är "visuellt" tomma men ändå kan innehålla något som räknas i "IF WorksheetFunction.CountA(MyRn2) >0".

Jag verkar behöva .ClearContents också för att rensa bort det osynliga, men för att göra det så måste ju området MyRn2 vara tomt annars raderas ju det som ska vara kvar.

Lite Moment 22?

 

Länk till kommentar
Dela på andra webbplatser

Ove Söderlund

Har du kunnat konstatera exakt vad som är i de celler som innehåller något "osynligt"? Är det mellanslagstecken, formler eller något annat?

 Den här sidan kan ge dig lite mer tips - jag funderar på om inte du skulle ha nytta av .Formula-satsen som finns som första exempel:

https://sitestory.dk/excel_vba/cell_testing.htm

 

'The following control tests if a cell is empty
'by testing the length of what may be in the cell.
'Therefore we use the property "Formula"
'instead of "Value". If you used "Value",
'it would say the cell is empty, even if
'it contains spaces/blanks.
If Len(rCell.Formula) = 0 Then
   MsgBox "Cell " & rCell.Address & " is empty."
End If

 

Länk till kommentar
Dela på andra webbplatser

=ANTAL(A1:B10) (räknar siffror) ger svaret 0

=ANTALV(A1:B10) (räknar allt innehåll, även tomma formler) ger svaret 22

=ANTAL.OM(A1:B10;"*")  (verkar bara räkna formler med synligt innehåll) ger svaret 22

Koden:   

Dim test As Variant
    Set test = MyRn2.Find(What:="*", LookIn:=xlValues)
    If test Is Nothing Then
        MsgBox "MyRn2 är tomt"
    End If  ger svaret 0

Ja, jag kunde inte vänta med att sätta in koden i verkligheten och den jobbar precis som önskat!

Snyggt lösning och Stort Tack!

(sedan kan man ju undra vad dom 22st träffarna enligt formlerna är för något, men det tar vi en annan gång)

Jag har tyvärr delat ut min "tumme upp" redan!

/Tommy

 

Länk till kommentar
Dela på andra webbplatser

Ja, det går ju inte att vänta på att det ska bli tråkigt.

Kollade och det ger #VÄRDEFEL! från alla cellerna!

Lite skumt dock för i H & I-kolumnen så är det rödmarkerad text medan övrig är svarta som vanligt...

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...