2016-06-25 13 views
5

Mam bardzo duży arkusz kalkulacyjny, na którym chcę wykonywać obliczenia. Aby przyspieszyć, chcę zrobić to w vba. Mam podstawową wiedzę na temat vba, więc na początek próbowałem napisać kod, który po prostu skopiowałby komórki w kolumnie A i przypisze je do tablicy, a następnie wklei wszystkie wartości z powrotem do innej kolumny D. Zdefiniowałem numery, aby uzyskać numer wierszy w dół, ponieważ będzie to zmieniać się z miesiąca na miesiąc. Pomyślałem, że jeśli uda mi się to uruchomić, to będę mógł to zbudować - ale niestety nie mogę tego uruchomić. Jeśli ktokolwiek mógłby mi powiedzieć, co robię źle, byłbym bardzo wdzięczny.Excel vba przypisuje wartości do tablicy, a następnie wkleja do arkusza roboczego

Próbowałem wielu odmian tego - w tej chwili otrzymuję błąd Wymagany obiekt Run Time Error '424', więc myślę, że tablica jest pusta.

Option Explicit 
Option Compare Text 
Option Base 1 


Sub Macro1() 

Dim numRows As Long 

Dim numCols As Integer 
numCols = 1 

Dim RowCounter As Long 
Dim ColCounter As Integer 
Dim SumCols() As Variant 
numRows = Cells(Rows.Count, "A").End(xlUp).Row 
ReDim SumCols(numRows, numCols) 
Dim tempSumCols As Variant 

tempSumCols = Range("A2", Cells(numRows, 1)) 

For RowCounter = 1 To numRows 
    For ColCounter = 1 To numCols 
     SumCols(RowCounter, ColCounter) = tempSumCols(RowCounter, ColCounter).Value 
    Next ColCounter 
Next RowCounter 

Range("D2", Cells(numRows, "D")) = SumCols 





End Sub 
+0

W jakiej linii pojawia się błąd? Nie powinniśmy zgadywać. –

+0

Przepraszam, po raz pierwszy zamieszczam pytanie, dopilnuję, bym uwzględnił błąd w kolejnych pytaniach. –

Odpowiedz

1

Najprostszym sposobem wypełnienia tablicę z szeregu:

  • stwierdzenie tablicy jako wariant
  • utworzenia zakresu prawidłowego kształtu
  • Tablica = Range() wartości.

teraz można iteracyjne nad tablicę używając

For i = lBound(array) to uBound(array)

lub

For each e in array

 
Sub Macro1() 

    Dim SumCols As Variant 
    Dim e As Variant 

    SumCols = Range(Range("A2"), Range("A" & Rows.Count).End(xlUp)).Value 

    For Each e In SumCols 

    Next 

    Range("D2").Resize(UBound(SumCols, 1), UBound(SumCols, 2)) = SumCols 

End Sub 
+0

Dzięki milionowi to zadziałało i jest naprawdę skuteczne. –

+0

Nie ma za co, cieszę się, że pomogło. –

2

Aby rozwiązać swój kod, trzeba dopasować NumRows w obu tablicach Ponieważ zaczynają się A2 - Twoje NeDS indeks wiersza być zwiększany

a także - usuń. Wartość z drugiej tablicy

To powinno działać - lub przynajmniej usunąć błąd wykonania:

Sub Macro1() 

Dim numRows As Long 

Dim numCols As Integer 
numCols = 1 

Dim RowCounter As Long 
Dim ColCounter As Integer 
Dim SumCols() As Variant 
numRows = Range("A" & Rows.Count).End(xlUp).Row 
ReDim SumCols(numRows, numCols) 
Dim tempSumCols As Variant 

' Increment number of rows to match numrows starting at A2 
tempSumCols = Range("A2", Cells(numRows + 1, 1)) 

For RowCounter = 1 To numRows 
    For ColCounter = 1 To numCols 
     ' Remove .Value from tempSumCols 
     SumCols(RowCounter, ColCounter) = tempSumCols(RowCounter, ColCounter) 
    Next ColCounter 
Next RowCounter 

Range("D2", Cells(numRows, "D")) = SumCols 

End Sub 
+1

Dzięki temu usunięto błąd, ale nadal występował problem z moim kodem, więc poszedłem z kodem Thomasa Inziny, który był znacznie bardziej wydajny niż mój –