اذهب الي المحتوي
أوفيسنا

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

قام بنشر

السلام عليكم

اخواني الكرام ,, لدي قاعدة بيانات كبيرة و ملف الاكسيل يعمل بشكل بطيئ هل من طريقة لتسريعه ؟؟

حاولت تغير الاحقة الى xlsb ولم ينفع الامر 

قام بنشر

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

 

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
قام بنشر (معدل)

السلام عليكم

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

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

وفقك الله

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

السلام عليكم

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

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

وفقك الله

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

قام بنشر

 

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

 

شكرا لك اخي الكريم 

FIN.rar

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

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

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

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

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

قام بنشر

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

وكلما اردت التحديث اضغط F9

ارجو التوضيح اكثر ان تكرمت 

قام بنشر

السلام عليكم
أخي الحبيب
أكيد انك لن تريد عمل التدقيق (المراجعة) علي 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