PNG32 PNG32 PNG32 PNG32
PNG32
Forum Excel, VBA, VSTO, Exceltips, Excelhj�lp PNG32 drivs av Excelspecialisten    Logga in     English
PNG32
PNG32 PNG32
PNG32

Logga in

PNG32

Du är inte inloggad. Logga in eller registrera dig för att skriva inlägg eller svara på inlägg.

För frågor om forumet, kontakta oss på webmaster@excelforum.se

PNG32 PNG32
PNG32 PNG32
PNG32

Excelforum

PNG32

 
ForumForumDiskussionerDiskussionerVBAVBAFunktionen If Funktionen If
Föregående Föregående
 
Nästa Nästa
Nytt inlägg
 2021-09-27 10:41
 

 Hej alla!

Har skrivit ett enkelt makro där JA i cell B10 ersätter sekretessbelagd info på samma rad med texten konfidentiellt i cellerna G10, S10 och T10. 

så här ser koden ut:       If Range("B10") = "JA" Then Range("G10, S10, T10").Value = "Konfidentiell"

 

 

Samma fråga upprepar sig på nästa rad och vidare till rad 999. Måste jag skriva in 989 rader av ovanstående, eller finns det ett enklare sätt?

 

Mvh, Micael P (Newbie) 

 

 

Nytt inlägg
 2021-09-27 11:41
 
offset är en VBA funktion som används för att förskjuta ett område (t.ex x rader ner från B10)
 
Kombineras med lämplig Loop funktion, t.ex For... next
 
 
Sub demo()
Dim i As Integer
 
For i = 0 To (999 - 10)
    If Range("B10").Offset(i, 0).Value = "JA" Then
        Range("G10, S10, T10").Offset(i, 0).Value = "Konfidentiell"
    End If
Next i
End Sub

999-10 är för att du börjar på rad 10. rätt onödigt... 
Din kod kräver just nu att det verkligen står "JA" med stora bokstäver. Jag skulle nog fixa det på något sätt, t.ex genom att omvandla texten i B-kolumnen till versaler (stora bokstäver) med hjälp av upperCase 
 
Sub demo()
Dim i As Integer
 
For i = 0 To (999 - 10)
    If UCase(Range("B10").Offset(i, 0).Value) = "JA" Then
        Range("G10, S10, T10").Offset(i, 0).Value = "Konfidentiell"
    End If
Next i
End Sub
 
 
 
Om du tycker att Offset känns knöligt så kan du adressera cellerna direkt med hjälp av kolumn och radnummer, typ:
Sub demo()
Dim i As Integer
 
For i = 10 To 999
    If UCase(Cells(i, 2).Value) = "JA" Then
        Cells(i, 7).Value = "Konfidentiell"
        Cells(i, 19).Value = "Konfidentiell"
        Cells(i, 20).Value = "Konfidentiell"
    End If
Next i
End Sub
 
 
Ja, du kan flå den här katten på en massa sätt (som di säger på utrikiska) men något slags loop som förskjuter "titta i" och "skriv i" verkar ofrånkommligt
 
Nytt inlägg
 2021-09-27 12:07
 

Tusen tack!

Supersnabbt svar och tänk så lätt det kan vara när man kan. :)

Bästa hälsningar, Micael 

 

 

Nytt inlägg
 2021-09-28 06:50
 

 Hej hej

Om det är möjligt ska man alltid läsa in i ett svep, och skriva ut i ett svep. Då går operationen väldigt mycket fortare. 

Lade till trim (tar bort mellanslag om någon snubblat på tangenter) och Ucase så man även kan skriva Ja, ja, jA :).

 

Option Explicit

Sub test()

Dim vnt As Variant

Dim i As Long

Dim rng As Range

    Set rng = Range("B10:T999")

    vnt = rng    

    For i = 1 To UBound(vnt, 1)

        If trim(UCase(vnt(i, 1))) = "JA" Then

            vnt(i, 6) = "Konfidentiell"

            vnt(i, 18) = "Konfidentiell"

            vnt(i, 19) = "Konfidentiell"

        End If

    Next i

    rng = vnt

 

End Sub

 
Föregående Föregående
 
Nästa Nästa
ForumForumDiskussionerDiskussionerVBAVBAFunktionen If Funktionen If

PNG32 PNG32
Excelforum drivs av Excelspecialisten som bedriver utbildning i Excel och VBA, tillhandahåller support och hjälp med Excel, utvecklar program i Excel. Är ni i behov av en konsult inom Excel, VBA eller VSTO, eller söker en excelkurs, kontakta oss.
Copyright 2013 ExcelSpecialisten XLS AB   Användarvillkor  Personliga uppgifter