Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

kopiowanie danych z arkusza do tablicy

lczerema 08 Sie 2010 23:37 1227 2
  • #1 08 Sie 2010 23:37
    lczerema
    Poziom 1  

    Witam,

    Czy może ktoś pomóc mi z makrem które będzie kopiowało dane z excela i przechowywało je w tablicy (chcę kopiować wszystko zarówno wartości jak i formuły)

    Code:
    Sub Makro1() - makro działa tylko na komórkach w excelu
    

    For i = 1 To 5 Step 1
    cells(i, 1).Select
    Selection.Copy
    cells(i, 2).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
    Next i

    End Sub

    to makro działa bez zarzutu ale chciałbym je zmodyfikować w taki sposób żeby dane były pobierane z komórki i wklejane do tablicy próbowałem zdefiniować tablice: Dim tab(5,5)
    i zmienić makro na:

    Code:
    Sub Makro1()
    

    Dim tab(5,5)
    For i = 1 To 5 Step 1
    cells(i, 1).Select
    Selection.Copy
    tab(i, 2).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
            False, Transpose:=False
    Next i

    End Sub


    niestety makro wychacza się na poleceniu tab(i, 2).Select - czy przy tablicach też używa się polecenia Select?

    CZy może trzeba zadeklarować tab(5,5) jako String - ale tez nie działa
    Prosze o pomoc:)

    Proszę pamiętać o używaniu znaczników code. - arnoldziq

    0 2
  • Pomocny post
    #2 09 Sie 2010 00:46
    marcinj12
    Poziom 40  

    Przy tablicach nie używa się select.
    A co chcesz potem robić z tą tablicą? Zawsze możesz odwoływać się do komórek arkusza jak do tablicy:

    Code:

    For i = 1 To 5
       for j = 1 to 5
          MsgBox i & ", " & j & " = " & Worksheets("Arkusz1").Cells(i, j)
       next j
    Next i


    Ewentualnie możesz zapisać dane do zmiennej typu RANGE, do którego też można się odwoływać jak do tablicy:
    Code:

    Set myRange = Worksheets("Arkusz1").Range("A1:E5")
    For i = 1 To 5
       For j = 1 To 5
          MsgBox i & ", " & j & " = " & myRange(i, j)
       Next j
    Next i


    Do tablicy też można się odwołać, tylko musisz ją zadeklarować w zależności od typu lub jako uniwersalny VARIANT, tu pojedynczo:
    Code:

    Dim tabl(1 To 5, 1 To 5) As Variant

    For i = 1 To 5
       For j = 1 To 5
          tabl(i, j) = Worksheets("Arkusz1").Cells(i, j).Value
       Next j
    Next i

    For Each c In tabl
       MsgBox c
    Next c


    A tu grupowo:
    Code:

    Dim myArray As Variant
    myArray = Worksheets("Arkusz1").Range("A1:E5").Value

    For Each c In myArray
       MsgBox c
    Next c


    Wybierz coś sobie ;)

    0
  • #3 11 Sie 2010 13:44
    walek33
    Poziom 28  

    lczerema napisał:
    ...niestety makro wychacza się...

    I będzie. Z tej prostej przyczyny, że użyłeś tab jako nazwa tabeli + to na co zwrócił Ci uwagę kolega marcinj12.
    Tu masz swój kawałek kodu po przeróbce do stanu działającego :D :
    Code:
    Sub Makro1()
    
        Dim tabl(5, 5)
        For i = 1 To 5 Step 1
            tabl(i, 2) = Cells(i, 1).Formula
        Next i
    End Sub

    Dodane:
    A tak na marginesie:
    - Jeżeli w pętli For... Next masz krok 1 możesz opuścić Step.
    - Nie wiem czy zauważyłeś, ale tablica zadeklarowana przez Ciebie ma rozmiar 6 x 6. :D Nie wykorzystujesz jej w całości.
    - W deklaracji tablicy można pominąć typ. Z automatu będzie Variant.

    0