06. september 2006 - 06:21
#7
Prøv denne:
Private Sub CommandButton3_Click()
Dim MitRange
Sheets("ny").Copy After:=Sheets("tal")
Set NewSheet = ActiveSheet
NewSheet.Visible = True
'FindTal sætte til den værdi du skriver
FindTal = Application.InputBox( _
Prompt:="Skriv tallet du søger", _
Title:="Find nummeret du skriver:", Type:=2)
If FindTal <> False And IsNumeric(FindTal) Then 'checker om du skrev noget og om det er et tal. "And IsNumeric(FindTal)" skal udelukkes hvis du vil kunne søge på andet end tal
Fejl = 0
For Each ws In Worksheets 'går alle arknavne igennem
If ws.Name = FindTal Or Left(ws.Name, 6 + Len(FindTal)) = (FindTal & " (Kopi") Then 'hvis arknavn findes tælles op
Fejl = Fejl + 1
End If
Next
If Fejl > 0 Then
NewSheet.Name = FindTal & " (Kopi" & Fejl & ")"
Else
NewSheet.Name = FindTal
End If
MitRange = Sheets("Tal").Range("A2:P6000") 'laver et array ved navn MitRange
KolonneTal = UBound(MitRange) 'finder længden på dit array
Application.ScreenUpdating = False 'slår skærmopdatering fra
LTal = Len(FindTal) 'finder ud af hvor langt tallet er
For i = 1 To KolonneTal
If Left(MitRange(i, 1), LTal) = FindTal And Not IsNumeric(Mid(MitRange(i, 1), LTal + 1, 1)) Then
step = step + 1
IAlt = IAlt + 1
Sheets("Ny").Cells(step + 1, 1).Value = MitRange(i, 1)
NewSheet.Cells(step + 1, 1).Value = MitRange(i, 1)
NewSheet.Cells(step + 1, 3).Value = MitRange(i, 14)
NewSheet.Cells(step + 1, 4).Value = MitRange(i, 3)
NewSheet.Cells(step + 1, 5).Value = MitRange(i, 4)
NewSheet.Cells(step + 1, 6).Value = MitRange(i, 5)
NewSheet.Cells(step + 1, 7).Value = MitRange(i, 6)
NewSheet.Cells(step + 1, 8).Value = MitRange(i, 7)
NewSheet.Cells(step + 1, 9).Value = MitRange(i, 8)
NewSheet.Cells(step + 1, 10).Value = MitRange(i, 9)
NewSheet.Cells(step + 1, 11).Value = MitRange(i, 10)
NewSheet.Cells(step + 1, 12).Value = MitRange(i, 11)
NewSheet.Cells(step + 1, 13).Value = MitRange(i, 12)
NewSheet.Cells(step + 1, 14).Value = MitRange(i, 16)
End If
Next
MsgBox ("Der blev overført " & IAlt & " celleværdier.")
NewSheet.Range("B1").Select
NewSheet.Range("M1:M" & NedersteCelle + 1).Select 'vælger det område der er værdier i
NewSheet.Range("A1:N" & NedersteCelle + 1).Sort Key1:=NewSheet.Range("M2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Dim RankArray
RankArray = NewSheet.Range("A2:N" & IAlt + 1)
Dim Skift
Dim test As Variant
test = Array("AKTIV KUNDE", "NY KUNDE", "REAKTIVERET KUNDE", "INAKTIV KUNDE", "MARKEDSKUNDE")
ReDim Temp(14)
N = UBound(RankArray)
For XY = 0 To 4
For i = 1 To N - 1
For j = i To N
If UCase(Left(RankArray(i, 13), Len(test(XY)))) = test(XY) Then
For Skift = 1 To 14
Temp(Skift) = RankArray(i, Skift)
RankArray(i, Skift) = RankArray(j, Skift)
RankArray(j, Skift) = Temp(Skift)
Next
End If
Next
Next
Next
NewSheet.Range("A2:N" & IAlt + 1) = RankArray
MArray = NewSheet.Range("M2:M" & IAlt + 1)
Dim NotOk
NotOk = 1
Do While NotOk < IAlt + 1
NotOk = NotOk + 1
If UCase(Left(MArray(NotOk, 1), 13)) = "INAKTIV KUNDE" Then
Fundet = NotOk + 1
NotOk = IAlt + 1
End If
Loop
For RkLoop = 1 To 5
NewSheet.Rows(Fundet & ":" & Fundet).Select
Selection.Insert Shift:=xlDown
Next
NewSheet.Range("A1:N" & Fundet - 1).Sort Key1:=NewSheet.Range("G2"), Order1:=xlAscending, Key2:=NewSheet.Range( _
"F2"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _
:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal
NewSheet.Range("A" & Fundet + 5 & ":N" & IAlt + 5).Sort Key1:=NewSheet.Range("G" & Fundet + 5), Order1:=xlAscending, Key2:= _
NewSheet.Range("F" & Fundet + 5), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal
MsgBox "Færdig"
Else
MsgBox "Du skrev ikke et tal!" & vbLf _
& "Jeg stopper her :-)"
End If
Application.ScreenUpdating = True
End Sub
Den afsluttende sortering er jeg lidt i tvivl om jeg har forstået rigtigt. Men prøv!
06. september 2006 - 11:53
#10
Det skulle bare være således:
If Left(MitRange(i, 1), LTal) = FindTal And Not IsNumeric(Mid(MitRange(i, 1), LTal + 1, 1)) Then
rettes til
If Left(MitRange(i, 12), LTal) = FindTal And Not IsNumeric(Mid(MitRange(i, 12), LTal + 1, 12)) Then
(Har ikke testet)