VBA Dönene Kadar Yap, formül aralığını değiştir


-1

Bir klasördeki tüm dosyalar arasında bir döngü çalıştırmaya çalışıyorum, bu dosyalar ile 20x2 hücreleri dolduracak bir formül çalıştırmak istiyorum (örneğin N1: O20) ve bulunan değerleri saklamak ve bir sonraki değerleri eklemek istiyorum. önceki yinelemenin alt kısmı.

İşte çalışıyorum kod, A1: K36004 .dat dosyalarının bilgilerini görüntülediği yerdir.

Len (strFile)> 0 'Buraya netcontents eklemek, sonraki yinelemede formül değerini temizler

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
     .TextFileParseType = xlDelimited
     .TextFileCommaDelimiter = True
     .Refresh
End With
'End Extraction
' Filter_Minute Macro

Bu değerlerin yerine kaydedilmesi için üretilen değerlere ihtiyacım var ve bir sonraki yineleme bir sonraki boş satıra taşındı

Range("N5").Select
Range("N5").Formula = "=INDEX($A$5:$A$36004,(ROW(N5)-5)*1200+1,1)"
    Selection.AutoFill Destination:=Range("N5:N34"), Type:=xlFillDefault
    Range("N5:N34").Select
    Range("N5:N34").Select
Range("O5").Select
Range("O5").Formula = "=MAX(INDEX($J$3:$J$36004,(ROW(H3)-3)*1200+1,1):INDEX($J$3:$J$36004,(ROW(H4)-3)*1200,1))"
    Selection.AutoFill Destination:=Range("O5:O34"), Type:=xlFillDefault
    Range("O5:O34").Select
    Range("O5:O34").Select

strFile = Dir

döngü

https://i.stack.imgur.com/uo3Wa.png

Bu resim, önceki sayımın tamamı değiştirildikten sonra, sonraki yinelemelerde olanları göstermektedir.

Zaman ayırdığınız için teşekkürler.

Yanıtlar:


0

Ne sorduğunuzu tam olarak takip etmiyorum (soru yok), ancak basit bir durumda mekanik olarak sabit bir hedef aralığını takip etmek (N1: O20):

  • x, aralıktaki ilk satırdır (1)
  • satır sayısı (numRows) sabittir (20)
  • VBA formüllerinde bir hedef aralık "Nx: Ox + numRows-1" biçiminde bir dize değeridir (Aralık)
  • döngü başlamadan önce ilk x değeri atanır
  • her yineleme için: theRange = "N" & str (x) & ": O" & str (x + numRows-1); {aralık, range.(theRange)tırnak işareti olmadan başvurur}; x = x + numRows; -sonu döngüsü

İlk defa: theRange = "N1: O20". İkinci kez: theRange = "N21: O40"

Anlamlı değişken isimleri kullanın.

Temel olarak, ilgilendiğiniz bilgilerin "çerçevenin bitiş noktalarını" izliyor ve ardından çerçeveyi kaydırıyorsunuz. Çerçeveniz değişken büyüklüğündeyse, uç noktaların nasıl belirleneceğini belirlemek için daha fazla mantığa ihtiyacınız olacaktır. Örnek metninizde, başlangıç ​​satırı 1, resminizde başlangıç ​​satırı 5 olur.

Aynı döngüde ihtiyacınız olan diğer değişken aralıkları için benzer bir şema kullanın.


Tamam, teşekkürler, belirtilen bir soru yoktu, ama neyle uğraştığımın üzerindesiniz. Bunu deneyeceğim.
Workinatwork
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.