Microsoft Excel'de VBA kullanarak her sayfanın bir hücresinin CurrentRegion'ını tek bir sayfaya kopyalayın

Anonim

Aynı anda birden fazla sayfa işliyorsanız ve her sayfadaki verileri bir ana çalışma sayfasına kopyalamak istiyorsanız bu makaleyi okumalısınız. Tüm çalışma sayfalarındaki verileri tek bir sayfada birleştirmek için VBA kodunun currentregion özelliğini kullanacağız. Bu özellik, AutoFormat yöntemi gibi tüm geçerli bölgeyi içerecek şekilde seçimi otomatik olarak genişleten birçok işlem için kullanışlıdır. Bu özellik, korumalı bir çalışma sayfasında kullanılamaz.

Koşul şudur: her sayfa benzer bir format, yani aynı sayıda sütun içermelidir; aynı formatı kullanarak doğru bir şekilde birleştirilmiş verilere sahip olabiliriz.

Lütfen dikkat: bu makale VBA kodunu kullanmayı gösterecektir; Herhangi bir nedenle sayfalardan birinde sütun sayısı farklıysa, birleştirilmiş verilerin tamamı doğru resmi vermeyecektir. Aynı sayıda sütun kullanılması şiddetle tavsiye edilir. VBA kodu, çalışma kitabına yeni bir sayfa ekler ve ardından üzerine yazmadan her sayfadan sonra verileri kopyalayıp yapıştırır.

Ocak, Şubat ve Mart olmak üzere 3 sayfadan bir örnek alalım. Bu sayfaların anlık görüntüsü aşağıdadır:

Tüm sayfalardaki verileri tek bir sayfada birleştirmek için VB düzenleyiciyi başlatmak için aşağıdaki adımları izlememiz gerekir:

  • Geliştirici sekmesine tıklayın
  • Kod grubundan Visual Basic'i seçin

  • Aşağıdaki kodu standart modüle kopyalayın
Sub CopyCurrentRegion() Dim sh As Worksheet Dim DestSh As Worksheet Dim Dim Last If SheetExists("Master") = True Then MsgBox "Sayfa Ana zaten var" Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh .Name = BuÇalışma Kitabındaki Her sh için "Master".Çalışma Sayfaları sh.Name ise DestSh.Name ise sh.UsedRange.Count > 1 ise Last = LastRow(DestSh) sh.Range("A1").CurrentRegion.Copy DestSh. Hücreler(Last + 1, 1) End If End If Next Application.ScreenUpdating = True End Sub Sub CopyCurrentRegionValues() Dim sh Çalışma Sayfası Dim DestSh Çalışma Sayfası Dim Last As Long If SheetExists("Master") = True Then MsgBox "Sayfa Master zaten var" Exit Sub End If Application.ScreenUpdating = False Set DestSh = Worksheets.Add DestSh.Name = BuÇalışma Kitabındaki Her sh için "Master". Last = LastRow(DestSh) sh.Range("A1") ile.CurrentRegion DestSh.Cells(Last + 1, 1).Resize(.Rows.Count, _ .Columns.Count).Value = .Value End With End If End If Next Application.ScreenUpdating = True End Alt Fonksiyon LastRow(sh As Worksheet) Hatada Devam Sonraki LastRow = sh.Cells.Find(What:="*", _ After:=sh.Range ("A1"), _ Lookat:=xlPart, _ LookIn:=xlFormüller, _ SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, _ MatchCase:=False.Row On Error GoTo 0 End Function Function Lastcol(sh As Worksheet) ) Hata Devam Ediyor Sonraki Lastcol = sh.Cells.Find(What:="*", _ After:=sh.Range("A1")), _ Lookat:=xlPart, _ LookIn:=xlFormulas, _ SearchOrder:=xlByColumns , _ SearchDirection:=xlPrevious, _ MatchCase:=False.Column On Error GoTo 0 End Function Function SheetExists(SName As String, _ Opsiyonel ByVal WB As Workbook) As Boolean On Error Resume Next WB Hiçbir Şey Değilse WB = ThisWorkbook Ayarla SheetExists = CBool(Len(Sheets(SName).Name)) Bitiş Fonksiyonu 

CopyCurrentRegion makrosu “SheetExists” işlevini çağırır ve “Master” olan bir çalışma sayfası adı olup olmadığını kontrol eder; eğer bulunursa hiçbir şey yapmaz, aksi takdirde aktif çalışma kitabına yeni çalışma sayfası ekler ve onu “Master” olarak yeniden adlandırır ve ardından tüm sayfalardan veri kopyalar.

Birleştirilmiş verilerin anlık görüntüleri aşağıdadır:

Not: Örnek çalışma kitabı, Ana çalışma sayfasını içerir; Ana çalışma sayfasını silmeniz ve ardından VBA kodunun çalıştığını görmek için makroyu çalıştırmanız önerilir.

Çözüm:Artık her çalışma sayfasındaki verileri tek bir sayfaya aktarmak için kullanabileceğimiz koda sahibiz.

Bloglarımızı beğendiyseniz, Facebook'ta arkadaşlarınızla paylaşın. Ayrıca bizi Twitter ve Facebook'ta da takip edebilirsiniz.

Sizden haber almayı çok isteriz, işimizi nasıl iyileştirebileceğimizi, tamamlayabileceğimizi veya yenileyebileceğimizi ve sizin için daha iyi hale getirebileceğimizi bize bildirin. Bize e-posta sitesinde yazın