Wpis z mikrobloga

Mirki poszukuje inspiracji. Napisałem makro oparte na offsetach. Działa to w skrócie tak, że w Arkuszu1 z kolumny "A" wyszukiwane są wartości w Arkuszu2 z kolumny "A" następnie wartości w kolejnych kolumnach B,C,D przepisują się do kolumn np. X, Y Z w Arkuszu1. (taki Vlookup przy pomocy makra)

Jest to o tyle wada, że raport, który mam w Arkuszu2 jest tworzony przez człowieka, który nie zawsze trzyma się tych samych kolumn. To co dziś jest w kolumnie B jutro może być w kolumnie E.

Jedyne co jest zawsze takie samo to nazwy kolumn znajdujące się w pierwszych komórkach kolumn (A1,B1,C1). Chciałbym znaleźć jakieś rozwiązanie by nie opierać tego na offestach, który działa na indexach kolumn. Wyszukiwanie powinno najpierw sprawdzić czy nazwa w komórce X1 z Arkusza1 odpowiada temu co się znajduję w komórce np. B1/C1/D1 z Arkusza2 i dopiero mi uzupełniało te dane w odpowiednie miejsce.

#vba #makro #excel #programowanie #visualbasic
  • 4
  • Odpowiedz
@Nee24 ja bym zdefiniował zmienne odpowiedzialne za numer każdej kolumny jakiej potrzebujesz, np. potrzebujesz kolumn o nazwach U, S, Ń, K, O, N i T to definiujesz 7 zmiennych Integer, np. w schemacie noU, noS, itd.

Potem za pomocą pętli bym przeleciał wszystkie nagłówki (tutaj zakładam, że pomiędzy nie ma pustych kolumn i nazwy się nie powtarzają)

i = 1
Do Until Cells(1,i).Value = ""

Select Case Cells.(1,i).Value

Case "U"
noU =
  • Odpowiedz
@Nee24 sub na szybko
Dopisz = sheets("arkusz1").usedrange.value
Szuk = sheets("arkusz2").usedrange.value
For i = 1 to ubound(dopisz,1)
If dopisz(i,1) <> "" then
For szx = 1 to ubound(szuk,1)
For szy = 1 to ubound(szuk,2)
If szuk(szx,szy) = dopisz(i,1) then
For m = 1 to 3
Sheets('arkusz').cells(I, 20 +m) = szuk(szx,szy+m)
Next m
Goto omin
End if
Next szy
Next sz
End if
Omin:
Next i
Erase szuk
Erase dopisz

Do tego screenupdating calculations
  • Odpowiedz