درخواست فرمول Vlookup یا چیزی شبیه به اون در محیط ویژوال بیسیک

Collapse
X
 
  • زمان
  • نمایش
حذف همه
new posts
  • Amin_D

    • 2010/12/22
    • 399

    درخواست فرمول Vlookup یا چیزی شبیه به اون در محیط ویژوال بیسیک

    با سلام
    من چند تا فایل اکسل دارم که تعداد رکوردهای اون زیاد هستن و میخوام یه یک سری اطلاعات رو از هر کدوم در یک فایل اکسل دیکه به صورت سطری بیارم
    الان این کا رو با فرمول های اکسل انجام میدم و مشکلی نیست ولی حجم فایل خیلی بالا میره و دردسرهای خاص خودشو داره.
    میخوام ببینم امکانش هست در فایلی که مد نظرم هست از فایل های دیگه با استفاده از کدهای ویژوال فراخوانی کنم
    با تشکر
    خواستن ، توانستن است.
  • امين اسماعيلي
    مدير تالار ويژوال بيسيك

    • 2013/01/17
    • 1198
    • 84.00

    #2
    با درود
    خوب این کار که شدنی است . قبلا هم نمونش فک کنم انجام شده. که میخواستیم که اطلاعات فایل ها مختلف رو بیاریم توی یه فایل. حالا تفاوت اینجاست که ببینیم از هر فایل چه چیزای رو بر اساس چه قانونی باید بیاریم.
    در پناه خداوندگار ایران زمین باشید و پیروز

    کامنت

    • Amin_D

      • 2010/12/22
      • 399

      #3
      من میخواستم نمونه فرمول Vlookup نوشتن رو تو محیط VB بدونم چطوریه؟
      فرضا دو تا فایل اکسل دارم با یک آیتم ثابت چطوری میتونم بقیه اطلاعات رو فراخوانی کنم؟(برا هر کدوم از فایل ها)
      با تشکر
      خواستن ، توانستن است.

      کامنت

      • Amin_D

        • 2010/12/22
        • 399

        #4
        با سلام

        بر دوستان گرامی من اون مطلبی که دنبالش بودم رو با کمک استاد بزرگوار شمس العما بدست آوردم .در تاپیکی دیگه
        مطالب و موضوعات مطرح شده درباره امكانات ويژوال بيسيك در اكسل را در اين قسمت مطرح ميگردد.

        دوستان ارجمند نحوه آدرس دهی رو توضیح دادن

        من میخواستم در فایل ضمیمه "Vlookup With VB(2)"
        بجای اینکه از شیت دیگه همون فایل اطلاعات رو بخونه ، بره و از فایل 2 اطلاعات رو بخونه.
        با تشکر
        فایل های پیوست شده
        Last edited by Amin_D; 2013/11/29, 12:12. دلیل: فایل ضمبمه
        خواستن ، توانستن است.

        کامنت

        • Amir Ghasemiyan

          • 2013/09/20
          • 4504
          • 100.00

          #5
          نوشته اصلی توسط dadvar
          با سلام

          بر دوستان گرامی من اون مطلبی که دنبالش بودم رو با کمک استاد بزرگوار شمس العما بدست آوردم .در تاپیکی دیگه
          مطالب و موضوعات مطرح شده درباره امكانات ويژوال بيسيك در اكسل را در اين قسمت مطرح ميگردد.

          دوستان ارجمند نحوه آدرس دهی رو توضیح دادن

          من میخواستم در فایل ضمیمه "Vlookup With VB(2)"
          بجای اینکه از شیت دیگه همون فایل اطلاعات رو بخونه ، بره و از فایل 2 اطلاعات رو بخونه.
          با تشکر

          سلام. همونطور كه خدمتتون عرض كرده بودم شما بايد قبل از حلقه صفحه رو عوض كنيد. با اين دستور:
          کد:
          Windows("book2.xlsx").Activate

          کامنت

          • Amin_D

            • 2010/12/22
            • 399

            #6
            نوشته اصلی توسط amir ghasemiyan

            سلام. همونطور كه خدمتتون عرض كرده بودم شما بايد قبل از حلقه صفحه رو عوض كنيد. با اين دستور:
            کد:
            Windows("book2.xlsx").Activate
            بعد از این خط ، اونوقت باید آدرس فایل رو بهش بدم؟
            میشه لطف کنید و دستور کامل رو بنویسید؟
            با تشکر
            خواستن ، توانستن است.

            کامنت

            • Amir Ghasemiyan

              • 2013/09/20
              • 4504
              • 100.00

              #7
              نوشته اصلی توسط dadvar
              بعد از این خط ، اونوقت باید آدرس فایل رو بهش بدم؟
              میشه لطف کنید و دستور کامل رو بنویسید؟
              با تشکر

              اگه فايل هاتون باز هست اين كد رو استفاده كنيد

              کد:
              Private Sub CommandButton1_Click()
              Dim f As Range
              Dim c As Range
              Dim n
              Windows("book1.xlsx").Activate
              For Each f In Sheet1.Range("a1:a5")
                  If f.Value <> "" Then
                  
                  Windows("Vlookup With VB(2).xlsm").Activate
                      For Each c In Sheet6.Range("a1:a5")
                     
                          If f.Value = c.Value Then
                          n = Application.WorksheetFunction.CountA(Sheet1.Range("B1:B5"))
                              Sheet1.Range("B1").Offset(n, 0).Value = c.Offset(0, 1).Value
                              Sheet1.Range("B1").Offset(n, 1).Value = c.Offset(0, 2).Value
                              Sheet1.Range("B1").Offset(n, 2).Value = c.Offset(0, 3).Value
                              Sheet1.Range("B1").Offset(n, 3).Value = c.Offset(0, 4).Value
                              Sheet1.Range("B1").Offset(n, 4).Value = c.Offset(0, 5).Value
                              
                          Exit For
                          End If
                      Next c
                  End If
              Next f
              MsgBox "END"
              End Sub
              اگر باز نيست اين خط رو هم اضافه كنيد

              کد:
              Workbooks.Open Filename:="flie location and file name.xlsx"

              کامنت

              • Amin_D

                • 2010/12/22
                • 399

                #8
                نوشته اصلی توسط amir ghasemiyan

                اگه فايل هاتون باز هست اين كد رو استفاده كنيد

                کد:
                Private Sub CommandButton1_Click()
                Dim f As Range
                Dim c As Range
                Dim n
                Windows("book1.xlsx").Activate
                For Each f In Sheet1.Range("a1:a5")
                    If f.Value <> "" Then
                    
                    Windows("Vlookup With VB(2).xlsm").Activate
                        For Each c In Sheet6.Range("a1:a5")
                       
                            If f.Value = c.Value Then
                            n = Application.WorksheetFunction.CountA(Sheet1.Range("B1:B5"))
                                Sheet1.Range("B1").Offset(n, 0).Value = c.Offset(0, 1).Value
                                Sheet1.Range("B1").Offset(n, 1).Value = c.Offset(0, 2).Value
                                Sheet1.Range("B1").Offset(n, 2).Value = c.Offset(0, 3).Value
                                Sheet1.Range("B1").Offset(n, 3).Value = c.Offset(0, 4).Value
                                Sheet1.Range("B1").Offset(n, 4).Value = c.Offset(0, 5).Value
                                
                            Exit For
                            End If
                        Next c
                    End If
                Next f
                MsgBox "END"
                End Sub
                اگر باز نيست اين خط رو هم اضافه كنيد

                کد:
                Workbooks.Open Filename:="flie location and file name.xlsx"


                کد خط :
                Windows("book1.xlsx").Activate
                چیکار میکنه؟!
                من بجاش



                Private Sub CommandButton1_Click()
                Dim f As Range
                Dim c As Range
                Dim n
                Windows("Vlookup With VB(1).xlsm").Activate
                For Each f In Sheet1.Range("a1:a5")
                If f.Value <> "" Then

                Windows("Vlookup With VB(1).xlsm").Activate
                For Each c In Sheet6.Range("a1:a5")

                If f.Value = c.Value Then
                n = Application.WorksheetFunction.CountA(Sheet1.Range( "B1:B5"))
                Sheet1.Range("B1").Offset(n, 0).Value = c.Offset(0, 1).Value
                Sheet1.Range("B1").Offset(n, 1).Value = c.Offset(0, 2).Value
                Sheet1.Range("B1").Offset(n, 2).Value = c.Offset(0, 3).Value
                Sheet1.Range("B1").Offset(n, 3).Value = c.Offset(0, 4).Value
                Sheet1.Range("B1").Offset(n, 4).Value = c.Offset(0, 5).Value

                Exit For
                End If
                Next c
                End If
                Next f
                MsgBox "END"
                End Sub

                رو کد رو گذلشتم ولی باز هم جواب نداد!
                خواستن ، توانستن است.

                کامنت

                • Amir Ghasemiyan

                  • 2013/09/20
                  • 4504
                  • 100.00

                  #9
                  نوشته اصلی توسط dadvar
                  کد خط :
                  Windows("book1.xlsx").Activate
                  چیکار میکنه؟!
                  من بجاش



                  Private Sub CommandButton1_Click()
                  Dim f As Range
                  Dim c As Range
                  Dim n
                  Windows("Vlookup With VB(1).xlsm").Activate
                  For Each f In Sheet1.Range("a1:a5")
                  If f.Value <> "" Then

                  Windows("Vlookup With VB(1).xlsm").Activate
                  For Each c In Sheet6.Range("a1:a5")

                  If f.Value = c.Value Then
                  n = Application.WorksheetFunction.CountA(Sheet1.Range( "B1:B5"))
                  Sheet1.Range("B1").Offset(n, 0).Value = c.Offset(0, 1).Value
                  Sheet1.Range("B1").Offset(n, 1).Value = c.Offset(0, 2).Value
                  Sheet1.Range("B1").Offset(n, 2).Value = c.Offset(0, 3).Value
                  Sheet1.Range("B1").Offset(n, 3).Value = c.Offset(0, 4).Value
                  Sheet1.Range("B1").Offset(n, 4).Value = c.Offset(0, 5).Value

                  Exit For
                  End If
                  Next c
                  End If
                  Next f
                  MsgBox "END"
                  End Sub

                  رو کد رو گذلشتم ولی باز هم جواب نداد!

                  شما مگه نميخواين بره از book1 اطلاعات برداره بياره تو Vlookup With VB ؟
                  يكي از اون خط ها كه قرمز كردم بايد book1 باشه و يكي Vlookup With VB

                  اون خط كارش اينه كه فايل book1 رو انتخاب ميكنه.(فايل بايد باز باشه)

                  کامنت

                  • Amin_D

                    • 2010/12/22
                    • 399

                    #10
                    خودتون تست کردین؟
                    جواب داد؟
                    من همین کدهایی که شما زحمتشو کشیدین رو برای باتوم میزام چند لحظه بعد مسیج باکس توی فایل Book 1 میده و هیچ آیتمی رکوردی رو جستجو نمیکنه
                    خواستن ، توانستن است.

                    کامنت

                    • امين اسماعيلي
                      مدير تالار ويژوال بيسيك

                      • 2013/01/17
                      • 1198
                      • 84.00

                      #11
                      با درود

                      یه فایل Zip میزارم چون قول دادم. از این بهره بگیرین . دو تا فایل هستش. این دو فایل رو کنار هم بزارین. یا اگر کنار هم نذاشتین تو کد ها ادرس دهی رو درست کنید. فایل Advance رو باز کنید. تو ستون A از A2 تا هر چی که میدونین مثلا 1 یا 2 یا 3 یا ..... بزارین چون نام ها تو فایل sample اینجوری نوشته شده ( فقط به عنوان نمونه و تمرین). سپس دکمه رو Run کنین

                      اینم در واقع سرچ با vlookup از یه فایل دیگه هستش.
                      نکته : اگر دقت کنین تو دو تا فایل ستون ها پشت سر هم هستند و روال هر دو یکی هستش و یه مقدار کار رو آسون کرده و با یه حلقه For تو در تو مشکل حل شده . اما اگر ریتمی نباشه یه مقدار فرمول نویسی خطوطش زیاد تر میشه و در واقع یه حلقه For که داخلی هستش (i ) حذف شده و از عدد هایی که مانیازشون داریم به دفعات استفاده میکنیم
                      فایل های پیوست شده
                      در پناه خداوندگار ایران زمین باشید و پیروز

                      کامنت

                      چند لحظه..