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

Gegevens matchen

Status
Niet open voor verdere reacties.
Ik heb mij hier nog eens in vastgebeten en heb een VBA-code gemaakt die m.i. alles precies doet zoals gevraagd. Hij is alleen niet zo kort geworden omdat er diverse uitzonderingen afgehandeld worden (en bovendien ben ik wat minder bedreven in VBA dan sommige van mijn collega's ...). M.b.v. deze code wordt in kolom C op Blad2 de vertaling geplaatst. Wel moet op het toe te voegen Blad3 vanaf cel A1 een "tabel" worden gemaakt met de mogelijke maten onder elkaar, zoals bv. mm, cm

Code:
Option Explicit

Sub Peter()
Dim aIndex As Variant, aProd As Variant, aMaat As Variant, aTranslate As Variant
Dim i As Long, j As Long, iIndex As Long, iProd As Long, iMaat As Long, iMin As Long, iMax As Long, iNum As Long
Dim sProd As String, sMaat As String, sChar As String

aIndex = Blad1.Cells(1).CurrentRegion
aProd = Blad2.Cells(1).CurrentRegion
aMaat = Blad3.Cells(1).CurrentRegion
ReDim aTranslate(1 To UBound(aProd, 1))

For iProd = 2 To UBound(aProd, 1)
    iMin = 0
    iMax = 0
    sMaat = ""
    sProd = aProd(iProd, 1)
    For i = 1 To Len(sProd)
        sChar = Mid(sProd, i, 1)
        If IsNumeric(sChar) Then
            iMin = i
            Exit For
        End If
    Next i
    For i = Len(sProd) To 1 Step -1
        sChar = Mid(sProd, i, 1)
        If IsNumeric(sChar) Then
            iMax = i + 1
            Exit For
        End If
    Next i
    If iMin > 0 Then
        iNum = Len(Mid(sProd, iMax, Len(sProd))) - Len(Replace(sProd, " ", "", iMax, , vbTextCompare))
        sMaat = Mid(sProd, iMin, iMax - iMin)
        For i = 1 To UBound(aMaat, 1)
            If InStr(iMax, sProd, aMaat(i, 1), vbTextCompare) > 0 Then
                If iMax = InStr(iMax, sProd, aMaat(i, 1), vbTextCompare) Then
                    sMaat = sMaat & aMaat(i, 1)
                Else
                    sMaat = sMaat & " " & aMaat(i, 1)
                    iNum = iNum - 1
                End If
            End If
        Next i
        sProd = Replace(sProd, sMaat & " ", "", , , vbTextCompare)
        sProd = Replace(sProd, " " & sMaat, "", , , vbTextCompare)
    End If
    For i = 1 To UBound(aIndex, 1)
        If sProd = aIndex(i, 1) Then
            aTranslate(iProd) = aIndex(i, 2)
            If Len(sMaat) > 0 Then
                If iNum = 0 Then
                    aTranslate(iProd) = aTranslate(iProd) & " " & sMaat
                Else
                    For j = Len(aTranslate(iProd)) To 1 Step -1
                        If Mid(aTranslate(iProd), j, 1) = " " Then
                            iNum = iNum - 1
                            If iNum = 0 Then
                                Exit For
                            End If
                        End If
                    Next j
                    aTranslate(iProd) = Left(aTranslate(iProd), j) & " " & sMaat & " " & Right(aTranslate(iProd), Len(aTranslate(iProd)) - j)
                End If
            End If
            Exit For
        End If
    Next i
    
Next iProd

Blad2.Range("C1:C" & UBound(aTranslate)) = Application.Transpose(aTranslate)

End Sub
 
Ik heb mij hier nog eens in vastgebeten en heb een VBA-code gemaakt die m.i. alles precies doet zoals gevraagd. Hij is alleen niet zo kort geworden omdat er diverse uitzonderingen afgehandeld worden (en bovendien ben ik wat minder bedreven in VBA dan sommige van mijn collega's ...). M.b.v. deze code wordt in kolom C op Blad2 de vertaling geplaatst. Wel moet op het toe te voegen Blad3 vanaf cel A1 een "tabel" worden gemaakt met de mogelijke maten onder elkaar, zoals bv. mm, cm

Code:
Option Explicit

Sub Peter()
Dim aIndex As Variant, aProd As Variant, aMaat As Variant, aTranslate As Variant
Dim i As Long, j As Long, iIndex As Long, iProd As Long, iMaat As Long, iMin As Long, iMax As Long, iNum As Long
Dim sProd As String, sMaat As String, sChar As String

aIndex = Blad1.Cells(1).CurrentRegion
aProd = Blad2.Cells(1).CurrentRegion
aMaat = Blad3.Cells(1).CurrentRegion
ReDim aTranslate(1 To UBound(aProd, 1))

For iProd = 2 To UBound(aProd, 1)
    iMin = 0
    iMax = 0
    sMaat = ""
    sProd = aProd(iProd, 1)
    For i = 1 To Len(sProd)
        sChar = Mid(sProd, i, 1)
        If IsNumeric(sChar) Then
            iMin = i
            Exit For
        End If
    Next i
    For i = Len(sProd) To 1 Step -1
        sChar = Mid(sProd, i, 1)
        If IsNumeric(sChar) Then
            iMax = i + 1
            Exit For
        End If
    Next i
    If iMin > 0 Then
        iNum = Len(Mid(sProd, iMax, Len(sProd))) - Len(Replace(sProd, " ", "", iMax, , vbTextCompare))
        sMaat = Mid(sProd, iMin, iMax - iMin)
        For i = 1 To UBound(aMaat, 1)
            If InStr(iMax, sProd, aMaat(i, 1), vbTextCompare) > 0 Then
                If iMax = InStr(iMax, sProd, aMaat(i, 1), vbTextCompare) Then
                    sMaat = sMaat & aMaat(i, 1)
                Else
                    sMaat = sMaat & " " & aMaat(i, 1)
                    iNum = iNum - 1
                End If
            End If
        Next i
        sProd = Replace(sProd, sMaat & " ", "", , , vbTextCompare)
        sProd = Replace(sProd, " " & sMaat, "", , , vbTextCompare)
    End If
    For i = 1 To UBound(aIndex, 1)
        If sProd = aIndex(i, 1) Then
            aTranslate(iProd) = aIndex(i, 2)
            If Len(sMaat) > 0 Then
                If iNum = 0 Then
                    aTranslate(iProd) = aTranslate(iProd) & " " & sMaat
                Else
                    For j = Len(aTranslate(iProd)) To 1 Step -1
                        If Mid(aTranslate(iProd), j, 1) = " " Then
                            iNum = iNum - 1
                            If iNum = 0 Then
                                Exit For
                            End If
                        End If
                    Next j
                    aTranslate(iProd) = Left(aTranslate(iProd), j) & " " & sMaat & " " & Right(aTranslate(iProd), Len(aTranslate(iProd)) - j)
                End If
            End If
            Exit For
        End If
    Next i
    
Next iProd

Blad2.Range("C1:C" & UBound(aTranslate)) = Application.Transpose(aTranslate)

End Sub

Super! Het lijkt erop dat ik hiermee de slag kan gaan slaan. Door andere projecten kan ik helaas niet eerder dan volgende week checken. Maar net even een klein aantal gedaan en heeft het in haast alle uitzonderingen gedaan.
Behalve bij artikelen waar het begint met cijfers, maar wellicht doe ik wat fout. Volgende week laat ik het weten.

Super Thanks allemaal!!!! :d
 
Tsja ... Artikelen die beginnen met cijfers heb ik nog niet in de voorbeelden gezien. Blijkt maar weer hoe belangrijk een representatief voorbeeldbestand is ...

Overigens wordt het zinloos quoten niet op prijs gesteld.
 
Ik heb 'm nog even getest, maar starten met een getal mag ook. Alleen als er tussen de getallen tekst staat die mee moet in de vertaling dan gaat het idd. fout.
 
Sorry de quote was een soort bedankje, dat dit werkte.

Voor de artikelnamen ben ik inderdaad wel geholpen, deze uitzonderingen zijn wellicht nog te behappen.
Er zitten zoveel van dit soort rariteiten in, ik hou zo een 80 resultaten over die niet worden vertaald.
Deze heb ik ook inderdaad niet in de voorbeeldbestanden gedaan, ik heb 24.000 artikelnamen en dacht alle uitzonderingen wel gehad te hebben, maar helaas....

Het werkt niet met mijn beschrijvingen, zoals je al vermelde getallen tussen vertalingen gaan niet mee.
Eigenlijk wil ik hier hetzelfde mee, van de +24000 teksten blijven er maar 2300 over na weghalen maten en duplicaten. Dit scheelt nogal.

Ik heb een voorbeeldbestandje welke hopelijk alles dekt.

Bekijk bijlage Omschrijving_Forum.xls
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan