PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : شناسایی آخرین ردیف اطلاعات



amator
2010/07/21, 17:45
سلام
یک سوال دارم
جداولی داریم که مثلا در شیت1 قرار دارند و در شیت 2 یک فرم طراحی کرده ایم که کاربر ما اطلاعات خواسته شده را بدون اشتباه(توسط محدودیت هایی که ایجاد کرده ایم) وارد نماید. و یک کلید ذخیره قرار داده ایم که با زدن آن یک ماکرو فعال شده و این سطر اطلاعات را کات کرده و میبرد در شیت 1 ذخیره میکند. حال سوال اینجاست که این ماکرو را چگونه باید تعریف کرد که این اطلاعات را ببرد و در آخرین ردیف قرار دهد؟
متشکرم

Almasi
2010/07/21, 18:00
با سلام
شما می تونید با دستور زیر به یک سطر پائین تر از آخرین رکورد درج شدخ رفته و نهایتاً اطلاعات را پیست نمائید .
([Range("h4:h65000").End(xlDown).Offset([1], [0

shamsololama
2010/07/22, 10:30
با درود فراوان
با تشکر و سپاس از آقای الماسی عزیز جهت راهنمایی خوبی که کرده اند

روش دیگری نیز در اینجا می نویسم که امید وارم مفید واقع شود

Sub Macro3()
For Each c In Sheet1.Range("a1:a60000")
If c = Empty Then
For i = 0 To 10
c.Offset(0, i) = Selection.Offset(0, i)
Next i
Exit Sub

در این ماکروزمانی که روی اولین رکورد از سطر مورد نظر قرار دارید و می خواهید آن را انقال بدهید به شیت دیگری (مثلا شیت 1) با اجرای ماکرو از سلی که روی آن قرار داریم تا ده سل روبر را به شیت یک انتقال میدهد که این ده سل می توان با تغییر i که همان مقدار 10 در ماکرو میباشد کنترل کنیم مثلا آن را به For i = 0 To 20 قرار دهیم تا بیست سل را انتقال دهد

و نحوه انتقال به شیت یک باز هم با تغییر sheet1 می توان هدف را تغییر داد و به شیت دلخواه ببریم
در این روش و در این ماکرو از سل A1 شروع کرده و به طرف سل A60000 بررسی می کند و به اولین سل خالی که رسید سطر مورد نظر را در آن منتقل می کند که اگر بین رکورد هاستون A سطر خالی نداشته باشیم بعد از آخرین سطر مطالب را می نویسد
ولی اگر دربین کوردهایمان در ستون A سل خالی داشته باشیم آن را یافته و سطر مورد نظر را در آن انتقال میدهد

توجه:
اگر بخواهیم سلهای خالی بین رکورد در ستون A را نادیده بگیریم و همیشه به آخرین سطر اضافه کنیم در کد بالا باید تغییراتی را اعمال کنیم.
اگر در توضیح و یا کد مشکلی بود درخدمتم

m_d6712
2010/07/27, 01:31
با درود فراوان
با تشکر و سپاس از آقای الماسی عزیز جهت راهنمایی خوبی که کرده اند

روش دیگری نیز در اینجا می نویسم که امید وارم مفید واقع شود

Sub Macro3()
For Each c In Sheet1.Range("a1:a60000")
If c = Empty Then
For i = 0 To 10
c.Offset(0, i) = Selection.Offset(0, i)
Next i
Exit Sub

در این ماکروزمانی که روی اولین رکورد از سطر مورد نظر قرار دارید و می خواهید آن را انقال بدهید به شیت دیگری (مثلا شیت 1) با اجرای ماکرو از سلی که روی آن قرار داریم تا ده سل روبر را به شیت یک انتقال میدهد که این ده سل می توان با تغییر i که همان مقدار 10 در ماکرو میباشد کنترل کنیم مثلا آن را به For i = 0 To 20 قرار دهیم تا بیست سل را انتقال دهد

و نحوه انتقال به شیت یک باز هم با تغییر sheet1 می توان هدف را تغییر داد و به شیت دلخواه ببریم
در این روش و در این ماکرو از سل A1 شروع کرده و به طرف سل A60000 بررسی می کند و به اولین سل خالی که رسید سطر مورد نظر را در آن منتقل می کند که اگر بین رکورد هاستون A سطر خالی نداشته باشیم بعد از آخرین سطر مطالب را می نویسد
ولی اگر دربین کوردهایمان در ستون A سل خالی داشته باشیم آن را یافته و سطر مورد نظر را در آن انتقال میدهد

توجه:
اگر بخواهیم سلهای خالی بین رکورد در ستون A را نادیده بگیریم و همیشه به آخرین سطر اضافه کنیم در کد بالا باید تغییراتی را اعمال کنیم.
اگر در توضیح و یا کد مشکلی بود درخدمتم


با تشکر از دوست عزیز!
این روش خوبی است! اما در تعداد سطر بالا مشکل ایجاد خواهد کرد. به نظر من اگر آخرین فیلد رو در متغیری مخفی یا سلولی مخفی نگه داری کنیم راحت تر می باشد و Cpu نیز کمتر اشغال می شود. شما تصور کنید که 10000 رکورد دارین! در این شرایط با ازای هر سطر که اضافه بشه 10000 بار تست خالی بودن فیلد می کنیم! اما اگر آخرین شماره آخرین سطر را ذخیره کنیم این مشکل بوجود نمی آید.

mrexcel
2010/07/30, 07:31
يك راهي هست كه من براي رفتن به آخرين رديف هميشه از ان استفاده ميكنم ان اين هست
range(a1).end(xldown().offset(1,0).select
البته ان قسمتي كه بايد اطلاعات كپي بشه و به صفحه ديگر برود نيز بايد اضافه بشه

4017
2011/03/12, 17:26
با درود فراوان
با تشکر و سپاس از آقای الماسی عزیز جهت راهنمایی خوبی که کرده اند

روش دیگری نیز در اینجا می نویسم که امید وارم مفید واقع شود

Sub Macro3()
For Each c In Sheet1.Range("a1:a60000")
If c = Empty Then
For i = 0 To 10
c.Offset(0, i) = Selection.Offset(0, i)
Next i
Exit Sub

در این ماکروزمانی که روی اولین رکورد از سطر مورد نظر قرار دارید و می خواهید آن را انقال بدهید به شیت دیگری (مثلا شیت 1) با اجرای ماکرو از سلی که روی آن قرار داریم تا ده سل روبر را به شیت یک انتقال میدهد که این ده سل می توان با تغییر i که همان مقدار 10 در ماکرو میباشد کنترل کنیم مثلا آن را به For i = 0 To 20 قرار دهیم تا بیست سل را انتقال دهد

و نحوه انتقال به شیت یک باز هم با تغییر sheet1 می توان هدف را تغییر داد و به شیت دلخواه ببریم
در این روش و در این ماکرو از سل A1 شروع کرده و به طرف سل A60000 بررسی می کند و به اولین سل خالی که رسید سطر مورد نظر را در آن منتقل می کند که اگر بین رکورد هاستون A سطر خالی نداشته باشیم بعد از آ---ین سطر مطالب را می نویسد
ولی اگر دربین کوردهایمان در ستون A سل خالی داشته باشیم آن را یافته و سطر مورد نظر را در آن انتقال میدهد

توجه:
اگر بخواهیم سلهای خالی بین رکورد در ستون A را نادیده بگیریم و همیشه به آ---ین سطر اضافه کنیم در کد بالا باید تغییراتی را اعمال کنیم.
اگر در توضیح و یا کد مشکلی بود درخدمتم


سلام
من اين كد رو عينا وارد كردم اما انجام نميشه
ارور for without next ميده
ميشه راهنمايي كنيد؟

shamsololama
2011/03/12, 17:43
با درود فراوان
با تشکر و سپاس از آقای الماسی عزیز جهت راهنمایی خوبی که کرده اند

روش دیگری نیز در اینجا می نویسم که امید وارم مفید واقع شود

Sub Macro3()
For Each c In Sheet1.Range("a1:a60000")
If c = Empty Then
For i = 0 To 10
c.Offset(0, i) = Selection.Offset(0, i)
Next i
Exit Sub

در این ماکروزمانی که روی اولین رکورد از سطر مورد نظر قرار دارید و می خواهید آن را انقال بدهید به شیت دیگری (مثلا شیت 1) با اجرای ماکرو از سلی که روی آن قرار داریم تا ده سل روبر را به شیت یک انتقال میدهد که این ده سل می توان با تغییر i که همان مقدار 10 در ماکرو میباشد کنترل کنیم مثلا آن را به For i = 0 To 20 قرار دهیم تا بیست سل را انتقال دهد

و نحوه انتقال به شیت یک باز هم با تغییر sheet1 می توان هدف را تغییر داد و به شیت دلخواه ببریم
در این روش و در این ماکرو از سل A1 شروع کرده و به طرف سل A60000 بررسی می کند و به اولین سل خالی که رسید سطر مورد نظر را در آن منتقل می کند که اگر بین رکورد هاستون A سطر خالی نداشته باشیم بعد از آ---ین سطر مطالب را می نویسد
ولی اگر دربین کوردهایمان در ستون A سل خالی داشته باشیم آن را یافته و سطر مورد نظر را در آن انتقال میدهد

توجه:
اگر بخواهیم سلهای خالی بین رکورد در ستون A را نادیده بگیریم و همیشه به آ---ین سطر اضافه کنیم در کد بالا باید تغییراتی را اعمال کنیم.
اگر در توضیح و یا کد مشکلی بود درخدمتم


سلام
من اين كد رو عينا وارد كردم اما انجام نميشه
ارور for without next ميده
ميشه راهنمايي كنيد؟


با دورد فراوان
اگر کد را دقیقا همون چیزی که نوشته را در اکسل کپی کرده باشی اجرا نخواهد شد
چون Next برای حلقه C و End if از قلم افتاده که اگر آن را بنویسید ماکر اجرا خواهد شد .
بهتر است که متغییر ها نیز تعریف کنیم چون اگر در بالا صفحه Option Explicit نوشته شده باشد تعریف متغییر ها اجباری خواهد بود وگرنه ارور می گیرد
کد به این صورت
Sub Macro3()
Dim c
Dim i
For Each c In Sheet1.Range("a1:a60000")
If c = Empty Then
For i = 0 To 10
c.Offset(0, i) = Selection.Offset(0, i)
Next i
Exit Sub
End If
Next
End Sub

4017
2011/03/12, 22:22
با سلام و تشكر فراوان از استاد
فقط يه سوال
دستور c.Offset(0, i باعث چه كاري ميشه؟ c اول چه كاريو انجام ميده؟

shamsololama
2011/03/13, 07:12
با سلام و تشكر فراوان از استاد
فقط يه سوال
دستور c.Offset(0, i باعث چه كاري ميشه؟ c اول چه كاريو انجام ميده؟


با درود فراوان
c متغییری است که انتخاب کرده ایم و می توان هر چیز دیگری که برای وی بی مفهوم خاصی نداشته باشد تعریف کرد مثلا می توان بجای c شما b یا T ... استفاده کنید
که در این کد
For each c in sheet1.range("A1:A1000")
c متغییری است که سل های A1 تا A1000 در آن قرار می گیرد
c.offset(0,1)
c هرکدام از سل ها که باشد 0یعنی سطر برابر بر همان سل و 1 یعنی یک ستون جلوتر در واقع با offset سلی دیگر را نسبت به مکان C به ما میدهد

4017
2011/03/13, 11:15
با سلام و تشكر فراوان از استاد محترم

~M*E*H*D*I~
2012/03/29, 22:46
با سلام خدمت دوستان
در مورد شناسایی آخرین ردیف در اکسل کد زیر هم مناسب هست

Sub FindLastCell()
Dim lRow As Long, lCol As Integer, mrow As Long, mCol As Integer, i As Integer
lCol = ActiveSheet.UsedRange.Columns.Count
mrow = 0
For i = 1 To lCol
lRow = Range(Cells(Rows.Count, i), Cells(Rows.Count, i)).End(xlUp).Row

If lRow > mrow Then
mrow = lRow
mCol = i
Else
End If
Next i

lastrow = mrow

End Sub

Javid Mokhtari
2012/04/01, 14:49
با سلام.
حالا که دوستان روش های مختلفی رو گذاشتن،من هم یه روش از طریق رشته ها رو به اشتراک میگذارم.شاید یکم پیچیده بیاد اما هدفم ارائه یک روش دیگه هستش(البته یه ایراد هم داره).
LastRow&Column (http://persiandrive.com/630876)

daghyad
2012/04/06, 01:01
سلام دو تا مطلب اینجا مطرح هست 1- پیدا کردن اخرین سطر 2- پیدا کردن اولین سطر خالی
1- پیدا کردن اخرین سطر
برای پیدا کردن اخرین سطر در یک ستون
r1 = Cells(Rows.Count, "e").End(xlUp).Row
این کد اخرین سطر را پیدا می کنه و اگر بین سطر ها چیزی خالی باشه کاری نداره
2- پیدا کردن اولین سطر خالی در ستون e
Range("e1").Select
If IsEmpty(ActiveCell) = False Then
ActiveCell.Offset(1, 0).Select

End Ifاینجا میگیم اول بیا سلول e1 را انتخب کن اگر e1 که الن سلول اکتیو خالی نبود برو یک سطر پایین تربه این ترتیب اواین سطر خالی پیدا می شه اولی خیلی برای موارد مختلف کاربرد داره و مخصوصا مواقعی که میخواهیم یک محدوده پویا تعریف کنیم با انسفاده از nameنه با فرمول نویسی و استفاده از تابع افست صرفا با کد نویسی مثلا
range("a1:e" & r1( یک محدو ده پویاست و اگر نامی برای ان انتخاب کنیم و اون نام را با vba تعریف کنیم در نمودار ها و لیست های پویا می تونیم ازش استفاده کنیم[hr]
Sub TTT()
Dim r1 As Integer, r2 As Integer
r1 = Sheet1.Cells(Rows.Count, "e").End(xlUp).Row
r2 = Sheet1.Cells(Rows.Count, "e").End(xlUp).Row
Sheet1.Range("a" & r1 & ":e" & r1).Copy
Sheet2.Range("a" & r2 & ":e" & r2).Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
این کد جواب شماست این کد اخرین سطر در محدوده تعریف شده را پیدا می کنه و در شیت 2 در اخرین سطر شیت دو پیست می کنه

mokaram
2012/08/04, 14:44
با سلام
این جواب برای مواقعی که ستون مشخصی مد نظر باشه جواب میده اما
اگه ستون مشخص نباشه به عبارتی محدود ای از ستونها به عنوان متغییر معرفی شده باشه اونوقت چطور میشه به آخــرین رکورد رفت؟

alisabet
2012/08/05, 08:55
با سلام
این جواب برای مواقعی که ستون مشخصی مد نظر باشه جواب میده اما
اگه ستون مشخص نباشه به عبارتی محدود ای از ستونها به عنوان متغییر معرفی شده باشه اونوقت چطور میشه به آخــرین رکورد رفت؟


اگه امكان داره فايل نمونه بذار تا معلوم بشه ميخواي چكار كني ؟

~M*E*H*D*I~
2012/08/05, 09:56
سلام
همون روشی که من بالا گفتم دقیقا همین کارو میکنه دیگه منظور شما چیزی غیر از اینه؟

mokaram
2012/08/05, 10:48
من یه فایل دارم که ازa1 تا z1 تو سر ستونها کد مشتریها قرار گرفته یعنی خونه اول هر ستون یه کد مشتری هست و زیر هر کد هم مبالغ واریزی هر مشتری ثبت شده یه فرم برامکه تو تکست باکس ۱ کد مشتری وتو تکست باکس ۲ مبلغ واریزی.
چه کدی میتونم بنویسم که با زدن کد مشتری و مبلغ واریزی بیاد کد را پیدا کنه و مبلغ واریزی را تو آخرین خونه اون ستون بیاره
ممنون

ACE
2015/10/11, 20:53
سلام من می خوام آخرین سلول ستون a رو انتخاب کنم و در b1 کپی کنه ...میشه راهنمایی نمایید

generalsamad
2015/10/11, 21:50
با سلام
این فرمول رو در سلول b1 وارد کنید


=lookup(2;1/(a:a<>"");a:a)




=lookup(2;1/(1-isblank(a:a));a:a)

generalsamad
2015/10/12, 15:30
با سلام
از این کد هم میتونید استفاده کنید
این کد مقدار آخرین مقدار در ستون a رو در سلول B1 همان شیت قرار میده


Private Sub CommandButton1_Click()
Dim LastRow As Long
With ActiveSheet
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
Range("b1") = Cells(LastRow, 1)
End Sub

ayubtanha
2016/03/22, 12:42
سلام دوستان ممنون میشم منو هم راهنمایی بفرمایید.من فرمی دارم که چند تکست باکس داره میخوام کاربر وقتی روی باتن ثبت کلیک کرد مثلا عدد تکست باکس یک در ردیف a2 در شیت2 ذخیره بشه و وقتی عدد جدید وارد کرد با زدن ثبت در سل a3 و همینطور به سل بعدی

iranweld
2016/03/22, 16:06
با سلام

فایل پیوست را بررسی بفرمایید


Private Sub CommandButton1_Click()

Z1 = Sheet2.Cells(Sheet2.Rows.Count, "A").End(xlUp).Row + 1
Z2 = Sheet2.Cells(Sheet2.Rows.Count, "B").End(xlUp).Row + 1

If Z1 = 1 Then Z1 = 2
If Z2 = 1 Then Z2 = 2

If Z1 > Z2 Then
Z = Z1
Else
Z = Z2
End If

Sheet2.Range("A" & Z) = TextBox1.Value
Sheet2.Range("B" & Z) = TextBox2.Value

TextBox1.Value = ""
TextBox2.Value = ""

End Sub