VBA ile excel'de hücre adresleriyle çalışmak


1

Birden çok form içeren bir Excel sayfam var. Formlar tamamen aynı görünüyor ve bunlar arasında tamamen aynı hücrelere sahipler. 4 x 3 olarak sipariş edilirler:

x x x x
x x x x
x x x x

x x x x
....

Bunlardan 60 tanesi var ve üç sütundan sonra aralarında bir değil iki hücre var.

Şimdi benim sorum.

İlk formun sol üst köşe adresine sahipsem, bir sonraki formun bir sonraki adresini nasıl "oluşturabilirim"?

Sol üst köşeden diğerine 9 alandan oluşan bir boşluktur. İlk formun ilk sol üst köşesinden alttaki bir sonraki forma 17 alan vardır.

Yanıtlar:


1

Kullanabilirsiniz OFSET işlevi

OFFSET (başvuru, satırlar, sütunlar, [yükseklik], [genişlik])

  • Referans Gerekli. Ofseti temel almak istediğiniz referans. Referans bir hücreye veya bitişik hücrelerin aralığına atıfta bulunmalıdır; Aksi takdirde, OFFSET işlevi # DEĞER! hata değeri
  • Satırlar Gerekli. Sol üst hücrenin başvurmasını istediğiniz yukarı veya aşağı satır sayısı. Satır argümanı olarak 5 kullanılması, referanstaki sol üst hücrenin referansın altında beş satır olduğunu belirtir. Satırlar pozitif (başlangıç ​​referansının altında anlamına gelir) veya negatif (başlangıç ​​referansının üzerinde anlamına gelir) olabilir.
  • Sütunlar Gerekli. Sonucun sol üst hücresinin başvurmasını istediğiniz sola veya sağa sütun sayısı. Cols argümanı olarak 5 kullanılması, referanstaki sol üst hücrenin referansın sağındaki beş sütun olduğunu belirtir. Sütunlar pozitif (başlangıç ​​referansının sağında) veya negatif (başlangıç ​​referansının solunda) anlamına gelir.

[EDITED] Hücreleri birleştirdiyseniz, MergedArea (VBA) yöntemini şu şekilde kullanmayı düşünebilirsiniz:

Set MA = Range("G14").MergeArea
NewAddress = MA.Offset(...)

Tamam bu doğru fonksiyon. Ancak sayfadaki bazı birleştirilen hücreler bulunduğundan, işlev garip davranıyor. Öyleyse ilk hücreye olan uzaklık sadece 4'tür fakat 9 olmalı ve ikinci hücreye 13 olmalı ama 18 olmalı. Bu davranıştan kurtulmak için bir bayrak var mı?
Pascal

Evet, VBA'da birleştirilmiş alanı "MergedArea" ile işaretleyebilirsiniz - Cevabımı düzenledim
duDE
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.