Kategorie szkoleń | Egzaminy | Kontakt
  • 4
  • 1
  • 1

Witam.

Chciałabym się dowiedzieć w jaki sposób stworzyć formułę, która przypisuje tekst z innej kolumny np:
Mam tabelę z kolumną L.p. liczba porządkowa i z kolumną Nazwa; np.

 

L.p Nazwa
1 Jaś
2 Miś
3 Małgosia

 

jak stworzyć formułę, która pozwalałaby mi na to, że wpisując liczbę pokazuje mi się tekst np. wpisuję 2 i ta dwójka wyświetla mi się jako druga pozycja z tabeli "Miś"?

Pozdrawiam.
Natalia Zagórska.

 

Natalia_Zagórska
  • Zapytał
  • @ Natalia_Zagórska | 01.09.2017
    • 1
    • 0
    • 0
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedzi (4)

  • 1

Jeżeli Twoja tabela będzie w zakresie A1:B4, a w C1 wpiszesz liczbę, to zadziała formuła:

=WYSZUKAJ.PIONOWO(C1;$A$2:$B$4;2;0)

Jeśli jednak chciałabyś, żeby liczba zamieniała się na nazwę w tej samej komórce, w której została wpisana bez makra - nie da rady.

Mirosław_Janiak
  • Odpowiedział
  • @ Mirosław_Janiak | 01.09.2017
    • 1
    • 7
    • 1
Komentarze
Bardzo dziękuję za odpowiedź. Była bardzo pomocna.
Skomentował : @ Natalia_Zagórska ,11.09.2017
  • 1
  • 0
  • 0
  • 2

A jeśli chcesz kod VBA, to proponuję taki:

Option Explicit
Dim SZUKANA As String
Dim KomDoc As Range, c As Range, KomDoc2 As Range
Dim x As Integer, y As Integer
Public KONTR

Private Sub WorkSheet_Change(ByVal Target As Range)
On Error GoTo PrzyBłędzie

If KONTR = 1 Then
    KONTR = Null
    GoTo KoniecPracy
End If

If Target.Cells.Count > 1 Then GoTo KoniecPracy
If Target.Value = "" Then GoTo KoniecPracy

SZUKANA = Target.Value
Set KomDoc = Range("a2", Range("a1").End(xlDown))
Set KomDoc2 = Range("a2").CurrentRegion
y = WorksheetFunction.CountIf(KomDoc2, SZUKANA)

If y > 1 Then
    MsgBox "Nie można wprowadzić tej wartości, bo tworzy się odwołanie cykliczne bądź przypisze się wartość już ujęta!", vbCritical
    Application.Undo
    GoTo KoniecPracy
End If

If Target.CurrentRegion.Address = KomDoc2.Address Then GoTo KoniecPracy

KONTR = 1
Target.Value = Range(KomDoc.Find(SZUKANA).Address).Offset(0, 1).Value



KoniecPracy:
Set KomDoc = Nothing
Set KomDoc2 = Nothing
KONTR = Null
Exit Sub

PrzyBłędzie:
MsgBox Err.Number & ". " & Err.Description
Resume KoniecPracy

End Sub



 

Tomasz_Kasprzycki
  • Odpowiedział
  • @ Tomasz_Kasprzycki | 05.09.2017
    • 2
    • 4
    • 8
  • 1

W załączeniu umieściłem plik z kodem zmieniającym jakiś ciąg znaków na inny (mam same liczby zamieniane na tekst, ale nie muszą to być liczby). Pojawia się ciekawy problem: otóż wynik dla 1 i 10 jest taki sam (jak dla 10: Szerszeń), ale dla 2 i 20, czy 3 i 30 już wyniki są inne (poprawne). Skąd taki wynik przy 1 i 10?

edit: Udało mi się w końcu umieścić plik. Chrome dał radę!

edit2: Problem z 1 i 10 też rozwiązany - funkcja range.find nie wskazywała wartości z pierwszej komórki w zakresie. Nie wiem czemu. Jak rozszerzyłem zakres, to teraz działa jak należy.

edit3: I dlaczego funkcja FIND nie wybiera wartości z pierwszej komórki we wskazanym zakresie?

edit4: I zamiana jest możliwa w kolumnie "E".

Załączniki

  • xlsm

    zamianaliczbynatekst1.xlsm ( 25K )
Tomasz_Kasprzycki
  • Odpowiedział
  • @ Tomasz_Kasprzycki | 06.09.2017
    • 2
    • 4
    • 8
Komentarze
Pod FireFoxem dodawanie załącznika powoduje wysłanie odpowiedzi, w Operze działa ok. Może są tu jacyś spece od webdevu? ;)
Skomentował : @ Mirosław_Janiak ,06.09.2017
  • 1
  • 7
  • 1
Chrome też daje radę i załącznik się pojawił :) Jedna tajemnica wyjaśniona, ale zrodziła się druga...
Skomentował : @ Tomasz_Kasprzycki ,19.09.2017
  • 2
  • 4
  • 8
  • 2

Na szerszenia kod (konkretnie funkcja Find) uparł się z dwóch powodów:

1) przy braku atrybutu After przeszukiwanie zaczyna się od drugiej komórki wskazanego zakresu.

2) przy braku atrybutu LookAt domyślnie ustawione jest dopasowanie częściowe (xlPart).

Czyli w Twoim przypadku po wpisaniu jedynki makro działa tak: przeszukuje zakres A2:A15, ale zaczyna PO pierwszej komórce, czyli od A3. Leci sobie zatem do A11, gdzie znajduje wartość 11, a skoro ta zaczyna się od jedynki i Ty nie kazałeś dopasowywać dokładnie, to po co dalej się męczyć, mamy wynik. Z dwójką działa poprawnie, bo zaczyna od A3, czyli od pasującej wartości. Przy okazji: wynikiem Find jest cała komórka (jako zakres), więc Range możesz pominąć.

 Zwycięzcą zatem jest:

Target.Value = KomDoc.Find(SZUKANA, LookAt:=xlWhole).Offset(0, 1).Value

 

PS1: Tak naprawdę Find zapamiętuje ostatnio ustawioną wartość atrybutów w danej sesji, więc z tymi dwoma punktami powyżej może być różnie. Dlatego warto je uzupełniać.

PS2: Do kolorowanek proponuję wyłączyć odświeżanie ekranu (nie będzie tego migotania przy rysowaniu tabeli), a samo rysowanie wpakować w With, będzie czytelniej.

Sub KolorZakresu()

Application.ScreenUpdating = False

With Sheets("arkusz1")
   .Columns("a:c").Interior.Color = xlNone
   'reszta formatów
End with

Application.ScreenUpdating = True

End Sub

 

 

Mirosław_Janiak
  • Odpowiedział
  • @ Mirosław_Janiak | 04.10.2017
    • 1
    • 7
    • 1