For and Next ...
23 отговора
0 прегледа
For and Next ...
Здравейте!
Моля ви ако някой знае да ме светне що се получава така:
Имам два листа : "Справка" и "База",до тук добре
В лист "База" от "А1" до "А30" съм поставил трите имена на хора...
В лист "Справка в колона "А" от 1 ред до 30 ред имам същия списък от хора но в разбъркан ред , тоест ако Димитър Петров Петров в лист "База" е на първия ред , то в лист "Справка" е да кажем на третия ред...
В лист "Справка" съм поставил бутон който прехвърля данните срещу всеки човек в лист "База" срещу съответния човек!
Ето го кода:
For J = 12 To 55
If (Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(J, 2)) Then
Sheets("База").Cells(J, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(J, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(J, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(J, 41) = Sheets("Справка").Range("AP" & J)
End If
Next J
Нещата се получават ако в лист "Справка" и в лист "База" имената се съвпадат по редове , пример: лист "Справка" в клетка "А1" - Димитър Петров Петров и в лист "База" в клетка "А1"- Димитър Петров Петров.
Идеята ми е такава: реда на имената написани в лист "Справка" да не съвпада с реда на имената в лист "База"
Тоест взимам си едно име примерно: Петър Петров Петров е в клетка "А3" в лист : "Справка", а в лист "База" Петър Петров Петров е в клетка "А10". Когато натисна бутона "Прехвърли" то данните срещу Петър в лист "Справка" да се отпечатат точно срещу Петър в клетка "А10" в лист "База".
Много съм обстоятелствен, но вече дълго време не мога да си обясня защо с този сорс не се поучава.
Благодаря ви !
Моля ви ако някой знае да ме светне що се получава така:
Имам два листа : "Справка" и "База",до тук добре
В лист "База" от "А1" до "А30" съм поставил трите имена на хора...
В лист "Справка в колона "А" от 1 ред до 30 ред имам същия списък от хора но в разбъркан ред , тоест ако Димитър Петров Петров в лист "База" е на първия ред , то в лист "Справка" е да кажем на третия ред...
В лист "Справка" съм поставил бутон който прехвърля данните срещу всеки човек в лист "База" срещу съответния човек!
Ето го кода:
For J = 12 To 55
If (Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(J, 2)) Then
Sheets("База").Cells(J, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(J, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(J, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(J, 41) = Sheets("Справка").Range("AP" & J)
End If
Next J
Нещата се получават ако в лист "Справка" и в лист "База" имената се съвпадат по редове , пример: лист "Справка" в клетка "А1" - Димитър Петров Петров и в лист "База" в клетка "А1"- Димитър Петров Петров.
Идеята ми е такава: реда на имената написани в лист "Справка" да не съвпада с реда на имената в лист "База"
Тоест взимам си едно име примерно: Петър Петров Петров е в клетка "А3" в лист : "Справка", а в лист "База" Петър Петров Петров е в клетка "А10". Когато натисна бутона "Прехвърли" то данните срещу Петър в лист "Справка" да се отпечатат точно срещу Петър в клетка "А10" в лист "База".
Много съм обстоятелствен, но вече дълго време не мога да си обясня защо с този сорс не се поучава.
Благодаря ви !
Re: For and Next ...
Аз бих сложил преди
END IF
едно ELSE
после да мушна един код между ELSE и ENDIF , с който да потърся тва дет ми требе и като го намерия да си прехвърля (ако го намеря де).
Напиши кво не е ясно и ако има проблем да ръсим още мозък....
Малко тва A1 do A30 не схванах що цикъла е от 12 до 55, ама нейсе...Може съм попрекалил с мастиката...
END IF
едно ELSE
после да мушна един код между ELSE и ENDIF , с който да потърся тва дет ми требе и като го намерия да си прехвърля (ако го намеря де).
Напиши кво не е ясно и ако има проблем да ръсим още мозък....
Малко тва A1 do A30 не схванах що цикъла е от 12 до 55, ама нейсе...Може съм попрекалил с мастиката...
Re: For and Next ...
Ами идеята ми е такава :
В лист "База" списъка от хора няма да се променя , т.е мястото на хората в списъка няма да се променя , та така да стане че да се търси съвпадение на имена и когато има такова то там да постави данни .
Защото с този сорс, който съм постнал ако примерно Иван в лист "Справка" е в клетка "А1" и в клетка "В1" има числото 5 , а в лист "База" Иван е в клетка "А10" то срещу Иван , в клетка "В10" в лист "База" , се отпечатва нула а не числото 5 , тоест приема, че ЧОВЕКА в лист "Справка" в клетка "А1" не равно на аналогичната клетка в лист "База"
Не зная как да го обясня...
В лист "База" списъка от хора няма да се променя , т.е мястото на хората в списъка няма да се променя , та така да стане че да се търси съвпадение на имена и когато има такова то там да постави данни .
Защото с този сорс, който съм постнал ако примерно Иван в лист "Справка" е в клетка "А1" и в клетка "В1" има числото 5 , а в лист "База" Иван е в клетка "А10" то срещу Иван , в клетка "В10" в лист "База" , се отпечатва нула а не числото 5 , тоест приема, че ЧОВЕКА в лист "Справка" в клетка "А1" не равно на аналогичната клетка в лист "База"
Не зная как да го обясня...
Re: For and Next ...
Казано с други думи:
По-горе написах, че ти проверяваш (и правиш нещоситам), когато ЕДНОТО е РАВНО на ДРУГОТО. Драсни код и в случаите, когато ЕДНОТО НЕ Е РАВНО на ДРУГОТО. Демек В ПРОТИВЕН СЛУЧАЙ - тва дет американците му викат ELSE.
Там трябва да има код, дето да търси на кой ред е РАВНОТО НЕЩО и ако го намери да го прехвърли в другия лист.
Напиши кода и ако не работи го copy/paste тука.
По-горе написах, че ти проверяваш (и правиш нещоситам), когато ЕДНОТО е РАВНО на ДРУГОТО. Драсни код и в случаите, когато ЕДНОТО НЕ Е РАВНО на ДРУГОТО. Демек В ПРОТИВЕН СЛУЧАЙ - тва дет американците му викат ELSE.
Там трябва да има код, дето да търси на кой ред е РАВНОТО НЕЩО и ако го намери да го прехвърли в другия лист.
Напиши кода и ако не работи го copy/paste тука.
Re: For and Next ...
Първо виж какво прави командата
VLOOKUP, дали няма да се разминеш без макрос.
Второ, ако държиш на макроса, трябва да вложиш
два цикъла - външният да обхожда единия списък поред,
а вътрешният - да претърсва другия списък за съвпадение.
Дали ме разбра?
Съкращавайте фразите до размера на мисъл. М.Вайсберг
VLOOKUP, дали няма да се разминеш без макрос.
Второ, ако държиш на макроса, трябва да вложиш
два цикъла - външният да обхожда единия списък поред,
а вътрешният - да претърсва другия списък за съвпадение.
Дали ме разбра?
Съкращавайте фразите до размера на мисъл. М.Вайсберг
Re: For and Next ...
Здравей!
По- добре с макрос!
Разбирам идеята ти , но не ми е ясно как да я реализирам! Би ли ми подсказал как става това? Благодаря за съдействието! :)
По- добре с макрос!
Разбирам идеята ти , но не ми е ясно как да я реализирам! Би ли ми подсказал как става това? Благодаря за съдействието! :)
Re: For and Next ...
For J = 12 To 55
If (Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(J, 2)) Then
Sheets("База").Cells(J, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(J, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(J, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(J, 41) = Sheets("Справка").Range("AP" & J)
End If
Next J
това аз бих го преработил така:
sub AlaBala( J as long)
DIM J as long, Namereno as boolean, K as long, St as String
namereno=false
K=11
while (K<55) and (not namereno) do
K=K+1
namereno=(Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(K, 2))
wend
if namereno then
Sheets("База").Cells(K, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(K, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(K, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(K, 41) = Sheets("Справка").Range("AP" & J)
else
st="Не спи като въвеждаш!"
Sheets("База").Cells(K, 5) = st
Sheets("База").Cells(K, 6) = st
Sheets("База").Cells(K, 7) = st
Sheets("База").Cells(K, 41) = st
end if
end Sub
Е, не претендирам за грешки в кода, ама нещо таквоз...
Ако цикълът е с FOR имаш винаги обхождане до края (освен ако не излезеш принудително, ама не е за предпочитане таквоз програмиране).Даже и да го намери тенекето на 1 още....При голяма номенклатура - ще се бави.
Разбира се могат да се ползват и готовите функции на М$. Аз не го правя по 2 причини (винаги когато мога де):
1.По-лесно е ако един ден се наложи за преработка за в опънатия офис
2.Мразим М$ (работим на продуктите му по принуда). По секакъв начин те карат те да си все по-зависим от тях...
Ади пиши кво стана с кода.
If (Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(J, 2)) Then
Sheets("База").Cells(J, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(J, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(J, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(J, 41) = Sheets("Справка").Range("AP" & J)
End If
Next J
това аз бих го преработил така:
sub AlaBala( J as long)
DIM J as long, Namereno as boolean, K as long, St as String
namereno=false
K=11
while (K<55) and (not namereno) do
K=K+1
namereno=(Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(K, 2))
wend
if namereno then
Sheets("База").Cells(K, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(K, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(K, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(K, 41) = Sheets("Справка").Range("AP" & J)
else
st="Не спи като въвеждаш!"
Sheets("База").Cells(K, 5) = st
Sheets("База").Cells(K, 6) = st
Sheets("База").Cells(K, 7) = st
Sheets("База").Cells(K, 41) = st
end if
end Sub
Е, не претендирам за грешки в кода, ама нещо таквоз...
Ако цикълът е с FOR имаш винаги обхождане до края (освен ако не излезеш принудително, ама не е за предпочитане таквоз програмиране).Даже и да го намери тенекето на 1 още....При голяма номенклатура - ще се бави.
Разбира се могат да се ползват и готовите функции на М$. Аз не го правя по 2 причини (винаги когато мога де):
1.По-лесно е ако един ден се наложи за преработка за в опънатия офис
2.Мразим М$ (работим на продуктите му по принуда). По секакъв начин те карат те да си все по-зависим от тях...
Ади пиши кво стана с кода.
Re: For and Next ...
Дефинирал съм по погрешка още веднъш J.
DIM J as long, Namereno as boolean, K as long, St as String
го направи:
DIM Namereno as boolean, K as long, St as String
То интерпретатора на ЕКСЕЛА сигурно щеше да ревне, ама знам ли... Дано нема още грешки че кода го писах направо тука.
DIM J as long, Namereno as boolean, K as long, St as String
го направи:
DIM Namereno as boolean, K as long, St as String
То интерпретатора на ЕКСЕЛА сигурно щеше да ревне, ама знам ли... Дано нема още грешки че кода го писах направо тука.
Re: For and Next ...
Както казваш ти Ексела ревна!
Аз ти благодаря, че съдействаш!
Значи, първо реда с do светна - не ми е ясно за какво е и за това го махнах; Второ, реда Namereno = (Sheets("Ñïðàâêà").Cells(J, 2)) = (Sheets("Áàçà").Cells(K, 2)) и той светна;
ето сорса:
Private Sub CommandButton2_Click()
Dim Namereno As Boolean, K As Long, St As String
If MsgBox("Моля, изчакайте, докато данните се прехвърлят !", vbOKCancel + vbInformation, "Прехвърляне...") = vbOK Then
For J = 12 To 55
Namereno = False
K = 11
While (K < 55) And (Not Namereno)
K = K + 1
Namereno = (Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(K, 2))
Wend
If Namereno Then
Sheets("База").Cells(K, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(K, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(K, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(K, 41) = Sheets("Справка").Range("AP" & J)
Else
St = "Не спи като въвеждаш!"
Sheets("База").Cells(K, 5) = St
Sheets("База").Cells(K, 6) = St
Sheets("База").Cells(K, 7) = St
Sheets("База").Cells(K, 41) = St
End If
Next J
End If
end sub
Благодаря!
Аз ти благодаря, че съдействаш!
Значи, първо реда с do светна - не ми е ясно за какво е и за това го махнах; Второ, реда Namereno = (Sheets("Ñïðàâêà").Cells(J, 2)) = (Sheets("Áàçà").Cells(K, 2)) и той светна;
ето сорса:
Private Sub CommandButton2_Click()
Dim Namereno As Boolean, K As Long, St As String
If MsgBox("Моля, изчакайте, докато данните се прехвърлят !", vbOKCancel + vbInformation, "Прехвърляне...") = vbOK Then
For J = 12 To 55
Namereno = False
K = 11
While (K < 55) And (Not Namereno)
K = K + 1
Namereno = (Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(K, 2))
Wend
If Namereno Then
Sheets("База").Cells(K, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(K, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(K, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(K, 41) = Sheets("Справка").Range("AP" & J)
Else
St = "Не спи като въвеждаш!"
Sheets("База").Cells(K, 5) = St
Sheets("База").Cells(K, 6) = St
Sheets("База").Cells(K, 7) = St
Sheets("База").Cells(K, 41) = St
End If
Next J
End If
end sub
Благодаря!
Re: For and Next ...
Сорка за error-a проблемът е в предмониторното устройство. Все ги бъркам двата щата БАЗИКА и ПАСКАЛА (делфи де). Махнал си го DO - добре!
Ако бях на твое място бих преработи кода така:
Private Sub CommandButton2_Click()
Dim Namereno As Boolean, K As Long, St As String
Dim Name1 as string,Name2 as string, J as long
'J си го дефинирам по навик от паскала,че там е задължително
'при различните видове БАЗИЦИ и може и да не се дефинира
'но имаше некъв БАЗИК дето бачкаше до 10 недефиниран масив (напр)....
Name1="База"
Name2="Справка"
'тука избягвам варианта - кирилица/латинаица и грешно изписване на името на листа
If MsgBox("Моля, изчакайте, докато данните се прехвърлят !", vbOKCancel + vbInformation, "Прехвърляне...") = vbOK Then
For J = 12 To 55
Namereno = False
K = 11
While (K < 55) And (Not Namereno)
K = K + 1
Namereno = (Sheets(Name2).Cells(J, 2).value = Sheets(Name1).Cells(K, 2) .Value)
Wend
If Namereno Then
Sheets(Name1).Cells(K, 5) = Sheets(Name2).Range("AQ" & J)
Sheets(Name1).Cells(K, 6) = Sheets(Name2).Range("AL" & J)
Sheets(name1).Cells(K, 7) = Sheets(Name2).Range("AK" & J)
Sheets(Name1).Cells(K, 41) = Sheets(Name2).Range("AP" & J)
Else
St = "Не спи като въвеждаш!"
Sheets(Name1).Cells(K, 5).value = St
Sheets(name1).Cells(K, 6).value = St
Sheets(Name1).Cells(K, 7).value = St
Sheets(Name1).Cells(K, 41).value = St
End If
Next J
End If
end sub
И да знаш: тва VALUE все го изтървам...Ае че чъм на греянка, че с тва гадното време - пролет-зимя-лято нещо съм прихванал. А както казват мислителите:
ВСИЧКИ БОЛЕСТИ ИДАТ ОТ НЕРЕДОВНОТО ПИЕНЕ!
Наздраве и пиши кво е станало.
Ако бях на твое място бих преработи кода така:
Private Sub CommandButton2_Click()
Dim Namereno As Boolean, K As Long, St As String
Dim Name1 as string,Name2 as string, J as long
'J си го дефинирам по навик от паскала,че там е задължително
'при различните видове БАЗИЦИ и може и да не се дефинира
'но имаше некъв БАЗИК дето бачкаше до 10 недефиниран масив (напр)....
Name1="База"
Name2="Справка"
'тука избягвам варианта - кирилица/латинаица и грешно изписване на името на листа
If MsgBox("Моля, изчакайте, докато данните се прехвърлят !", vbOKCancel + vbInformation, "Прехвърляне...") = vbOK Then
For J = 12 To 55
Namereno = False
K = 11
While (K < 55) And (Not Namereno)
K = K + 1
Namereno = (Sheets(Name2).Cells(J, 2).value = Sheets(Name1).Cells(K, 2) .Value)
Wend
If Namereno Then
Sheets(Name1).Cells(K, 5) = Sheets(Name2).Range("AQ" & J)
Sheets(Name1).Cells(K, 6) = Sheets(Name2).Range("AL" & J)
Sheets(name1).Cells(K, 7) = Sheets(Name2).Range("AK" & J)
Sheets(Name1).Cells(K, 41) = Sheets(Name2).Range("AP" & J)
Else
St = "Не спи като въвеждаш!"
Sheets(Name1).Cells(K, 5).value = St
Sheets(name1).Cells(K, 6).value = St
Sheets(Name1).Cells(K, 7).value = St
Sheets(Name1).Cells(K, 41).value = St
End If
Next J
End If
end sub
И да знаш: тва VALUE все го изтървам...Ае че чъм на греянка, че с тва гадното време - пролет-зимя-лято нещо съм прихванал. А както казват мислителите:
ВСИЧКИ БОЛЕСТИ ИДАТ ОТ НЕРЕДОВНОТО ПИЕНЕ!
Наздраве и пиши кво е станало.
Re: For and Next ...
Наздраве и на теб! :)))
Ами да ти кажа този ред пак светва. Тоя сорс вече го сънувам и пак не мога да разбера защо светва!
ето го въпросния ред:
Namereno = (Sheets(Name2).Cells(J, 2)) = Sheets(Name1).Cells(K, 2)
Ами да ти кажа този ред пак светва. Тоя сорс вече го сънувам и пак не мога да разбера защо светва!
ето го въпросния ред:
Namereno = (Sheets(Name2).Cells(J, 2)) = Sheets(Name1).Cells(K, 2)
Re: For and Next ...
Namereno = (Sheets(Name2).Cells(J, 2)) = Sheets(Name1).Cells(K, 2)
да стане на
Namereno = (Sheets(Name2).Cells(J, 2).VALUE = Sheets(Name1).Cells(K, 2).VALUE)
да стане на
Namereno = (Sheets(Name2).Cells(J, 2).VALUE = Sheets(Name1).Cells(K, 2).VALUE)
Re: For and Next ...
Здрастииииии !
Нали знаеш, че тоя ред пак пищи... Не мога и не мога да разразбера, каде е тая грешка.
Логично ми се вижда издържано...
Нали знаеш, че тоя ред пак пищи... Не мога и не мога да разразбера, каде е тая грешка.
Логично ми се вижда издържано...
Re: For and Next ...
Ако е трудно да copy/paste кода:
Namereno = (Sheets(Name2).Cells(J, 2).VALUE = Sheets(Name1).Cells(K, 2).VALUE)
то можеш да го разбиеш така:
if Sheets(Name2).Cells(J, 2).VALUE = Sheets(Name1).Cells(K, 2).VALUE then
Namereno=true
else
namereno=false
end if
за по-горния пост виж тва дето е написано с големи букви (добавено към твоя код) ".VALUE". То все едно казва на ексела:
Sheets(Name2).Cells(J, 2).VALUE
Лист Name2, Клетка ред J, колона 2, ей тва дет е вътре.
Можеш да сложеш един BreakPoint на сорса и да трасираш, дали нещо се е осрало.Много пъти съм си хващал грешки по тоя начин...След часове зверене на теливизора му се струва на човек, че всичко е наден, а се оказва че ....... (нещо съвсем елементарно - като буква на кирилица, интервал нейде, офиса нещио не харесва - дет стария го е харесвал и т.н.)
Namereno = (Sheets(Name2).Cells(J, 2).VALUE = Sheets(Name1).Cells(K, 2).VALUE)
то можеш да го разбиеш така:
if Sheets(Name2).Cells(J, 2).VALUE = Sheets(Name1).Cells(K, 2).VALUE then
Namereno=true
else
namereno=false
end if
за по-горния пост виж тва дето е написано с големи букви (добавено към твоя код) ".VALUE". То все едно казва на ексела:
Sheets(Name2).Cells(J, 2).VALUE
Лист Name2, Клетка ред J, колона 2, ей тва дет е вътре.
Можеш да сложеш един BreakPoint на сорса и да трасираш, дали нещо се е осрало.Много пъти съм си хващал грешки по тоя начин...След часове зверене на теливизора му се струва на човек, че всичко е наден, а се оказва че ....... (нещо съвсем елементарно - като буква на кирилица, интервал нейде, офиса нещио не харесва - дет стария го е харесвал и т.н.)
Re: For and Next ...
Ей! Нищо не казваш маааму стара! Кажи 2 думи барем! Ядем си салатката и жената реве че е без повод... (дъртата и тя съска на тъста същото)
Дай повод бере човек!
Дай повод бере човек!
Re: For and Next ...
Нищо не стана! До сега бях зает с други проекти... Сега ще си заделя повечко време за да докарам и този до край! Не мислех, че този сорс ще ми се опъне...
Най-вероятно ще трябва да пробвам по съвсем друга логика, за да разреша проблема! :)
Най-вероятно ще трябва да пробвам по съвсем друга логика, за да разреша проблема! :)
Re: For and Next ...
Дай малко по-вечко инфо:
1.Кажи какво съобщение излиза поне.
2.Дай някакъв код, дето е последен.
3.Може да качиш нейде файлче и некви данни и да дадеш линк.
1.Кажи какво съобщение излиза поне.
2.Дай някакъв код, дето е последен.
3.Може да качиш нейде файлче и некви данни и да дадеш линк.
Re: For and Next ...
OK Иване!
Дай мейл да ти го изпратя проектчето за да му хвърлиш око! :)
Дай мейл да ти го изпратя проектчето за да му хвърлиш око! :)
Re: For and Next ...
изцяло грешен подход.
с тоя код проверяваш дали на един и същи ред в двата листа имаш съвпадение на имена....
трябва да имаш два два цикъла един в друг
кода трябва да ти е такъв:
For J = 12 To 55
For i = 12 To 55
If (Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(i, 2)) Then
Sheets("База").Cells(i, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(i, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(i, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(i, 41) = Sheets("Справка").Range("AP" & J)
Exit for
End If
Next i
Next J
с тоя код проверяваш дали на един и същи ред в двата листа имаш съвпадение на имена....
трябва да имаш два два цикъла един в друг
кода трябва да ти е такъв:
For J = 12 To 55
For i = 12 To 55
If (Sheets("Справка").Cells(J, 2)) = (Sheets("База").Cells(i, 2)) Then
Sheets("База").Cells(i, 5) = Sheets("Справка").Range("AQ" & J)
Sheets("База").Cells(i, 6) = Sheets("Справка").Range("AL" & J)
Sheets("База").Cells(i, 7) = Sheets("Справка").Range("AK" & J)
Sheets("База").Cells(i, 41) = Sheets("Справка").Range("AP" & J)
Exit for
End If
Next i
Next J