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

abouelhassan

05 عضو ذهبي
  • Posts

    2926
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    8

كل منشورات العضو abouelhassan

  1. تفضل تسجيل الحضور والغياب.xlsx
  2. جرب Function GetCustomerData(customerCode As String, dataSheet As Worksheet) As Variant Dim dataRange As Range Dim result As Variant Set dataRange = dataSheet.Range("A:C") result = Application.WorksheetFunction.Index(dataRange.Columns(3), _ Application.WorksheetFunction.Match(1, (dataRange.Columns(1) = [E1]) * (dataRange.Columns(2) = customerCode), 0)) GetCustomerData = IIf(customerCode = "", "", result) End Function Function GetCustomerTotal(customerCode As String, dataSheet As Worksheet) As Variant Dim dataRange As Range Dim result As Variant Set dataRange = dataSheet.Range("A:D") result = Application.WorksheetFunction.SumIfs(dataRange.Columns(4), dataRange.Columns(1), [E1], dataRange.Columns(2), customerCode) GetCustomerTotal = IIf(customerCode = "", "", result) End Function
  3. انا اسف اخى طريقة عرض طلبك يجب ان تبدأ بالسلام عليكم اخوانى وتكتب طلبك ودعم الطلب بملف عموما جرب واخبرنى يمكنك وضع الكود في وحدة VBA في ملف Excel وسيعمل تلقائيًا بمجرد فتح الملف. إليك الخطوات لوضع الكود وجعله يعمل بشكل تلقائي بدون الحاجة لزر: 1. افتح ملف Excel الذي تريد إضافة الكود إليه. 2. اضغط `Alt` + `F11` لفتح محرر VBA. 3. في القائمة، اختر `Insert` > `Module` لإنشاء وحدة VBA جديدة. 4. الصق الكود في وحدة VBA التي تم إنشاؤها. 5. اضغط `Ctrl` + `S` لحفظ الملف. 6. أغلق محرر VBA. 7. أغلق الملف وأعد فتحه. الآن، سيعمل الكود تلقائيًا عند فتح الملف، حيث سيقوم بحفظ وإغلاق الملف تلقائيًا بعد مرور 5 دقائق من الخمول. Dim StartTimer Const IdleTime = 5 ' وقت الخمول بالدقائق Sub ResetTimer() StartTimer = Now End Sub Sub CheckIdleTime() If (Now - StartTimer) * 24 * 60 > IdleTime Then Application.DisplayAlerts = False ' لعدم عرض رسائل التنبيه ThisWorkbook.Save ' حفظ الملف ThisWorkbook.Close ' إغلاق الملف Application.DisplayAlerts = True End If End Sub Private Sub Workbook_Open() StartTimer = Now Application.OnTime Now + TimeValue("00:01:00"), "CheckIdleTime" ' فحص الوقت كل دقيقة End Sub Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) ResetTimer End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) ResetTimer End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) ResetTimer End
  4. جرب Private Sub SaveButton_Click() Dim wsHome As Worksheet Dim wsDaily As Worksheet Dim inputDate As Date Dim checkDate As Range Set wsHome = ThisWorkbook.Sheets("Home") Set wsDaily = ThisWorkbook.Sheets("Daily") 'Get the date from cell F13 in the Home sheet inputDate = wsHome.Range("F13").Value 'Check if the date is already in column J in the Daily sheet With wsDaily Set checkDate = .Columns("J").Find(inputDate, LookIn:=xlValues, lookat:=xlWhole) End With 'If the date is found, prevent saving and show a message If Not checkDate Is Nothing Then MsgBox "تم حفظ تقرير لهذا التاريخ مسبقاً في الجدول اليومي" Exit Sub End If 'Save the data if the date is not found 'Add your code here to save the data to the Daily sheet End Sub تأكد من تغيير اسماء الشيتات ("Home" و "Daily") وتعديل موضع الخطأ في حالة وجود أي اختلاف في اسماء الشيتات.
  5. جرب Private Sub SaveButton_Click() Dim wsInput As Worksheet Dim wsData As Worksheet Dim inputDate As Date Dim lastRow As Long Dim checkDate As Range Set wsInput = ThisWorkbook.Sheets("واجهة الادخال") Set wsData = ThisWorkbook.Sheets("جدول البيانات") 'Get the date from the input form inputDate = wsInput.Range("A2").Value 'Check if the date is already in the data table With wsData lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row Set checkDate = .Range("A2:A" & lastRow).Find(inputDate, LookIn:=xlValues, lookat:=xlWhole) End With 'If the date is found, prevent saving and show a message If Not checkDate Is Nothing Then MsgBox "تم حفظ تقرير لهذا التاريخ مسبقاً" Exit Sub End If 'Save the data if the date is not found 'Add your code here to save the data to the data table End Sub
  6. السطر الذي تشير إليه يقوم ب لاستخدام الكائن Dictionary. يمكنك فعل ذلك من خلال اتباع الخطوات التالية: 1. في محرر VBA، انتقل إلى القائمة "Tools" ثم "References" (أو "Tools" ثم "References" في Excel 2010). 2. ابحث عن "Microsoft Scripting Runtime" في القائمة. 3. حدد المربع بجانب "Microsoft Scripting Runtime". 4. انقر فوق "OK" لحفظ التغييرات.
  7. إليك خطوات عملية لربط بيانات الموظفين من ملفات Excel الفردية بشيت القبض الشهري: 1. **تحديد البيانات المطلوبة:** ابدأ بتحديد البيانات التي تحتاج إليها من كل ملف للموظف. على سبيل المثال، اسم الموظف، الراتب، البدلات، الحضور والانصراف، الإجازات، وأي بيانات أخرى ذات الصلة. 2. **فتح شيت القبض الشهري الجديد:** افتح شيت القبض الشهري الجديد الذي تريد دمج البيانات فيه. 3. **استيراد البيانات من مصادر خارجية:** - اختر علامة تبويب "بيانات" في شريط الأوامر. - اختر "استيراد من مصدر آخر" ثم "من ملف Excel". - حدد ملف Excel الخاص بالموظف الأول واختر "استيراد". - حدد الشيت الذي تحتوي على البيانات المطلوبة واختر "موافق". 4. **تكرار نفس العملية لبقية الموظفين:** قم بتكرار الخطوات السابقة لجميع الملفات الفردية للموظفين الباقين، حيث يمكنك استخدام نفس الخطوات لاستيراد البيانات من ملفاتهم الفردية. 5. **تنسيق البيانات:** قد تحتاج إلى ضبط تنسيق البيانات والصيغ إذا كان هناك اختلاف في التنسيق بين ملفات الموظفين. 6. **حفظ العمل:** بعد دمج جميع البيانات، قم بحفظ الشيت الجديد لديك. هذه الخطوات تقريبية وقد تحتاج إلى تعديلات بحسب تنظيم بيانات الموظفين في ملفات Excel الفردية الخاصة بهم.
  8. جرب Sub ProcessData() Dim ws1 As Worksheet, ws2 As Worksheet Dim lastRow As Long, i As Long Dim officeName As String, dateValue As String, claimNumber As String Dim uniqueOffices As New Collection Dim officeDates As New Dictionary Dim officeClaims As New Dictionary ' Set references to the worksheets Set ws1 = ThisWorkbook.Sheets("Sheet1") ' Change "Sheet1" to the actual name of your worksheet Set ws2 = ThisWorkbook.Sheets("Sheet2") ' Change "Sheet2" to the actual name of your worksheet ' Find the last row in worksheet 1 lastRow = ws1.Cells(ws1.Rows.Count, "O").End(xlUp).Row ' Loop through the data in worksheet 1 For i = 1 To lastRow ' Get the office name officeName = ws1.Cells(i, "O").Value ' Add the office name to the uniqueOffices collection On Error Resume Next uniqueOffices.Add officeName, CStr(officeName) On Error GoTo 0 ' Get the date value dateValue = CStr(ws1.Cells(i, "P").Value) ' Get the claim number claimNumber = CStr(ws1.Cells(i, "Q").Value) ' Add the date and claim number to the dictionaries if they don't already exist If Not officeDates.Exists(officeName) Then officeDates.Add officeName, dateValue officeClaims.Add officeName, claimNumber ElseIf InStr(1, officeDates(officeName), dateValue) = 0 Then officeDates(officeName) = officeDates(officeName) & " + " & dateValue ElseIf InStr(1, officeClaims(officeName), claimNumber) = 0 Then officeClaims(officeName) = officeClaims(officeName) & " + " & claimNumber End If Next i ' Write the unique office names to worksheet 2 Dim office As Variant Dim rowIndex As Long: rowIndex = 1 For Each office In uniqueOffices ws2.Cells(rowIndex, 1).Value = office ' Write the dates for each office ws2.Cells(rowIndex, 2).Value = officeDates(office) ' Write the claim numbers for each office ws2.Cells(rowIndex, 3).Value = officeClaims(office) rowIndex = rowIndex + 1 Next office MsgBox "Process complete." End Sub يرجى تغيير اسمي الورقتين "Sheet1" و "Sheet2" إلى الأسماء الفعلية للورقتين الخاصتين بك.
  9. تفضل abouelhassan.xls
  10. انا قمت بالتنفيذ على التكرار فى اسم المكتب فتحت الملف لم افهم شئ اخى وضح المطلوب تفصيلى هل المطلوب عدم تكرار التاريخ ام المطالبة ام جمعهم
  11. هذا كل ما استطيع تقديمه اخى الكريم
  12. طيب ايه المطلوب تفصيلا فى الملف الذى ارسلته لك اخى الكريم
  13. انا نفذت الموجود بالملف المرفق
  14. محاولة لعلها تفيد function onEdit(e) { var sheet = e.source.getActiveSheet(); var range = e.range; // Check if edited range is in columns A-F if (range.getColumn() >= 1 && range.getColumn() <= 6) { var row = range.getRow(); // Check if column H in the edited row is empty if (!sheet.getRange(row, 8).getValue()) { // Generate a random number and set it in column H var randomNum = Math.floor(Math.random() * 1000) + 1; sheet.getRange(row, 8).setValue(randomNum); } } } هذا الكود يعمل على تطبيق رقم عشوائي في العمود H عند تعبئة البيانات في الأعمدة A-F. يجب وضع هذا الكود في محرر النصوص في Google Apps Script وحفظه. بعد ذلك، سيتم تنفيذ الكود تلقائيًا عند تعديل البيانات في الأعمدة A-F.
  15. تفضل طلبك abouelhassan.xlsm
  16. ما هو المطلولب تفصيلى اخى لانى فتحت الملف وما فهمت المطلوب
  17. جرب =IF(G2=K2,"01-01-2000",IF(K2+L2<G2,"01-01-2030",INDEX($D$5:$D$10307,SMALL(IF(($A$5:$A$10307=E2)*($C$5:$C$10307>=SUMIF($E$2:E2,E2,$L$2:L2)),ROW($A$5:$A$10307)-ROW($A$5)+1),2)-5))) الدالة دالة مصفوفة لتعمل Ctrl + Shift + Enter لتنفيذها
  18. جرب هذه لحل هذه المشكلة، يمكنك استخدام وظيفة `INDEX` و `MATCH` في Excel للعثور على القيمة المطلوبة بناءً على الشروط التي حددتها. يمكنك استخدام الصيغة التالية في الخلية التي تريد أن تظهر فيها اسم المندوب: =INDEX('شيت 1'!$B$2:$B$1000, MATCH(1, ('شيت 1'!$A$2:$A$1000=تاريخ)*('شيت 1'!$C$2:$C$1000=كود_الزبون), 0)) يرجى استبدال `'شيت 1'` بالاسم الصحيح للشيت الذي تحتوي عليه البيانات، وتغيير `$B$2:$B$1000` إلى النطاق الصحيح الذي تحتوي فيه أسماء المندوبين، وكذلك `$A$2:$A$1000` و `$C$2:$C$1000` بالنطاقات التي تحتوي على تواريخ وأكواد الزبائن على التوالي. قم بتغيير `تاريخ` و `كود_الزبون` إلى مراجع للخلايا التي تحتوي على التاريخ وكود الزبون اللذين تبحث عنهما.
  19. انا فتحت الشيت مش فاهم اى شئ اخى من المكتوب انت تتعامل معى كأنى افهم مطلبك عن طريق توارد الخواطر يجب ان تشرح لى تفصيلى المطلوب
  20. ده سوال جديد افتح موضوع جديد اخى
  21. سامحنى اخى مش فاهم طلبك انت طلبت فى البداية طلب والان طلب اخر غير واضح
  22. جرب Sub DistributeSchools() Dim Teachers() As String Dim Schools As Integer Dim SchoolsPerTeacher As Integer Dim TotalTeachers As Integer Dim RandomIndex As Integer Dim i As Integer Dim j As Integer Schools = 304 SchoolsPerTeacher = 6 TotalTeachers = 50 ' عدد المعلمين ReDim Teachers(1 To TotalTeachers) ' ملء المعلمين بترقيمهم For i = 1 To TotalTeachers Teachers(i) = "Teacher " & i Next i ' توزيع المدارس بين المعلمين For i = 1 To Schools RandomIndex = Int((TotalTeachers * Rnd) + 1) ' تأكد من أن المعلم لديه أقل من 6 مدارس بالفعل Do While Len(Teachers(RandomIndex)) > 0 RandomIndex = Int((TotalTeachers * Rnd) + 1) Loop Teachers(RandomIndex) = Teachers(RandomIndex) & " - School " & i Next i ' طباعة النتائج For i = 1 To TotalTeachers Debug.Print Teachers(i) Next i End Sub انقر فوق الزر "تشغيل" Run أو اضغط على F5 لتشغيل البرنامج. هذا الكود يقوم بتوزيع المدارس بين 50 معلمًا بحيث يحصل كل معلم على 6 مدارس بشكل عشوائي. يمكنك ضبط عدد المعلمين وعدد المدارس حسب احتياجاتك.
  23. للحصول على نفس الوظيفة التي يقدمها الدالة UNIQUE في إصدارات أقدم من Office، يمكنك استخدام صيغة مصفوفة مجمعة مع دالة INDEX وMATCH. يمكنك استخدام الصيغة التالية كبديل للدالة UNIQUE: =IFERROR(INDEX($A$1:$A$10, MATCH(0, COUNTIF($B$1:B1, $A$1:$A$10) + IF($A$1:$A$10="", 1, 0), 0)), "") ``` في هذا المثال، يجب تغيير `$A$1:$A$10` إلى نطاق البيانات الخاص بك. ويجب وضع هذه الصيغة في الخلية B1، ثم سحبها لأسفل للحصول على القيم الفريدة من النطاق الأصلي في الخلية A1:A10.
  24. تعديل Sub KeepFirstWordOnly() Dim cell As Range Dim words() As String Dim i As Integer For Each cell In Range("A1:A10") ' تغيير النطاق حسب الحاجة words = Split(cell.Value, " ") If UBound(words) >= 0 Then ' التحقق من أن المصفوفة غير فارغة cell.Value = words(0) Else cell.Value = "" End If Next cell End Sub
×
×
  • اضف...

Important Information