اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

الردود الموصى بها

قام بنشر

بارك الله فيك أخي الغالي أبو حنين

ممكن أعرف ليه التعقيد في سطر الـ Union ؟؟!!

بدلاً من استخدام السطر بالشكل التالي

Union(Range(Cells(i, 4), Cells(i, 4)), Range(Cells(i, 6), Cells(i, 6))).Copy

يمكن استخدامه بالشكل التالي

Union(Range("D" & I), Range("F" & I)).Copy

بسطها يا كبير .. ويا ريت بعد إذنك لو مكانش يضايقك .. دا إذا مكانش يضايقك طبعاً 

أن تقوم بوضع الكود في المشاركة ..إذ أنني لا أحب تحميل المرفق إلا بعد الإطلاع على الكود المقدم ..

تقبل وافر تقديري وحبي واحترامي

  • Like 2
قام بنشر

بعد اذن الاخ ياسر والاخ أبو حنين

هذا الكود (بدون حلقات تكرارية حيث ان ابو البراء لا يجبذها)

Sub salim()
Dim My_Rg As Range
Dim t As Integer
Set My_Rg = Union(Sheets("sheet1").Range("d5").Resize(Cells(Rows.Count, 4).End(3).Row - 4, 1) _
    , Sheets("sheet1").Range("f5").Resize(Cells(Rows.Count, 6).End(3).Row - 4, 1))
  t = Application.CountA(My_Rg): If t = 0 Then Exit Sub
    Range("h5:j100").ClearContents
            With My_Rg
                .Areas(1).Copy Destination:=Range("h5")
                .Areas(2).Copy Destination:=Range("i5")
                .ClearContents
             End With

Sheets("sheet1").Range("j5").Resize(Cells(Rows.Count, 8).End(3).Row - 4, 1) _
.FormulaR1C1 = "=RC[-2]-RC[-1]"
End Sub

 

  • Like 3
قام بنشر

بارك الله فيك أخي العزيز سليم

وهذه محاولة مني بعد اقتباس الفكرة من الكود الذي قدمته

Sub Test()
    Dim Lr As Long, startRow As Long
    startRow = 5
    With ActiveSheet
        Lr = .Cells(Rows.Count, "D").End(xlUp).Row
        .Range("H" & startRow).Resize(Lr - (startRow - 1)).Value = .Range("D" & startRow).Resize(Lr - (startRow - 1)).Value
        .Range("I" & startRow).Resize(Lr - (startRow - 1)).Value = .Range("F" & startRow).Resize(Lr - (startRow - 1)).Value
        .Range("J" & startRow).Resize(Lr - (startRow - 1)).Formula = "=RC[-2]-RC[-1]"
    End With
End Sub

يمكن التعديل رقم 5 حيث يمثل صف البداية للبيانات المراد التعامل معها

تقبلوا تحياتي

  • Like 2
قام بنشر
1 دقيقه مضت, ياسر خليل أبو البراء said:

بارك الله فيك أخي العزيز سليم

وهذه محاولة مني بعد اقتباس الفكرة من الكود الذي قدمته


Sub Test()
    Dim Lr As Long, startRow As Long
    startRow = 5
    With ActiveSheet
        Lr = .Cells(Rows.Count, "D").End(xlUp).Row
        .Range("H" & startRow).Resize(Lr - (startRow - 1)).Value = .Range("D" & startRow).Resize(Lr - (startRow - 1)).Value
        .Range("I" & startRow).Resize(Lr - (startRow - 1)).Value = .Range("F" & startRow).Resize(Lr - (startRow - 1)).Value
        .Range("J" & startRow).Resize(Lr - (startRow - 1)).Formula = "=RC[-2]-RC[-1]"
    End With
End Sub

يمكن التعديل رقم 5 حيث يمثل صف البداية للبيانات المراد التعامل معها

تقبلوا تحياتي

بارك الله فيك اخي الحبيب ياسر

لكن انا ارى انه لا بد من هذا السطر في الكود

t = Application.CountA(My_Rg): If t = 0 Then Exit Sub

و ذلك من اجل تفادي محي البيانات قي النتائج في حال قام المستخدم بتنفيذ الكود اكثر من مرة قبل اضافة بيانات جديدة

  • Like 2
قام بنشر

جزيت خيراً أخي العزيز سليم على قوة الملاحظة

لم أنتبه لمسح النطاق بعد الترحيل ..

إليك التعديل التالي ليناسب المشكلة في حالة تكرار الكود

Sub Test()
    Dim Lr As Long, startRow As Long
    
    startRow = 5
    
    With ActiveSheet
        Lr = .Cells(Rows.Count, "D").End(xlUp).Row
        If Lr < startRow Then MsgBox "Put Some Data", vbExclamation: Exit Sub
        
        .Range("H" & startRow).Resize(Lr - (startRow - 1)).Value = .Range("D" & startRow).Resize(Lr - (startRow - 1)).Value
        .Range("I" & startRow).Resize(Lr - (startRow - 1)).Value = .Range("F" & startRow).Resize(Lr - (startRow - 1)).Value
        .Range("D" & startRow & ":F" & Lr).ClearContents
        .Range("J" & startRow).Resize(Lr - (startRow - 1)).Formula = "=RC[-2]-RC[-1]"
    End With
End Sub

 

  • Like 2
قام بنشر (معدل)
18 دقائق مضت, ياسر خليل أبو البراء said:

جزيت خيراً أخي العزيز سليم على قوة الملاحظة

لم أنتبه لمسح النطاق بعد الترحيل ..

إليك التعديل التالي ليناسب المشكلة في حالة تكرار الكود


Sub Test()
    Dim Lr As Long, startRow As Long
    
    startRow = 5
    
    With ActiveSheet
        Lr = .Cells(Rows.Count, "D").End(xlUp).Row
        If Lr < startRow Then MsgBox "Put Some Data", vbExclamation: Exit Sub
        
        .Range("H" & startRow).Resize(Lr - (startRow - 1)).Value = .Range("D" & startRow).Resize(Lr - (startRow - 1)).Value
        .Range("I" & startRow).Resize(Lr - (startRow - 1)).Value = .Range("F" & startRow).Resize(Lr - (startRow - 1)).Value
        .Range("D" & startRow & ":F" & Lr).ClearContents
        .Range("J" & startRow).Resize(Lr - (startRow - 1)).Formula = "=RC[-2]-RC[-1]"
    End With
End Sub

 

بارك الله بك من جديد

ملاجظة اخيرة 

لماذا لا ندع الاكسل نفسة يحدد startRow من خلال هذا السطر

startRow = Range("d1").End(xlDown).Row+1

 

تم تعديل بواسطه سليم حاصبيا
  • Like 1
قام بنشر

ماذا لو كان هناك خلية في النطاق D2:D4 غير فارغة  ؟؟ استخدام xlDown قد يسبب مشاكل في حالة وجود خلايا غير فارغة حيث أنه لن يعطي نتائج صحيحة في هذه الحالة

عموماً الأمر دائماً يرجع لهيكلة الملف ووقة العمل لذا دائماً نطلب ملف مرفق لتتضح الصورة ونطلب أن يكون الملف المرفق معبر عن الملف الأصلي بشكل كبير

جزاك الله خيراً أخي العزيز سليم

  • Like 1
قام بنشر (معدل)

بعد التحية والسلام الى كل الاخوة الكرام الذين اهتمو بسؤالي 

استسمحكم عذرا لاني الان دخلت الى الموقع الرائع اوفيسنا

اجدد لكم تشكراتي على ارسال الكود 

الكود ناجح في ترحيل البيانات من العمود D الى العود H و E الى I

ولكن هناك جزئية مهمة اريدها  وهي 

لما يكون مثلا ف العمود H بيانات سابقة اود بعد ترحيل البيانات الجديدة من العمود D ان تضاف اليها بالجمع 

مثلا توجد قيمة 10 في العمود  1 H بعد ترحيل قيمة 12 من D1 تصبح النتيجة 22 في العمود 1 H

ارجو ان اكون قد وفقت في توصيل المطلوب

وجزاكم الله خير الجزاء في الدنيا والاخرة

 

تم تعديل بواسطه saadeps
قام بنشر

بارك الله فيك استاذ انه المطلوب

ارجو المعذرة اللحظة دخلت الى الموقع لاسباب شخصية

ارجو ان تتقبل تحياتي  وبارك الله فيك مرة ثانية

 

انشئ حساب جديد او قم بتسجيل دخولك لتتمكن من اضافه تعليق جديد

يجب ان تكون عضوا لدينا لتتمكن من التعليق

انشئ حساب جديد

سجل حسابك الجديد لدينا في الموقع بمنتهي السهوله .

سجل حساب جديد

تسجيل دخول

هل تمتلك حساب بالفعل ؟ سجل دخولك من هنا.

سجل دخولك الان
  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information