VBA

2016-03-22 19 views
0

içinde farklı sayıda satır içeren sütunların üzerinde bir işlev döngüsü yürütüyorum Büyük bir veri kümesiyle uğraşıyorum, her üçüncü sütunda 1 değeri pozitif olan 1 değerini ve 1 değerini alan bir işlev gerçekleştirmesi gereken değerleri içerir. -1 negatif ise. İşlevin kendisini yazması sorun değildir, ancak veri matrisinin boyutları büyüktür ve sütunlar eşit uzunluktadır. Böylece, sütunların üzerine ilmek yapan, görevi yerine getiren ve sonuçları eşit sayıda sütunlu ve aynı uzunlukta satırlarla başka bir matrise kaydeden bir kod yazabilmem gerekir.VBA

x1;x2;x3;x4 
1;-1;2;4 
-5;1;2;-1 
1; ;2;1 
3; ; ;-4 
5; ; ; 
6; ; ; 

Ve içine bu aktarmak:

y1;y2;y3;y4 
1;-1;1;1 
-1;1;1;-1 
1; ;1;1 
1; ; ;-1 
1; ; ; 
1; ; ; 

x'ler ve aynı satırda olmak y kullanıcısının ihtiyacı, ben uğraşıyorum veri kümesi ve ne elde etmek istiyorum bir örnek daha somut olmak gerekirse .

Teşekkürler!

DÜZENLEME:

Timestamp Last Trade Volume Timestamp Last Trade Volume Timestamp Last Trade Volume Timestamp Last Trade Volume 
4.1.2016 13:34 3.12 3300 4.1.2016 13:34 7.82 100 4.1.2016 13:34 4.58 3000 4.1.2016 13:35 4.59 #N/A 
4.1.2016 13:34 3.12 600 4.1.2016 13:34 7.83 300 4.1.2016 13:34 4.58 5750 4.1.2016 13:34 4.61 1000 
4.1.2016 13:34 3.12 1000 4.1.2016 13:34 7.85 200 4.1.2016 13:34 4.59 300 4.1.2016 13:34 4.61 9500 
4.1.2016 13:34 3.12 800 4.1.2016 13:34 7.85 500 4.1.2016 13:34 4.59 2000 4.1.2016 13:34 4.6 2200 
4.1.2016 13:34 3.12 1200 4.1.2016 13:34 7.85 1700 4.1.2016 13:34 4.59 1000 4.1.2016 13:34 4.6 1200 
4.1.2016 13:34 3.12 400 4.1.2016 13:34 7.85 100 4.1.2016 13:34 4.59 950 4.1.2016 13:33 4.6 500 
4.1.2016 13:34 3.12 600 4.1.2016 13:34 7.85 200 4.1.2016 13:34 4.59 100 4.1.2016 13:33 4.6 2000 
4.1.2016 13:34 3.11 4500 4.1.2016 13:34 7.85 1800 4.1.2016 13:34 4.59 750 4.1.2016 13:33 4.61 7500 
4.1.2016 13:34 3.11 300 4.1.2016 13:34 7.82 2000 4.1.2016 13:34 4.58 500 4.1.2016 13:33 4.59 1400 
4.1.2016 13:34 3.11 3700 4.1.2016 13:34 7.83 1000 4.1.2016 13:34 4.59 2000 4.1.2016 13:33 4.59 11000 

, ben 300 + sütunları var ve en uzun satırlar vardır satırlar eşit uzunlukta olmaması hariç: Gerçekte , ne uğraşıyorum daha şuna benzer bir şeydir 100.000'den fazla uzun. Bu şeyi yalnızca Son sütunlar üzerinde çalıştırabilmem gerekiyor, Hacim sütununda çalıştırılacak farklı bir kod var. Ben tam uzunluk bir sütun için formül de dahil olmak üzere bir hücre yapıştırmak için izin veren bir çözüm ile tamamen iyiyim, ama tüm dizi üzerinde kod yapıştırmak, çünkü tüm excel çökmesine çünkü mümkün olması gerekir hiçbir değeri olmayan hücreleri atlamak için döngü oluşturur.

+1

Şimdiye kadar neler kodlar/denediniz? Lütfen soruya VBA kodunuzu ekleyin. Özellikle bir problem oluşturmayacak gibi görünen işlevi görmek isterim. – Ralph

+0

"her üçüncü sütun" dediniz, ancak verdiğiniz örnekler her sütunda hareket ediyor gibi görünüyor. o nasıl? – user3598756

+0

Asıl dosyanın bir örneği eklendi. Clarifyin sorusu için teşekkürler. – Ana

cevap

0

Üzgünüm, önümde kodum yok, ama yine de yardımcı olabileceğimi düşünüyorum.

XlLastCell nedir? Yani, bu en verimli olmayabilir, ama bu en kolay olurdu. Sadece satır ve xlLastCell sütunu olsun, ve satır = 1 için sürgün için, col = 1 için lastcol, eğer boşsa o zaman sonraki sütun/sonraki satır, eğer abs (cell.value) = cell.value sonra sayfalar (2)) .seksler (satır, sütun) = 1, başka = 1. Her üçüncü sütundan bahsettiniz, daha sonra sadece bir if .row mod 3 = (ihtiyacınız olana bağlı olarak 1,2,0) kullanacağım. Şimdi, bu sadece "başka bir matris" ile çalışıyorsa, sadece başka bir elektronik tablo anlamına gelir. Bir 2d dizisini kastediyorsanız, xlLastCell'i bulabilir ve sonra matrisi (lastrow, lastcol) int olarak yeniden yazabilir ve hepsini matta2 yerine matrise yerleştirebilirsiniz. Ya da tamamen farklı bir şey ifade ediyorsanız, o zaman özür dilerim ve emin değilim.

+0

Bu sabah koyduğunuz düzenlemeyi görüyorum. 30 + milyon kez bir döngüyü neden çalıştırmanın başarısız olacağını hala emin değilim, ancak bu sorunu yaşıyorsanız, verileri yeniden biçimlendirmenizi öneririm. – CWilson

+0

Önerdiğim kadar kolay değil ama yine de oldukça kolay. İstediğiniz takdirde fantezi bir şey kodlayabilirsiniz, ancak sadece 300-400 sütuntan bahsediyoruz, sadece bir makroyu kaydetmek daha hızlı olacaktır. D-F sütunlarını vurgulayın, kesilmiş, yeni sayfa (ya da daha iyi bir veriyi saklamak için bir veri tablosunda, hatta Access işe yaradı, fakat benim aramam değil), A1'e yapıştırın, orijinal sayfaya geri dönün. Kaydı durdurun, bir kısayol tuşu ekleyin ve sadece kısayol tuşuna yüzlerce kez basın. – CWilson