• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Aynı excel dosyası içerisinden veri getirme

Katılım
19 Eylül 2023
Mesajlar
18
Excel Vers. ve Dili
Microsoft Office LTSC Professional Plus 2021 bit
Değerli Excel Üstadları Merhaba;

Basit bir şekilde exceldeki sayfadan veri almak istiyorum fakat bir türlü sonuca varamadım, bu nedenle yardımınıza ihtiyacım var.

Data sekmesinde bir tablom var. Buradaki bilgileri Veri sekmesinde oluşturduğum tabloya formülle çekmek istiyorum. Veri sekmesinde örnek olarak bilgileri manuel yazdığım bir tablo var. Hemen yanındaki tabloya formül ile işlem yapmak istiyorum.

Veri sekmesindeki Formül tablom için;

247433


Öncelikli olarak Data sekmesinde Kalite 1 olan birimin Hacim ve M miktarını almak istiyorum
Daha sonra aynı şekilde kalite 2 olan ürünün aynı bilgilerini çekmek istiyorum. Arada boş satırlarda var.
 

Ekli dosyalar

Bu işlemi düşey ara ile çok rahat yapabilirsiniz. Ancak Veri (Data dosyanızı biraz düzenlemeniz gerekiyor ) Neyi nere göre getirilecek net değil.
 
Bu işlemi düşey ara ile çok rahat yapabilirsiniz. Ancak Veri (Data dosyanızı biraz düzenlemeniz gerekiyor ) Neyi nere göre getirilecek net değil.
Evet tablo biraz karmaşık fakat ana dosyayı bozamıyorum veya değiştiremiyorum. Çünkü değiştirdiğim zaman asıl dosyada çok fazla makro ve formül baştan yapılması gerek.

Önce kalite satırında kalite 1 yazanı dikkate alacağız. Daha sonra Kalite 1 e ait olan Hacim ve M değerlerini almam gerekiyor.
Sonra kalite 2 için aynı işlem vs
Kısaca bu şekidle
 
Makroyla çözüm daha uygun görünüyor..

C++:
Option Explicit

Sub Aktar()
    Dim S1 As Worksheet, S2 As Worksheet
    Dim X As Integer, Y As Long
    Dim Last_Row As Long, No As Long
    
    Set S1 = Sheets("Data")
    Set S2 = Sheets("Veri")
    
    Last_Row = 20
    
    ReDim Liste(1 To Last_Row * 5, 1 To 4)
    
    For Y = 2 To S1.Cells(3, S1.Columns.Count).End(1).Column
        For X = 4 To Last_Row
            If S1.Cells(X, Y).Value <> "" Then
                No = No + 1
                Liste(No, 1) = S1.Cells(2, 9).Value
                Liste(No, 2) = S1.Cells(X, 1).Value
                Liste(No, 3) = S1.Cells(2, Y).Value
                Liste(No, 4) = S1.Cells(X, Y).Value
            End If
        Next
    Next
    
    S2.Range("G2").Resize(No, 4) = Liste
    
    Set S1 = Nothing
    Set S2 = Nothing
    
    MsgBox "Aktarım işlemi tamamlanmıştır.", vbInformation
End Sub
 
Makroyla çözüm daha uygun görünüyor..

C++:
Option Explicit

Sub Aktar()
    Dim S1 As Worksheet, S2 As Worksheet
    Dim X As Integer, Y As Long
    Dim Last_Row As Long, No As Long
  
    Set S1 = Sheets("Data")
    Set S2 = Sheets("Veri")
  
    Last_Row = 20
  
    ReDim Liste(1 To Last_Row * 5, 1 To 4)
  
    For Y = 2 To S1.Cells(3, S1.Columns.Count).End(1).Column
        For X = 4 To Last_Row
            If S1.Cells(X, Y).Value <> "" Then
                No = No + 1
                Liste(No, 1) = S1.Cells(2, 9).Value
                Liste(No, 2) = S1.Cells(X, 1).Value
                Liste(No, 3) = S1.Cells(2, Y).Value
                Liste(No, 4) = S1.Cells(X, Y).Value
            End If
        Next
    Next
  
    S2.Range("G2").Resize(No, 4) = Liste
  
    Set S1 = Nothing
    Set S2 = Nothing
  
    MsgBox "Aktarım işlemi tamamlanmıştır.", vbInformation
End Sub
Sorunsuz çalışmaktadır teşekkür ediyorum.
Sadece bir kısım eksik kaldı
Örneğin bu kırmızı ile işaretlediğim hücreler boş, buralara veri geldiğinde de otomatik diğer tarafa geçmesi için koda nasıl bir ekleme yapmam lazım.
Yani B2 ve F2 sütunları arasında her zaman dolu hücreleri algılamasını istiyorum.

247440
 
Makroyu yeniden çalıştırırsanız listeniz güncellenecektir.
 
Makroyla çözüm daha uygun görünüyor..

C++:
Option Explicit

Sub Aktar()
    Dim S1 As Worksheet, S2 As Worksheet
    Dim X As Integer, Y As Long
    Dim Last_Row As Long, No As Long
   
    Set S1 = Sheets("Data")
    Set S2 = Sheets("Veri")
   
    Last_Row = 20
   
    ReDim Liste(1 To Last_Row * 5, 1 To 4)
   
    For Y = 2 To S1.Cells(3, S1.Columns.Count).End(1).Column
        For X = 4 To Last_Row
            If S1.Cells(X, Y).Value <> "" Then
                No = No + 1
                Liste(No, 1) = S1.Cells(2, 9).Value
                Liste(No, 2) = S1.Cells(X, 1).Value
                Liste(No, 3) = S1.Cells(2, Y).Value
                Liste(No, 4) = S1.Cells(X, Y).Value
            End If
        Next
    Next
   
    S2.Range("G2").Resize(No, 4) = Liste
   
    Set S1 = Nothing
    Set S2 = Nothing
   
    MsgBox "Aktarım işlemi tamamlanmıştır.", vbInformation
End Sub

247446

buranın konumu I10 olarak değiştirmek istiyorum. Kod içerisinde hangi alanda değişiklik yapmam gerekiyor.
Teşekkürler
 
Liste(No, 1) = S1.Cells(2, 9).Value

2 değerini 10 yaparak deneyiniz.
 
Geri
Üst