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

Chciałabym zmienić numer indeksu kolumny w VBA w funkcji wyszukaj pionowo, niestety każdą zmienną odczytuje jako tekst.

 

Dim actual as Variant

actual = Application.InputBox("Enter actual indexcolumn number")

 

Range("L4").Select

ActiveCell.FormulaR1C1 = "VLOOKUP(RC[-10],'INVEST'!R1:R10000,actual,0)"

 

Pozdrawiam,

Asia

Joanna_Piechota_29bn
  • Zapytał
  • @ Joanna_Piechota_29bn | 26.01.2021
    • 0
    • 0
    • 0

Odpowiedź (1)

  • 1

1) Żeby formuła w ogóle miała szansę zadziałać, musisz na jej początku dopisać znak równości.

2) W Twoim przykładzie umieściłaś nazwę zmiennej wewnątrz cudzysłowów, czyli jest ona traktowana jako zwykły fragment tekstu. Żeby spełniła swoją funkcję, trzeba wyciągnąć ją poza cudzysłów i połączyć z tekstem np. za pomocą operatora &.

3) To pewnie było zamierzone, ale warto podkreślić, że zapis R1:R10000 w odwołaniach R1C1 oznacza pełne wiersze 1:10000, czyli funkcja VLOOKUP będzie szukała wartości w kolumnie A.

4) Unikaj zapisu Range.Select, ActiveCell.Cośtam (lub Selection.Cośtam) - zaznaczanie komórek w kodzie bardzo rzadko ma sens, a mocno spowalnia wykonywanie makra. Zdecydowanie lepsze rozwiązanie to Range.Cośtam.

5) Docelowo dobrze by było zweryfikować, co wprowadził użytkownik: czy nie nacisnął Cancel oraz czy na pewno wprowadził liczbę.

Moja propozycja:

actual = InputBox("Enter actual indexcolumn number")

If Not IsNumeric(actual) Then
   If actual <> "" Then MsgBox "You must enter a number!", vbExclamation
   Exit Sub
End If

Range("L4").FormulaR1C1 = "=VLOOKUP(RC[-10],'INVEST'!R1:R10000," & actual & ",0)"

PS: Żeby ułatwić sobie przepisywanie formuły do makra, wpisz ją zwyczajnie w arkuszu, zaznacz tę komórkę, a następnie w okienku Immediate edytora VBA (ctrl+G) wprowadź poniższe polecenie i zatwierdź enterem:

Debug.Print Selection.FormulaR1C1

 

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