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

ملف بطيئ


black-eagle

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

السلام عليكم
أسباب بطء الملف كثيرة ومتعددة
قد يكون به صور
قد يكون به معادلات
قد يكون به ورقات (شيتات) محجوز بها خلايا حتي نهاية الورقة 
..
الأفضل رفع الملف
  • Like 2
رابط هذا التعليق
شارك

تفضل الكود مشكورا 

 

Dim y1, y2, z, g, L, H
Sub dd()
Rw = 5
Y = Val(InputBox("step"))
clm = Val(InputBox("Column"))
x = Cells(Cells.Rows.Count, clm).End(xlUp).Row
If Cells(Cells.Rows.Count, clm).End(xlUp).Row >= 5 Then
Range(Cells(5, clm), Cells(Cells(Cells.Rows.Count, clm).End(xlUp).Row, clm)).Clear
End If
endr = Cells(Cells.Rows.Count, 1).End(xlUp).Row
g = [B5]
y1 = g - Y
y2 = g + Y
L = g
H = g
For r1 = 5 To endr
d = DateSerial(Mid(Cells(r1, 1), 1, 4), Mid(Cells(r1, 1), 6, 2), Mid(Cells(r1, 1), 9, 2))
d1 = Format(d, "dddd")
d2 = Cells(r1, 1)
d = Cells(r1, 1)
If Cells(r1, 2) < L Then L = Cells(r1, 2)
If Cells(r1, 2) > H Then H = Cells(r1, 2)
1:
If check(Cells(r1, 2)) = 1 Then
Cells(r2 + 5, clm) = "down" & String(z1, "+")
Cells(r2 + 5, clm).AddComment
Cells(r2 + 5, clm).Comment.Visible = False
fom = IIf(IIf(H <> 0, H, hh) < g, "no", IIf(Round((IIf(H <> 0, H, hh) - 100) / Y) = (IIf(H <> 0, H, hh) - 100) / Y, "no", IIf(H <> 0, H, hh)))
Cells(r2 + 5, clm).Comment.Text Text:="Author:" & Chr(10) & "Date : " & d1 & " " & Chr(10) & "          " & d2 & "" & Chr(10) & "Highest : " & fom & " " & Chr(10) & ""
If H <> 0 Then hh = H
H = 0
r2 = r2 + 1
g = g - Y
y1 = g - Y
y2 = g + Y
z1 = 0
z2 = 0
If Cells(r1, 2) <= y1 Then
z1 = 1
GoTo 1
End If
ElseIf check(Cells(r1, 2)) = 2 Then
Cells(r2 + 5, clm) = "up" & String(z2, "+")
Cells(r2 + 5, clm).AddComment
Cells(r2 + 5, clm).Comment.Visible = False
fom2 = IIf(IIf(L <> 999999, L, ll) > g, "no", IIf(Round((IIf(L <> 999999, L, ll) - 100) / Y) = (IIf(L <> 999999, L, ll) - 100) / Y, "no", IIf(L <> 999999, L, ll)))
Cells(r2 + 5, clm).Comment.Text Text:="Author:" & Chr(10) & "Date : " & d1 & " " & Chr(10) & "          " & d2 & "" & Chr(10) & "Lowest : " & fom2 & " " & Chr(10) & ""
If L <> 999999 Then ll = L
L = 999999
r2 = r2 + 1
g = g + Y
y1 = g - Y
y2 = g + Y
z1 = 0
z2 = 0

If Cells(r1, 2) >= y2 Then
z2 = 1
GoTo 1
End If
End If
Next
End Sub

Function check(x)
If x <= y1 Then
check = 1
ElseIf x >= y2 Then
check = 2
ElseIf x > y1 And x < y2 Then
check = 3
End If
End Function
رابط هذا التعليق
شارك

السلام عليكم

بارك الله فيك اخى الكريم وزادك الله من علمة 

الكود يكون بحدث مودويل وأم حدث ملف ورقة العمل أم حدث ورك شيت وان امكن شرح الكود بارك الله فيك

وفقك الله

تم تعديل بواسطه حسام عيسى
رابط هذا التعليق
شارك

الأخ صاحب الموضوع الكود بدون الملف ليس منه فائدة على الإطلاق ارفق ملفك عل أحد الأخوة يعينك على حل مشكلة بطء الملف ..!!

رابط هذا التعليق
شارك

السلام عليكم

بارك الله فيك اخى الكريم وزادك الله من علمة 

الكود يكون بحدث مودويل وأم حدث ملف ورقة العمل أم حدث ورك شيت وان امكن شرح الكود بارك الله فيك

وفقك الله

بارك الله بك استاذ حسام ,, بصراحة خبرتي البرمجية ضئيلة و هذا تم بمساعدة كريمة من استاذنا الكبير احمد عبد الناصر جزاه الله كل خير

رابط هذا التعليق
شارك

أخي الحبيب .. جربت ملفك والملف ليس بطيئاً على الإطلاق ..

قد يكون جهازك مصاب بفيروس أو ما شابه وهو الذي يسبب بطء الملف وبطء التعامل مع برنامج الإكسيل

تم تعديل بواسطه YasserKhalil
رابط هذا التعليق
شارك

شكرا لك اخي ياسر على المداخلة الكريمة ,, مسألة البطء بسبب ضخامة قاعدة البيانات اي مايقارب 50000 سطر و لأكثر من ملف
تأخذ العملية ما يقارب ال 30ثانية لتنتهي , علما و عند الاستخدام تكون الرامات الفارغة 2GB و المعالج لا يستهلك اكتر من 10%
ربما المسألة لها علاقة بمعادلات الكود او التكرار و ما الا ذالك  :power: 

رابط هذا التعليق
شارك

السلام عليكم
أخي الحبيب
أكيد انك لن تريد عمل التدقيق (المراجعة) علي 50,000 سطر كما أوضحت

لو كانت 30 ثانية كما تقول فهذا سريع وليس بطيء مع هذا الكم من البيانات

أعتقد انك تتابع تغير أسعار شيء ما
فلاداعي لمقارنة الأسعار كل يوم - كل يوم-  كل يوم لنفس البيانات القديمة لعشر سنوات مضت
لاأعرف ان كنت مصيبا ام مخطئا
بعد المقارنة ومعرفة الناتج +
up  ، up+ ، down ، down  ، ... وما إلي ذلك

يمكن تثبيت هذه النتائج بما فيها من كومنتات

إذن عليك تغيير الكود ليعمل بداية من آخر سطر به نتيجة من عمود النتيجة وليس من أول سطر

  • Like 1
رابط هذا التعليق
شارك

اذهب الى صيغ

ثم خيارات الحساب

ازل علامة تلقائى

ثم ضع علامة على يدوى

 هذه الوظيفه ستقوم بايقاف الحساب مما يخفف من الملف

وعندما تريد عمل حساب اضغط F9

ارجو ان اكون قد وضحت

تقبل خالص تحياتى

hhh.bmp

رابط هذا التعليق
شارك

اذهب الى صيغ

ثم خيارات الحساب

ازل علامة تلقائى

ثم ضع علامة على يدوى

 هذه الوظيفه ستقوم بايقاف الحساب مما يخفف من الملف

وعندما تريد عمل حساب اضغط F9

ارجو ان اكون قد وضحت

تقبل خالص تحياتى

شكرا لك اخي الكريم و لكن الطريقة لم تساعد بتسريع الملف اظن المشكلة مع الكود

رابط هذا التعليق
شارك

السلام عليكم

أخي الحبيب

أكيد انك لن تريد عمل التدقيق (المراجعة) علي 50,000 سطر كما أوضحت

لو كانت 30 ثانية كما تقول فهذا سريع وليس بطيء مع هذا الكم من البيانات

أعتقد انك تتابع تغير أسعار شيء ما

فلاداعي لمقارنة الأسعار كل يوم - كل يوم-  كل يوم لنفس البيانات القديمة لعشر سنوات مضت

لاأعرف ان كنت مصيبا ام مخطئا

بعد المقارنة ومعرفة الناتج +up  ، up+ ، down ، down  ، ... وما إلي ذلك

يمكن تثبيت هذه النتائج بما فيها من كومنتات

إذن عليك تغيير الكود ليعمل بداية من آخر سطر به نتيجة من عمود النتيجة وليس من أول سطر

ممكن الكود بعد التعديل ؟

رابط هذا التعليق
شارك

لاأدري إن كنت مصيبا أم لا
لكن جرب التعديل التالي

في أول الكود بعد 4 أو 5 أسطر تجد الشرط التالي

If Cells(Cells.Rows.Count, clm).End(xlUp).Row >= 5 Then
    Range(Cells(5, clm), Cells(Cells(Cells.Rows.Count, clm).End(xlUp).Row, clm)).Clear
End If

إحذفه

 

ثم بعده بعدة أسطر تجد الأمر 

For r1 = 5 To endr

إستبدله بالتالي

For r1 = x+1 To endr

 

ليكون الكود بعد التعديل هكذا

Dim y1, y2, z, g, L, H
Sub dd()
Rw = 5
Y = Val(InputBox("برجاء ادخل قيمة step"))
clm = Val(InputBox("براجاء ادخال رقم عمود النتيجة"))
x = Cells(Cells.Rows.Count, clm).End(xlUp).Row

كان هنا شرط تم إلغاؤه

    endr = Cells(Cells.Rows.Count, 1).End(xlUp).Row
    g = [B5]
    y1 = g - Y
    y2 = g + Y
    L = g
    H = g


For r1 = x+1 To endr
...

..

رابط هذا التعليق
شارك

 

لاأدري إن كنت مصيبا أم لا

لكن جرب التعديل التالي

في أول الكود بعد 4 أو 5 أسطر تجد الشرط التالي

If Cells(Cells.Rows.Count, clm).End(xlUp).Row >= 5 Then

    Range(Cells(5, clm), Cells(Cells(Cells.Rows.Count, clm).End(xlUp).Row, clm)).Clear

End If

إحذفه

 

ثم بعده بعدة أسطر تجد الأمر 

For r1 = 5 To endr

إستبدله بالتالي

For r1 = x+1 To endr

 

ليكون الكود بعد التعديل هكذا

Dim y1, y2, z, g, L, H
Sub dd()
Rw = 5
Y = Val(InputBox("برجاء ادخل قيمة step"))
clm = Val(InputBox("براجاء ادخال رقم عمود النتيجة"))
x = Cells(Cells.Rows.Count, clm).End(xlUp).Row

كان هنا شرط تم إلغاؤه

    endr = Cells(Cells.Rows.Count, 1).End(xlUp).Row
    g = [B5]
    y1 = g - Y
    y2 = g + Y
    L = g
    H = g


For r1 = x+1 To endr
...

..

 

بارك الله بك استاذنا الغالي 

عند وضع x+1 يعطيني mismatch error

لكن مع x+5 يعمل على نفس السرعة السابقة  :eek2: 

رابط هذا التعليق
شارك

اخواني الكرم , شكرا لكم على المساعدة الطيبة
حاولت تعديل تعديل الكود ليصبح لدي ستيب متعدد

اريد وضع الستيب على الشكل
Y1 = E2 , CLM1 = 5
Y2 = F2 , CLM2 =6
Y3 = G2 , CLM3=7
.
.
علما ان Y هي قيمة الستيب
و CLm هي رقم العمود

همسة : المف يأخذ وقتا في قراءة البيانات, ان امكن جعل القيم تكتب معا في كامل الاعمدة
لا ان يعيد القراءة في كل عامود ,, و شكرا

رابط هذا التعليق
شارك

السلام عليكم
رددت أخي عليا علي الخاص سائلا نفس السؤال
ورددت عليك

"هل تعني أنه
إذا كان  Y1 = E2 فإن  CLM1 = 5 

وإذا كان Y2 = F2 فإن CLM2 =6 وهكذا
...............
أي تريد قيم ثابتة للـ CLM حسب قيمة الـ Y"

فأجبتني

"بالظبط , هذا مأريده 
حيث ان رقم العمود E = 5 فقيمة CLM = 5
و رقم العمود F = 6 فقيمة CLM = 6
ما يهمني ان يكون ناتح قيم الستيب في العامود E تحت العامود E
و مثله باقي القيم
فاذا وجدت قيمة في الخلايا E2,F2,G2,H2,I2,......... نعتبرها الستيب, و يكون CLM هو رقم الحرف"
 
فقط أحببت أنقل المحادثة لمن يريد المشاركة
رابط هذا التعليق
شارك

اخواني الكرم , شكرا لكم على المساعدة الطيبة

حاولت تعديل الكود ليصبح لدي ستيب متعدد

اريد وضع الستيب على الشكل

Y1 = E2 , CLM1 = 5

Y2 = F2 , CLM2 =6

Y3 = G2 , CLM3=7

.

.

علما ان Y هي قيمة الستيب

و CLm هي رقم العمود

ما يهمني ان يكون ناتح قيم الستيب في العامود E تحت العامود E
و مثله باقي القيم
فاذا وجدت قيمة في الخلايا E2,F2,G2,H2,I2,......... نعتبرها الستيب, و يكون CLM هو رقم الحرف"

همسة : المف يأخذ وقتا في قراءة البيانات, ان امكن جعل القيم تكتب معا في كامل الاعمدة

لا ان يعيد القراءة لكل عامود ,, و شكرا

 

 

UP

FIN.rar

رابط هذا التعليق
شارك

السلام عليكم

 

استاذي الفاضل اسعد الله صباحك

 

- بالنسبة لبطء الملف مع كمية البيانات الكبيرة فلم اجد له حل حاولت قراءة الكود اكثر من مرة و لم استوعبه(اعادة كتابته اسهل ههههه) , من الممكن ان يكون السبب في comments .

 

-بالنسبة لتعدد قيم steps علي مستوى ثلاث عواميد , الملف باستطاعته ذلك ففي كل مرة يسءلك عن قيمة ال step و رقم العمود الذي تريد النتيجه ان تظهر به 

 

و لكن سيتطلب ذللك منك تشغيل الكود ثلاث مرات (امر سهل :D ).

 

-كان عندي تساؤل فكما اتذكر الكود كان به عيوب و لم يكن مكتمل و احيانا يأتي بنتائج خاطءه خاصة عن وجود ارقام بعلامات عشرية ,

فهل مازلت تواجه مشاكل في نتائج الكود ؟!

 

تحياتي و معذرة علي التأخر في الرد

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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

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

Important Information