محسن دستگردی
1 سال پیش
حل شده
پاسخ
درگ کردن یا اتوفیل با vba
با سلام
چگونه برای درگ کردن یک سلول در ستون متغیر(اتوفیل متغیر) در ماکرو ایجاد بکنیم
شرح سوال اینه :
در کدماکرو زیر
Range("F4:F5").Select
Sheets("nezarat").Select
Columns("A:P").Select
Selection.Copy
Sheets("output1").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Columns("F:I").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Rows("1:1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$P$1817").AutoFilter Field:=11, Criteria1:="2"
ActiveSheet.Range("$A$1:$P$1817").AutoFilter Field:=7, Criteria1:= _
"=گروه چهارم"
ActiveWorkbook.Worksheets("output1").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("output1").AutoFilter.Sort.SortFields.Add Key:= _
Range("I1:I1817"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("output2").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Range("I4").Select
Sheets("NEZARATT").Select
Range("F4:F5").Select
Sheets("nezarat").Select
Range("B5").Select
در کدهای فوق که بولد کردم و زیر آن خط کشیدم بازه های من متغیر است ممکن است در دیتا بیسی 100000 ردیف باشه و در دیتا بیس دیگری کمتر یا بیشتر
چطوری و با چه کدی این مشکل رو حل کنم هم در قسمت فیلتر کردن و هم در قسمت اتو فیل کردن من این مشکل رو دارم
ممنون میشم کامل توضیح بدین.
ویرایش شده توسط علی محمد یاوری (ادمین) در 1 سال پیش
گزارش تخلف
سؤالات مربوط به VBA در اکسل
برو به
به پشتیبانی نیاز داری؟
در صورتی که
- در کار با بتازون مشکلی دارید
- در مورد خدمات بتازون سؤالی دارید
- نظراتی را برای ارتقا و بهبود خدمات دارید
خوشحال میشیم که حتماً با ما در میان بزارید
محسن دستگردی
1 سال پیش
ببخشید کد ماکرو زیر منظورم هست
Sheets("list").Select
Rows("1:1").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$AC$7382").AutoFilter Field:=5, Criteria1:="="
ActiveSheet.Range("$A$1:$AC$7382").AutoFilter Field:=15, Criteria1:="اصلي"
ActiveWorkbook.Worksheets("list").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("list").AutoFilter.Sort.SortFields.Add Key:=Range( _
"J1:J7382"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("list").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("bazresi").Select
Rows("1:1").Select
Selection.AutoFilter
ActiveWorkbook.Worksheets("bazresi").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("bazresi").AutoFilter.Sort.SortFields.Add Key:= _
Range("E1"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("bazresi").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Selection.AutoFilter
Columns("C:C").Select
Selection.AutoFilter
Range("C1:C17194").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
Columns("A:K").Select
Selection.Copy
Sheets("nezarat").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("L2").Select
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("L2:L60000")
Range("L2:L60000").Select
Range("M2").Select
Selection.AutoFill Destination:=Range("M2:M60000")
Range("M2:M60000").Select
Range("N2").Select
Selection.AutoFill Destination:=Range("N2:N60000")
Range("N2:N60000").Select
Range("O2").Select
Selection.AutoFill Destination:=Range("O2:O60000")
Range("O2:O60000").Select
Range("P2").Select
Selection.AutoFill Destination:=Range("P2:P60000")
Range("P2:P60000").Select
Sheets("NEZARATT").Select
Range("F2:F3").Select
گزارش تخلف
علی محمد یاوری
1 سال پیش
سلام، برای اتوفیل داینامیک می توانید از این روش استفاده کنید:
Selection.AutoFill Destination:=Range(Cells(2, "O"), Cells(ROW_COUNT, "O"))
در این کد ROW_COUNT را به ردیف نهایی خود تبدیل کنید. (این برای ستون O) هست.
گزارش تخلف
محسن دستگردی
1 سال پیش
سلام ممنون از پاسخ شما. فردا در کدها جایگزین میکنم و نتیجه رو اینجا می نویسم.
یه سوال دیگه
در کد ماکرو زیر
هم مخوام بازه به صورت متغیر توسط اکسل بازه ها طبق دیتا بیس من باشه ، چه کدی جایگزین کنم تا این بازه ها متغیر بشه.
زیر کد خط کشیدم.
Selection.AutoFilter
ActiveSheet.Range("$A$1:$P$1817").AutoFilter Field:=11, Criteria1:="2"
ActiveSheet.Range("$A$1:$P$1817").AutoFilter Field:=7, Criteria1:= _
"=گروه چهارم"
ActiveWorkbook.Worksheets("output1").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("output1").AutoFilter.Sort.SortFields.Add Key:= _
Range("I1:I1817"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption _
گزارش تخلف
علی محمد یاوری
1 سال پیش
سلام مجدد
فرقی نداره. کلا این کد برای محدوده داینامیک هست:
Range(Cells(FIRST_ROW, FIRST_COL), Cells(END_ROW, END_COL))
که FIRST_ROW و END_ROW شماره ردیف سلول اول و اخر محدوده و FIRST_COL و END_COL ستون سلول اول و آخر هستند.
دقت کنید برای ستون میشه هم شماره ستون را وارد کرد، هم حرف مربوط به ستون
گزارش تخلف
محسن دستگردی
1 سال پیش
با سلام تصویر پیوست فرستادم برای اتوفیل فرمول شمارو به جای محدوده قرار دادم اما باز خطای اجرا می داد ، ایراد کارم چیه؟ ممنون از پاسخ شما
فایلها
گزارش تخلف
علی محمد یاوری
1 سال پیش
این توضیح زیر فرمول رو نخوندی :-)
در این کد ROW_COUNT را به ردیف نهایی خود تبدیل کنید.
یعنی مثلا ۱۰۰، ۱۲۰ یا هر شماره ردیفی که انتهای دادهها است.
شما باید متغیری قبل از این کد بزارید و شماره ردیف رو بدست بیارید و بزارید توش. بعدش متغیر رو بجای ROW_COUMT بزاری
گزارش تخلف
محسن دستگردی
1 سال پیش
چرا خوندم.
خب ردیف نهایی متغیر هست، ممکنه 100 بشه یا 1000 ، من چطوری این متغیر رو قبل از کد بزارم که شماره ردیف متغیر بدست بیاد؟ میشه یه فایل در حد همین عکسی که من گزاشتم بزارید برام که تعداد ردیفش متغیر باشه. این مشکل من همیشه توی فایل هام دارم.
گزارش تخلف
محسن دستگردی
1 سال پیش
با استفاده از هوش مصنوعی به پاسخ سوالم رسیدم.
باید با استفاده از کد زیر تعداد ردیف متغیرم مشخص می کردم بعد اجرا می کردم.
Dim myVariable As Variant ' تعريف متغير
Dim numRows As Long ' متغير براي نگهداري تعداد رديفها
myVariable = ("=A1*2") ' اختصاص مقدار به متغير با ضرب مقدار سلول A1 در 2
numRows = Application.WorksheetFunction.CountA(Range("A:A")) ' محاسبه تعداد رديفهاي غير خالي در ستون A
Range("B1").Value = myVariable ' استفاده از متغير براي تنظيم مقدار سلول B1
Range("B1").AutoFill Destination:=Range("B1:B" & numRows) ' اتوفيل محدوده B1 تا آخرين رديف تعيين شده توسط numRows
Range("B1:B" & numRows).Select ' انتخاب محدوده پر شده از B1 تا آخرين رديف تعيين شده توسط numRows
گزارش تخلف
علی محمد یاوری
1 سال پیش
پاسخ حل کننده
سلام
هوش مصنوعی لزوما جواب درست و کامل نمی دهد.
استفاده از تابع CountA اکسل در VBA برای بدست آوردن تعداد ردیف اطلاعات، غلط است. چون اگر در وسط اطلاعات سلول خالی باشد، شمارش نمی شود. توصیه من کد زیر است:
numRows = Cells(Rows.Count, 1).End(xlUp).Row
بجای عدد 1، شماره ستونی که مطمئن تر هستید که همیشه پر هست و نماد پر بودن ردیف هست بزارید.
این کد شماره ردیف آخرین سلول پًر ستون مدنظر رو بهتون میده.
ویرایش شده توسط علی محمد یاوری در 1 سال پیش
گزارش تخلف
محسن دستگردی
1 سال پیش
ممنون جناب یاوری، مرسی همیشه یاور ماهستی. نظر و کد شما درست بود. در ویدئوهای دوره وی بی ای شما هم دیدم این کد رو. سپاس
گزارش تخلف