• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Nul-waarde kopieert mee in VBA, en dat wil ik niet...

Status
Niet open voor verdere reacties.

Excelbat

Gebruiker
Lid geworden
23 mrt 2012
Berichten
405
Hi Allen,

Zie bijlage. In bereik A1:D6 staan mijn oorspronkelijke gegevens. Met VBA kopieer ik deze naar F2:H6.
Ik wil echter niet dat de 0-waarde uit cel B4 meegekopieerd wordt, en toch verschijnt deze in cel F4. Wat doe ik fout?
En dan nog een vraagje: stel dat ik waarden tussen 1 en 5 niet mee wil kopiëren, hoe verwerk ik dat dan?

Code:
Sub Vermenig()
Dim Selrange As Range
Set Selrange = Range("B2:D6")
Set Headerrange = Range("B1:D1")
Set Rijrange = Range("A2:A6")
Application.ScreenUpdating = False
SN = Selrange.Value
HN = Headerrange.Value
RN = Rijrange.Value

R = UBound(SN)
K = UBound(SN, 2)
    For K = K To 1 Step -1: R = UBound(SN)
        For R = R To 1 Step -1
            If IsNumeric(SN(R, K)) And Not (SN(R, K)) = 0 And Not SN(R, K) = "" Then
            SN(R, K) = RN(R, 1) & " " & SN(R, K) & " " & HN(1, K)
            Else
            SN(R, K) = SN(R, K)
            End If
            Next R
    Next K
    ActiveSheet.Cells(2, 6).Resize(UBound(SN), UBound(SN, 2)) = SN
Application.ScreenUpdating = True
End Sub

Bekijk bijlage CelTigAantalKopierenViaArrayExcelbat.xlsb

Bedankt voor jullie hulp!

Greetz/Excelbat
 
Code:
Else
            SN(R, K) = "" 'SN(R, K)
 
Anders gechreven

Code:
Option Base 1
Sub VenA()
With Sheets("Blad1")
    ar = .Cells(1).CurrentRegion
    ReDim ar1(UBound(ar) - 1, UBound(ar, 2) - 1)
    For j = 2 To UBound(ar)
        For jj = 2 To UBound(ar, 2)
            If IsNumeric(ar(j, jj)) And ar(j, jj) <> "" And ar(j, jj) <> 0 Then ar1(j - 1, jj - 1) = ar(j, 1) & ar(j, jj) & ar(1, jj)
        Next jj
    Next j
    .[J1].Resize(UBound(ar1), UBound(ar1, 2)) = ar1
End With
End Sub

Wat je met de waarden tussen 1 en 5 wilt bereiken kan ik uit het voorbeeldje niet opmaken.
 
Of:
Code:
Sub hsv()
Dim sn, i As Long, j As Long
sn = Cells(1).CurrentRegion
For i = UBound(sn) To 1 Step -1
 For j = UBound(sn, 2) To 1 Step -1
   sn(i, j) = IIf(IsNumeric(sn(i, j)) And sn(i, j) > 0, sn(i, 1) & " " & sn(i, j) & " " & sn(1, j), "")
   Next j
 Next i
Cells(2, 6).Resize(UBound(sn), UBound(sn, 2)) = sn
End Sub
 
#2 HSV: thanx, dit was inderdaad de oplossing die ik zocht.
#3 VenA: ik moet je suggestie nog even bestuderen. Ik heb het erg druk gehad, maar daar neem ik morgenavond effe de tijd voor.
En wat betreft tussen 1 en 5: ik bedoelde als SN(R, K)) niet gelijk aan nul is maar ergens tussen de 1 en 5. Thanx anyway voor je antwoord.
Code:
And Not (SN(R, K)) = 0
#4 HSV: ook dank voor deze. Ga ik morgenavond effe rustig voor zitten.

Greetz/Excelbat
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan