Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
868to872
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
868to872
868to872
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Für Euch nur eine Kleinigkeit :-)

Für Euch nur eine Kleinigkeit :-)
13.05.2007 08:47:00
Michael
Hallo liebe Experten!
Gibt es die Möglichkeit alle Wörter einer Tabelle (A3:G1000) die länger als 5 Zeichen sind, in nur einer Zelle (A1) mit einem Leerzeichen getrennt aufzulisten?
Über eure Hilfe würde ich mich sehr freuen.
Danke: Michael

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Für Euch nur eine Kleinigkeit :-)
13.05.2007 09:01:50
Ramses
Hallo
Im Prinzip ja, ... aber wozu ? Was willst du denn erreichen
Das sind im Extremfall knapp 7000 Wörter bzw. mind. 35'000 Zeichen.
Da steigt EXCEL dann aus.
Gruss Rainer

AW: Für Euch nur eine Kleinigkeit :-)
13.05.2007 10:14:41
Michael
Hallo Rainer, ich brauche die Wörter aus den einzelnen Zellen für eine andere Anwendung, also nur in die Zwischenablage kopiert.
Gruß
Michael

AW: Für Euch nur eine Kleinigkeit :-)
13.05.2007 10:41:00
Erich
Hallo Michael,
der Code gehört in ein normales Modul. Wenn du das Makro "Texte_länger_5_in_Zwischenablage"
startest, wird die Zwischenablage gefüllt:

Option Explicit
Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function SetClipboardData Lib "user32" ( _
ByVal wFormat As Long, _
ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32" ( _
ByVal wFlags As Long, _
ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32" (ByVal hMem As Long) As Long
Private Declare Function lstrcpy Lib "kernel32" ( _
ByVal lpStr1 As Any, _
ByVal lpStr2 As Any) As Long
Private Const GMEM_MOVEABLE As Long = 2&
Private Const CF_TEXT As Long = 1&
Sub Texte_länger_5_in_Zwischenablage()
Const strTrenn As String = " "             ' oder z. B. vbCrLf
Dim rngC As Range, strSamm As String
For Each rngC In Range("A3:G1000")
If Len(rngC) > 5 Then strSamm = strSamm & rngC & strTrenn
Next rngC
If strSamm > "" Then _
StringToClipboard Left(strSamm, Len(strSamm) - Len(strTrenn))
End Sub
Private Sub StringToClipboard(s As String)
'  von Risi Thomas Softwareentwicklung   www.rtsoftwaredevelopment.de
Dim hMem As Long, hPtr As Long
hMem = GlobalAlloc(GMEM_MOVEABLE, Len(s) + 1)
hPtr = GlobalLock(hMem)
lstrcpy hPtr, s
GlobalUnlock hMem
OpenClipboard 0&
EmptyClipboard
SetClipboardData CF_TEXT, hMem
CloseClipboard
GlobalFree hMem
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Für Euch nur eine Kleinigkeit :-)
13.05.2007 13:42:00
Michael
Hallo Erich,
das Funktioniert schon Super!!!
Nur noch eine Kleinigkeit: Wenn in einer von den A3:G1000 Zellen mehrere Wörter stehen, sollen auch hier nur die mit mind. 5 Zeilen in die Zwischenablage.
Aber bisher, mein Respekt.
Gruß
Michael

AW: Für Euch nur eine Kleinigkeit :-)
13.05.2007 16:32:04
Josef
Hallo Michael,
probier diesen Code.
Sub Texte_länger_5_in_Zwischenablage()
Dim vVal As Variant, vTmp() As String, vH() As String
Dim lngR As Long, lngI As Long
Dim intC As Integer, intI As Integer

vVal = Range("A3:G1000")

For lngR = 1 To UBound(vVal, 1)
    For intC = 1 To UBound(vVal, 2)
        If Len(vVal(lngR, intC)) > 5 Then
            If InStr(1, vVal(lngR, intC), " ") > 0 Then
                vH = Split(vVal(lngR, intC), " ")
                For intI = 0 To UBound(vH)
                    If Len(vH(intI)) > 5 Then
                        Redim Preserve vTmp(lngI)
                        vTmp(lngI) = vH(intI)
                        lngI = lngI + 1
                    End If
                Next
            Else
                Redim Preserve vTmp(lngI)
                vTmp(lngI) = vVal(lngR, intC)
                lngI = lngI + 1
            End If
        End If
    Next
Next

If lngI > 0 Then StringToClipboard Join(vTmp, " ")

End Sub

Gruß Sepp

Anzeige
AW: alle Wörter in Zwischenablage
13.05.2007 17:20:00
Erich
Hallo Michael,
noch ne Möglichkeit:

Sub Texte_länger_5_in_Zwischenablage()
Const strTrenn As String = " "             ' oder z. B. vbCrLf
Dim rngC As Range, strW As String, arrS, ii As Integer, strSamm As String
For Each rngC In Range("A3:G1000")
If Len(rngC) > 5 Then
strW = Replace(rngC, " ", ",")
strW = Replace(strW, ".", ",")
strW = Replace(strW, "-", ",")
strW = Replace(strW, "/", ",")
strW = Replace(strW, vbCrLf, ",")
strW = Replace(strW, vbLf, ",")
strW = Replace(strW, vbCr, ",")
arrS = Split(strW, ",")
For ii = 0 To UBound(arrS)
If Len(arrS(ii)) > 5 Then strSamm = strSamm & arrS(ii) & strTrenn
Next ii
End If
Next rngC
If strSamm > "" Then StringToClipboard Left(strSamm, Len(strSamm) - Len(strTrenn))
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: alle Wörter in Zwischenablage
13.05.2007 19:08:45
Michael
Hallo Erich,
PERFEKT !
1000 Dank für die nette und kompetente Hilfe.
Viele Grüße
Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige