محسن دستگردی
محسن دستگردی

9 ماه پیش

حل شده

پاسخ

درگ کردن یا اتوفیل با 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 ردیف باشه و در دیتا بیس دیگری کمتر یا بیشتر
چطوری و با چه کدی این مشکل رو حل کنم هم در قسمت فیلتر کردن و هم در قسمت اتو فیل کردن من این مشکل رو دارم
ممنون میشم کامل توضیح بدین.

ویرایش شده توسط علی محمد یاوری (ادمین) در 9 ماه پیش

گزارش تخلف

سؤالات مربوط به VBA در اکسل

برو به

به پشتیبانی نیاز داری؟

در صورتی که

  • در کار با بتازون مشکلی دارید
  • در مورد خدمات بتازون سؤالی دارید
  • نظراتی را برای ارتقا و بهبود خدمات دارید

خوشحال میشیم که حتماً با ما در میان بزارید

محسن دستگردی
محسن دستگردی

9 ماه پیش

ببخشید کد ماکرو زیر منظورم هست
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

گزارش تخلف

سلام، برای اتوفیل داینامیک می توانید از این روش استفاده کنید:

Selection.AutoFill Destination:=Range(Cells(2, "O"), Cells(ROW_COUNT, "O"))

در این کد ROW_COUNT را به ردیف نهایی خود تبدیل کنید. (این برای ستون O) هست.

گزارش تخلف

محسن دستگردی
محسن دستگردی

9 ماه پیش

سلام ممنون از پاسخ شما. فردا در کدها جایگزین میکنم و نتیجه رو اینجا می نویسم.

یه سوال دیگه

در کد ماکرو زیر

هم مخوام بازه به صورت متغیر توسط اکسل بازه ها طبق دیتا بیس من باشه ، چه کدی جایگزین کنم تا این بازه ها متغیر بشه.

زیر کد خط کشیدم.

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 _

گزارش تخلف

سلام مجدد

فرقی نداره. کلا این کد برای محدوده داینامیک هست:

Range(Cells(FIRST_ROW, FIRST_COL), Cells(END_ROW, END_COL))

که FIRST_ROW و END_ROW شماره ردیف سلول اول و اخر محدوده و FIRST_COL و END_COL ستون سلول اول و آخر هستند.

دقت کنید برای ستون میشه هم شماره ستون را وارد کرد، هم حرف مربوط به ستون

گزارش تخلف

محسن دستگردی
محسن دستگردی

9 ماه پیش

با سلام تصویر پیوست فرستادم برای اتوفیل فرمول شمارو به جای محدوده قرار دادم اما باز خطای اجرا می داد ، ایراد کارم چیه؟ ممنون از پاسخ شما

فایل‌ها
فایل‌ها توسط کاربران بارگذاری شده و بتازون هیچ بررسی و مسئولیتی بر روی فایل‌ها ندارد.

گزارش تخلف

این توضیح زیر فرمول رو نخوندی :-)

در این کد ROW_COUNT را به ردیف نهایی خود تبدیل کنید.

یعنی مثلا ۱۰۰، ۱۲۰ یا هر شماره ردیفی که انتهای داده‌ها است.

شما باید متغیری قبل از این کد بزارید و شماره ردیف رو بدست بیارید و بزارید توش. بعدش متغیر رو بجای ROW_COUMT بزاری

گزارش تخلف

محسن دستگردی
محسن دستگردی

9 ماه پیش

چرا خوندم.
خب ردیف نهایی متغیر هست، ممکنه 100 بشه یا 1000 ، من چطوری این متغیر رو قبل از کد بزارم که شماره ردیف متغیر بدست بیاد؟ میشه یه فایل در حد همین عکسی که من گزاشتم بزارید برام که تعداد ردیفش متغیر باشه. این مشکل من همیشه توی فایل هام دارم.

گزارش تخلف

محسن دستگردی
محسن دستگردی

9 ماه پیش

با استفاده از هوش مصنوعی به پاسخ سوالم رسیدم.
باید با استفاده از کد زیر تعداد ردیف متغیرم مشخص می کردم بعد اجرا می کردم.

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

گزارش تخلف

پاسخ حل کننده

سلام

هوش مصنوعی لزوما جواب درست و کامل نمی دهد.

استفاده از تابع CountA اکسل در VBA برای بدست آوردن تعداد ردیف اطلاعات، غلط است. چون اگر در وسط اطلاعات سلول خالی باشد، شمارش نمی شود. توصیه من کد زیر است:

numRows = Cells(Rows.Count, 1).End(xlUp).Row

بجای عدد 1، شماره ستونی که مطمئن تر هستید که همیشه پر هست و نماد پر بودن ردیف هست بزارید.

این کد شماره ردیف آخرین سلول پًر ستون مدنظر رو بهتون میده.

ویرایش شده توسط علی محمد یاوری در 9 ماه پیش

گزارش تخلف

محسن دستگردی
محسن دستگردی

9 ماه پیش

ممنون جناب یاوری، مرسی همیشه یاور ماهستی. نظر و کد شما درست بود. در ویدئوهای دوره وی بی ای شما هم دیدم این کد رو. سپاس

گزارش تخلف

برو به

درباره ما

بتازون یک سایت نیست، یک خانواده است. یک محل برای همه ما، محلی که به هم کمک کنیم و با هم پیشرفت کنیم. این که الآن اینجایی اتفاقی نیست، خوشحالیم که بهمون ملحق شدی...