webForumDet fria alternativet

Excel: Dölja rader med endast nummer?

5 svar · 1 390 visningar · startad av Masten

MastenMedlem sedan feb. 20079 inlägg
#1

Hej!

Jag använder mig av ett makro som döljer rader om en viss cell i en viss kolumn innehåller text. Det ser ut så här:

Sub DoljTotalrader_planlista()
  On Error Resume Next
  Range("c6:c300").SpecialCells(xlBlanks, _
      xlTextValues).EntireRow.Hidden = True
  Range("c6:c300").SpecialCells(xlConstants, _
      xlTextValues).EntireRow.Hidden = True
  Range("c6:c300").SpecialCells(xlFormulas, _
      xlTextValues + xlErrors + xlLogical).EntireRow.Hidden = True
  On Error GoTo 0
End Sub

Nu skulle jag vilja dölja de rader som innehåller tal, medans de rader som innehåller text eller text och tal inte ska påverkas. Hjälp, någon? :stud

MindreVetandeMedlem sedan okt. 2005371 inlägg
#2

Det är väl bara att byta ut xlTextValues mot xlNumbers? Elelr missförstår jag något? Typ:

Sub DoljTotalrader_planlista()
  Range("c6:c300").SpecialCells(xlConstants, _
      [red]xlNumbers[/red]).EntireRow.Hidden = True
  Range("c6:c300").SpecialCells(xlFormulas, _
      [red]xlNumbers[/red]).EntireRow.Hidden = True
End Sub
MastenMedlem sedan feb. 20079 inlägg
#3

Jag provade det du skrev men det vill sig inte. Området med siffror som jag vill dölja är länkat till ett annat dataområde så cellerna innehåller ju egentligen inga siffror, det tänkte jag inte på tidigare. Jag försöker lösa problemet själv, men jag är tacksam för all hjälp jag kan få :)

MindreVetandeMedlem sedan okt. 2005371 inlägg
#4

Masten skrev:

...är länkat till ett annat dataområde så cellerna innehåller ju egentligen inga siffror,

Det skall den andra delen av ta hand om. En länk är ju en formel. Det fungerade hos mig i alla fall:

Range("c6:c300").SpecialCells(xlFormulas, _
xlNumbers).EntireRow.Hidden = True

Det är samma sak som att markera c6:c300 och använda
Redigera->gå till->special, Formel, tal

Du kan väl testa och se om du hittar något som klarar av att markera det du vill dölja. Sen är det bara att använda Makroinspelaren.

Testar igen. Jo, det verkar fungera. Skumt.
Jag kan få samma fel. Men då måste jag länka med
=TEXT()
Eller skriva in orginalsiffrorna som text

Hur länkar du? är det siffror inskrivna som text, eller vad?
Om ja, testa att konvertera dina "texttal" till siffror. T.ex genom att skriva in en 1:a i en cell, kopiera, markera dina "texttal" och klistra in special->multiplicera. Eller använda Data->text till kolumn

Ähh, exprimentera och se vad som händer.
/MV

MastenMedlem sedan feb. 20079 inlägg
#5

Hmm, nu började det fungera helt plötsligt, vetefasen vad jag ändrade :OO
Nåväl, tack för din hjälp iaf!

Bara för att vara lite extra jobbig skulle jag även behöva hjälp med ett makro som tar bort rader som innehåller nollor. Även dessa är länkade (typ "=leveransplan!D4"). Jag har bland annat provat med följande makro:

Sub RemoveZero()
    Dim RngColD As Range
    Dim c As Long
    Application.ScreenUpdating = False
    Set RngColD = Sheets("Pricklista").Range("d5:d300", Sheets("Pricklista").Range("d" & Rows.Count).End(xlUp))
    For c = RngColD.Count To 1 Step -1
        'RngColD(c).Value = Application.Trim(RngColAB(c))
        If RngColD(c).Value = 0 Then _
            RngColD(c).EntireRow.Hidden = True
    Next c
    Application.ScreenUpdating = True
End Sub

Det fungerar för att dölja raderna med nollor, men om jag ändrar RngColD(c).EntireRow.Hidden = True till RngColD(c).EntireRow.Delete så hamnar Excel i någon form av oändlig loop.

Jag har även testat följande makro

Sub RaderaNollrader()
    On Error Resume Next     ' In case there are no blanks
    Sheets("Pricklista").Range("d5:d300").Replace 0, "", xlWhole
    Sheets("Pricklista").Range("d5:d300").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End Sub

vilket får Excel att arbeta en stund men utan synbar förändring.

Hjälp, kom?

MindreVetandeMedlem sedan okt. 2005371 inlägg
#6

Du har en konstig "SET"
Om jag ändrar raden:
Set RngColD = Sheets("Pricklista").Range("d5:d300", Sheets("Pricklista").Range("d" & Rows.Count).End(xlUp))
Till
Set RngColD = Sheets("Pricklista").Range("d5", Sheets("Pricklista").Range("d" & Rows.Count).End(xlUp))
så verkar det fungera för mig

Variant 2 fungerar inte alls.
Om man SÖKER "manuellt" så kan den hitta länkade 0:or om man ber excel att söka i "värde" (Excel 2000). Men så fort man går över i "ersätt" så verkar den inställningen stängas av.

Du kan testa en variant som använder sök och raderar. Det här är en lätt omskriven variant av VBA-hjälpens exempel för .Find :

Sub tjosan()
Dim c As Range

With Sheets("Pricklista").Range("D5:D300")
Set c = .Find(What:="0", LookIn:=xlValues, _
    LookAt:=xlWhole, SearchDirection:=xlPrevious)
    
    If Not c Is Nothing Then
        Do
            c.EntireRow.Delete
            Set c = .FindPrevious
        Loop While Not c Is Nothing
    End If
End With
End Sub

Obs att den går "baklänges" för att slippa problem med raderade rader. Verkar fungera i alla fall

132 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)