PDA

Vollständige Version anzeigen : von einer Spalte zur anderen "springen"


simsima12
30.07.2012, 13:28
Hallo zusammen,

habe folgendes Problem:
Habe mir eine Variable Name ( also dim Name as string)
diese soll sich aus zwei verschiedenen Spalten im gleichen Sheet die Einträge rausziehen. Also Spalte B hat die verschiedene Einträge, alles Namen und Spalte D hat nur vier Einträge, immer der Überbegriff und sonst nur leere Zeilen. Ich will nun dass die Variable Name sich den Überbegriff aus Spalte E zieht und dann alle Werte aus Spalte B, bis wieder Spalte E einen Eintrag hat. Dann wieder den Eintrag aus E und darunter wieder alle Einträge aus B bis Spalte B nicht leer ist.

Kann mir jemand bitte helfen

EarlFred
30.07.2012, 15:30
Hallo ?,

mal abgesehen davon, dass von VBA reservierte Begriffe ("Name") nicht als Variablennamen verwendet werden sollten: Ich verstehe ehrlich gesagt nicht, was passieren soll. Ein Beispiel (Tabelle) mit einer genaueren Beschreibung des gewünschten Ablaufs wäre hilfreich.

Grüße
EarlFred

Hasso
30.07.2012, 16:01
Hallo simsima,

ich weiß auch nicht, ob ich dein Problem so ganz richtig verstanden habe. Hier mal der Versuch einer Lösung:
<b>Namen</b><br /><br /><table border="1" cellspacing="0" cellpadding="0" style="font-family:Arial,Arial; font-size:10pt; background-color:#fffbf0; padding-left:2pt; padding-right:2pt; "> <colgroup><col style="font-weight:bold; width:30px; " /><col style="width:83.2px;" /><col style="width:27.2px;" /><col style="width:83.2px;" /><col style="width:22.4px;" /><col style="width:83.2px;" /></colgroup><tr style="background-color:#cacaca; text-align:center; font-weight:bold; font-size:8pt; "><td >&nbsp;</td><td >B</td><td >C</td><td >D</td><td >E</td><td >F</td></tr><tr style="height:22px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >1</td><td >Meier</td><td >&nbsp;</td><td >Arzt</td><td >&nbsp;</td><td >Meier (Arzt)</td></tr><tr style="height:22px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >2</td><td >M&uuml;ller</td><td >&nbsp;</td><td >&nbsp;</td><td >&nbsp;</td><td >M&uuml;ller (Arzt)</td></tr><tr style="height:22px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >3</td><td >Schulze</td><td >&nbsp;</td><td >&nbsp;</td><td >&nbsp;</td><td >Schulze (Arzt)</td></tr><tr style="height:22px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >4</td><td >Brandt</td><td >&nbsp;</td><td >&nbsp;</td><td >&nbsp;</td><td >Brandt (Arzt)</td></tr><tr style="height:22px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >5</td><td >Schmidt</td><td >&nbsp;</td><td >Handwerker</td><td >&nbsp;</td><td >Schmidt (Handwerker)</td></tr><tr style="height:22px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >6</td><td >J&auml;ger</td><td >&nbsp;</td><td >&nbsp;</td><td >&nbsp;</td><td >J&auml;ger (Handwerker)</td></tr><tr style="height:22px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >7</td><td >F&ouml;rster</td><td >&nbsp;</td><td >&nbsp;</td><td >&nbsp;</td><td >F&ouml;rster (Handwerker)</td></tr><tr style="height:22px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >8</td><td >Hauser</td><td >&nbsp;</td><td >&nbsp;</td><td >&nbsp;</td><td >Hauser (Handwerker)</td></tr><tr style="height:22px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >9</td><td >Walter</td><td >&nbsp;</td><td >Student</td><td >&nbsp;</td><td >Walter (Student)</td></tr><tr style="height:22px ;" ><td style="font-size:8pt; background-color:#cacaca; text-align:center; " >10</td><td >Dr&ouml;mel</td><td >&nbsp;</td><td >&nbsp;</td><td >&nbsp;</td><td >Dr&ouml;mel (Student)</td></tr></table> <br /><br /><span style="font-family:Arial; font-size:9pt; font-weight:bold;background-color:#ffffff; color:#000000; ">Excel Tabellen im Web darstellen &gt;&gt; </span><a style ="font-family:Arial; font-size:9pt; color:#fcf507; background-color:#800040; font-weight:bold;" href="http://www.excel-jeanie-html.de" target="_blank"> Excel Jeanie HTML 4 </a>



Der zugehörige Code:
Option Explicit
Public Sub NamenBilden()

Dim kombiname As String
Dim überbegriff As String
Dim i As Integer

With ActiveSheet
For i = 1 To 10
If .Cells(i, 4) <> "" Then überbegriff = .Cells(i, 4)
kombiname = .Cells(i, 2).Text & " (" & überbegriff & ")"
.Cells(i, 6) = kombiname
Next
End With

End Sub

simsima12
31.07.2012, 08:21
Erst einmal vielen dank,

aber was ich brauch ist was anderes. Also

Spalte B Spalte D
Wert1
Wert2
Wert3
Wert4
Wert5 WERT
XWert1
XWert2
XWert3 XWERT
YWert1
YWert2
YWert3 YWERT

Nun soll meine Variable Name so definiert werden , dass
WERT
Wert1
Wert2
Wert3
Wert4
Wert5
XWERT
XWert1
XWert2
XWert3
YWERT
YWert1
YWert2
YWert3

und dann soll diese Variable in ein anderes Workbook
Daher hatte ich folgenden Code :
Sub Test ()
dim reader as range
dim printer as range
dim name as string
dim i j f as integer

'Werte rauslesen
Sheets("Tabelle3").Select
Set reader = Range ("B5")
i = 0
While i< 14
if i = "0" then
Name = Range("D8")
else
Name = reader.offset(i,0).value
end if

'Werte in anderem Workbook eingeben
set printer =thisworkbook.Sheets("Tabelle1").Range("A2")
printer.offset(f+i,3) = Name
i =i+1
wend
end Sub

Aber wenn ich versuch mit if die einzelnen Positionen für Name festzulegen klappt das nicht.
Kann mir jemand da helfen bitte

simsima12
31.07.2012, 09:35
also das eigentliche Problem ist dass ich die variable Name wie folgt definieren will :
für i = 0
Name = Range(E14)
für 1<= i<8
Name = Range(B9:B15) ' aber durch offset(i,j)
für i = 8
Name = Range(E19)
für 9<= i<14 ' aber durch offset(i,j)
Name = Range(B16:B20)
für i =14
Name = Range(E23)
für 15<= i<19
Name = Range(B21:B24) ' aber durch offset(i,j)
für i = 19
Name = Range(E25)
für 20<= i < 22
Name = Range(B25:B26) ' aber durch offset(i,j)

Hasso
31.07.2012, 11:56
Hallo simsima,

ich werde aus deiner Beschreibung nicht schlau. Am Besten lädst du mal eine Beispielmappe hoch, in der man sehen kann, was die Ausganganssituation ist und wie das Ergebnis aussehen soll.

simsima12
31.07.2012, 12:06
da es sich um Kundendaten handelt ist dies leider nicht möglich.
Aber hab es jetzt mal so versucht :
elect Case i

Case "0"
Name = Range("E14")
Gewicht = Range("E15")
Syle = "B"

Case "1" To "7"
Name = reader.Offset(i + 3, -4).Value
Gewicht = reader.Offset(i + 3, -2).Value
Syle = ""

Case "8"
Name = Range("E19")
Gewicht = Range("E20")
Syle = "B"

Case "9" To "13"
Name = reader.Offset(i + 2, -4).Value
Gewicht = reader.Offset(i + 2, -2).Value
Syle = ""

Case "14"
Name = Range("E23")
Gewicht = Range("E24")
Syle = "B"

Case "15" To "18"
Name = reader.Offset(i + 1, -4).Value
Gewicht = reader.Offset(i + 1, -2).Value
Syle = ""

Case "19"
Name = Range("E25")
Gewicht = Range("E26")
Syle = "B"

Case "20" To "21"
Name = reader.Offset(i, -4).Value
Gewicht = reader.Offset(i, -2).Value
Syle = ""

Case "22"
Name = Range("A30")
Gewicht = Range("D30")
Syle = "B"

End Select

Leider klappt das auch nicht.

simsima12
31.07.2012, 12:09
Also mein Ziel ist es Name festzulegen. hierzu definiere ich i in bestimmten bereichen.
ich hoff durch diesBeschreibung wird es klarer

EarlFred
31.07.2012, 12:59
Hallo Name?,

ich hoff durch diesBeschreibung wird es klarer
nein. Die Beschreibung ist alles andere als klar - das wird auch nach mehrfacher Wiederholung der gleichen unklaren Sätze nicht anders.
Beispieltabellen beinhalten übrigens KEINE Firmendaten bzw. allgemein KEINE sensible Daten, sondern sind anonymisiert dargestellt und dienen allein dazu, das Problem zu erläutern!

Ich "rate" die Aufgabe so, dass Du versuchst, die Liste in Post #4 in eine durchgehende Liste zu übertragen. Die "Daten" kommen dabei aus Spalte B und die "Überschriften" für die Abschnitte immer an Ende eines Abschnitts in Spalte D. Richtig?

Vielleicht so:
Option Explicit
Sub simsalabim()
Dim i As Long, x As Long
Dim fAusgabe() As String


With ThisWorkbook.Worksheets("Tabelle3")

ReDim fAusgabe(1 To Application.CountA(.Range("B:B")) + Application.CountA(.Range("D:D")))

For i = 1 To .Cells(Rows.Count, 2).End(xlUp).Row
If .Cells(i, "D") > "" Then
fAusgabe(i + Application.CountA(.Range("D1:D" & i))) = .Cells(i, "B").Value
fAusgabe(Application.CountA(.Range("D1:D" & i)) + x) = .Cells(i, "D").Value
x = i
Else
fAusgabe(i + Application.CountA(.Range("D1:D" & i)) + 1) = .Cells(i, "B").Value
End If
Next i
End With

ThisWorkbook.Worksheets("Tabelle1").Range("A1").Resize(UBound(fAusgabe)) = Application.Transpose(fAusgabe)

End Sub

Dass "Name" ein schlechter Variablenbezeichner ist, hatte ich ja bereits geschrieben. Ich habe also Deinen Wunsch, die Variable dennoch so zu benennen, genauso ignoriert, wie Du meinen Hinweis. ;)

Grüße
EarlFred