Just nu i M3-nätverket
Gå till innehåll

Hitta cell med innehåll med VBA-makro


Bosse K

Rekommendera Poster

Hej MH_resurrected!

Tack för snabb respons. Din formel funkar bra som bas men jag behöver ändra x1Previous till något annat för att den ska funka för mig. Har ändrat förutsättningarna något och de finns i bifogade excel-fil.

Hoppas på din hjälp!:)

Bosse K

 

Copytest2.xlsx

Länk till kommentar
Dela på andra webbplatser

Tack MH_resurrected

Som du säkert redan insett har jag bara ytliga kunskaper i VBA. Stort tack för ditt senaste inlägg med förklaringar och färdiga makron. Innan jag fick den senaste infon hade jag dock lyckats få ihop ett makro som fixade det jag behövde. (trodde jag)

 

If ActiveCell.Column = 1 Then Selection.Value = Range("A:A").Find(What:="*", After:=Cells(1, 1), searchdirection:=xlPrevious).Value

If ActiveCell.Column = 2 Then Selection.Value = Range("B:B").Find(What:="*", After:=Cells(1, 2), searchdirection:=xlPrevious).Value

If ActiveCell.Column = 3 Then Selection.Value = Range("C:C").Find(What:="*", After:=Cells(1, 3), searchdirection:=xlPrevious).Value

 

Insåg dock, när jag testade skarpt, att detta inte var användbart utan behövde kompletteras ytterligare. Behöver troligen ha dom här If-raderna som grund då det är olika celler i andra kolumner som också ska kopieras ned till raden där den aktiva cellen finns. Det är f.n 5 varianter men kan komma att bli fler. Jag har exemplifierat vad jag behöver i bifogade fil och hoppas på din fortsatta hjälp.

Undrar också om du har kunskaper I C# då jag har ett framtida projekt där jag kan komma att behöva experthjälp.

Bosse K

Copytest3.xlsx

Länk till kommentar
Dela på andra webbplatser

Hej och stort tack MH_resurrected!

Har testat det första makrot du skrev idag och det funkade precis som jag tänkt. Din lösning med parad kolumn gör att jag slipper söka efter värden >1 i kolumner med en masa ettor. Fråga: Kan man para flera kolumner till en kolumn?? Ska testa ditt förkortade makro också men gissar att det fungerar lika eminent som det första. Återstår också att testa ditt makro för hel rad.

Slutligen: Fick inget svar på min fråga om C#.

Bosse K

Länk till kommentar
Dela på andra webbplatser

Hej MH_resurrected,

 

Nu har jag testat alla makrovarianter du bidragit med och alla funkar perfekt.

Är man guru inom VBA så förstår jag att C# inte är prio. Förutom att jag nu har

flera val så har jag lärt mig en del nya funktioner. Stort tack för ditt engagemang.

 

Bosse K 

Länk till kommentar
Dela på andra webbplatser

Kan konstatera att ditt makro fungerar utmärkt i följande case

 

Select Case rMinStartCell.column
    Case 27
        iParadKolumn = 21

 

men fungerar inte i följande

 

Select Case rMinStartCell.column
    Case 21
        iParadKolumn = 27

 

Om parad kolumn ligger till höger om (är större än) Case-kolumn funkar det således ej.

 

Jag behöver dessutom kunna välja case enligt följande exempel

 

Select Case rMinStartCell.column
    Case 21
        iParadKolumn = 19

        iParadKolumn = 27

 

Här ligger parade kolumner både till vänster och höger om Case-kolumnen

 

/ Bosse K

 

Länk till kommentar
Dela på andra webbplatser

Här kommer hela makrot inkl. dina kommentarer:

Sub CopyCell()
'
'Kopiera cell
'
Dim rMinStartCell As Range
Dim iStartRad As Integer
Dim rSökOmråde As Range

Dim rFunnenCell As Range
Dim iFunnenPåRad As Integer

Dim iParadKolumn As Integer
Dim rParadKällCell As Range
Dim rParadMålCell As Range


' "Tag bort lösenord"

'anger att den valda cellen är = din variabel MinStartcell
'(man vill helst undvika selection i koden,
'det kan röra till det)
Set rMinStartCell = Selection

' Plockar ut radnumret för startcellen
' eftersom det används på flera ställen.
iStartRad = rMinStartCell.row

'Avsluta om den valda cellen befinner sig på rad 1-5
If iStartRad <= 5 Then Exit Sub

'Avsluta om fler än en cell är valda
If rMinStartCell.Cells.Count > 1 Then Exit Sub

'Ange Vilka kolumner (kolumnnummer) som som skall "paras" och kopieras,
' beroende på vilken kolumn som den valda cellen finns i
' fyll på med fler CASE om det behövs
' Select Case  används istället för flera IF satser när du vill
' göra olika saker som beroende på värdet av en variabel
Select Case rMinStartCell.column
    Case 19 
        iParadKolumn1 = 21
        iParadKolumn2 = 22
        iParadKolumn3 = 27
''    Case 16 'kolumn P->v
''        iParadKolumn = 22

End Select


' Gör om sökområdet så att det startar på rad6
'och slutar en rad ovanför den valda cellen

'starta på rad 6 i samma kolumn genom att förskjuta upp
' iStartRad - 6 rader
Set rSökOmråde = rMinStartCell.Offset(-iStartRad + 6, 0)
'och sedan utvidga området till cellen ovanför Startcellen
Set rSökOmråde = rSökOmråde.Resize(iStartRad - 6, 1)


'Sök rätt på en cell med värde. Avsluta om det inte finns
With rSökOmråde
    Set rFunnenCell = .Find(what:="*", SearchDirection:=xlPrevious)
    If rFunnenCell Is Nothing Then Exit Sub
End With


' anger att vald cells värde = hittad cells värde
Selection.Value = rFunnenCell.Value


' Kollar vilken rad som det hittade värdet finns på
iFunnenPåRad = rFunnenCell.row

'Och sätter värdet i den parade kolumnen.
' Det är har du kanske vill skriva IF sats som kollar om värdet är >1
' Jag kan inte lista ut vad du m,enar utifrån dina anteckningar

Set rParadKällCell = Cells(iFunnenPåRad, iParadKolumn1)
Set rParadMålCell = Cells(iStartRad, iParadKolumn1)

Set rParadKällCell = Cells(iFunnenPåRad, iParadKolumn2)
Set rParadMålCell = Cells(iStartRad, iParadKolumn2)

Set rParadKällCell = Cells(iFunnenPåRad, iParadKolumn3)
Set rParadMålCell = Cells(iStartRad, iParadKolumn3)

rParadMålCell.Value = rParadKällCell.Value


'Selection.EntireRow.Value = Selection.EntireColumn.Find(what:="*", After:=Selection, SearchDirection:=xlPrevious).EntireRow.Value
' Ovan ska användas på CopyRow

'    If (Worksheets("Startsida").Cells(32, 3).Value = 1) Then Call Startsekvens
'    If (Worksheets("Startsida").Cells(32, 3).Value > 1) Then Call Startsekvens2

' "Lås Blad"

End Sub

 

Länk till kommentar
Dela på andra webbplatser

Har nu kollat lite mer och kan konstatera att problemet inte ligger i sökriktningen utan helt enkelt är att vid mer än en parad kolumn så kopierar makrot bara kolumn1. Hoppas på hjälp med korrigering av makro.

/ Bosse K

Länk till kommentar
Dela på andra webbplatser

Har fått till ett makro som fungerar med if-satser och som kopierar enstaka celler. Funkar perfekt!

Kan konstatera att makrot som kopierar hel rad inte går att använda i mitt fall. Däremot blir makrot där flera kolumner kan paras till olika case en suverän lösning. Har inte testat det än men räknar med att det kommer att fungera. STORT TACK för ditt engagemang! / Bosse K

Länk till kommentar
Dela på andra webbplatser

Nu skulle jag behöva hjälp med ett smart makro som ska leta, hitta, kopiera och klistra in.

Kopieringen och inklistringen klarar jag men leta och hitta är svårare. Om man kan göra en loop

skulle det vara ännu bättre. Bifogar excelfil FindLista där problemet finns specificerat. Hoppas 

MH_resurrected tar det här som en utmaning!  / Bosse K

FindLista.xlsx

Länk till kommentar
Dela på andra webbplatser

Har anpassat det första makrot som du skickade till min skarpa fil och det fungerade perfekt förutom att innehållet på Lista efter sista Lista nr inte kom in på G. Suveränt skrivet och med loopen gick det blixtsnabbt.

Tack för snabb respons. Jag ska testa det nya du skickade och gissar att det löser det här problemet.

Kan du också lägga till en rad integrerad i loopen som rensar gammalt innehåll på G1, G2 etc.

Bifogar filen FindLista där du kan se på flik G1 vad jag exakt avser.

/ Bosse K 

FindLista.xlsx

Länk till kommentar
Dela på andra webbplatser

Hej MH_resurrected

Nu har jag testat ditt senaste makro också men eftersom det ibland kan innehålla tomma celler i B-kolumnen fick jag ändra Set rListSlut = rListSlut.Offset(1, 0) till Set rListSlut = rListSlut.Offset(16, 0)

och nu kollar makrot alltid 16 rader efter sista Lista Nr vilket är max. vad listan kan innehålla. Perfekt! Hade hoppats på ett svar från dig gällande mitt senaste inlägg ovan, men du kanske inte har sett det eller haft tid. Vill du fortsätta som tidigare är det också OK. / Bosse K

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...