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

Excel VBA koll om cellområde är tomt

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

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

jag antar i exemplet att du är ute letar i område A1:E15

 

Om du hade kört formler skulle du förmodligen ha byggt på 

=ANTALV($A$1:$E$15)

OBS:Den räknar alla celler med formler ockskå, även om de returnerar ""

 

I VBA kan du antingen ropa på excelformeln:

WorksheetFunction.CountA(MyRn2)

 

Alternativt köra en FIND och räkna träffar.

Eller också försöker du hitta något slags VBA-motsvarighet till countA. Men eftersom du kör i excel kan du lika gärna använda excelfunktionen.

Dela detta inlägg


Länk till inlägg
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

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Du berättar att  de är en excelfunktion du vill  använda när du skriver WorksheetFunction.xxxxx  (egentligen Application.WorksheetFunction.xxx om du vill vara ordentlig). Så du petar bara in det i koden.

 

För att kolla om området är tom kollar du bara om antalet celler med innehåll är >0 

IF WorksheetFunction.CountA(MyRn2) >0 then

'*****Gör det du skall

end if

 

https://docs.microsoft.com/en-us/office/vba/api/excel.worksheetfunction

Det är ju väldigt smidigt eftersom du kan testa hur excelformeln funkar utan att köra VBA 

 

Dela detta inlägg


Länk till inlägg
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

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Ä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

 

Dela detta inlägg


Länk till inlägg
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?

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

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

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Kan du kolla runt med excelformlerna?

 

=ANTAL(A1:B10) (räknar siffror)

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

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

 

de beter sig olika.

 

En helt annan variant är att använda Excels sökfunktion och leta efter wildcard * och sök i: värden (om du står i  excel och trycker på sök ->alternativ så kan du välja att söka i formler eller värden). Om excel inte får någon träff (dvs området är tomt) blir resultatet Nothing. Det kan du använda i en IF-sats

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

 

Redigerad av MH_resurrected

Dela detta inlägg


Länk till inlägg
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

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

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

Om du får tråkigt (en annan gång)...

=KOD(A1)

kollar ascii-koden för det första tecknet i cell A1.

10=radbrytning

32=mellanslag

61= =

etc. Kan ge ledtrådar om vad det är som spökar.

 

Dela detta inlägg


Länk till inlägg
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...

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...