Cut ,copy,paste سه دستور پر کاربرد در کدنویسی VBA
سلام . به سافت پلاس و یکی دیگر از مطالب مربوط به آموزش برنامه نویسی VBA در اکسل خوش آمدید .
copy- cut- paste اینها 3 تا از کارهایی است که معمولا در شروع یادگیری هر نرم افزاری کاربرد آنها را یاد می گیرید و همراه همیشگی شما در تمام مدت زمانی است که شما از آن نرم افزار خاص استفاده می کنید.
موضوع آموزش ما در زمینه برنامه نویسی VBA است .
به نظر شما برای اینکه بتوانید یک سری از اطلاعات را کپی کنید یا آنها را cut و در جایی دیگر paste کنید نیاز به چه کدهایی دارید و چطور می توانید این کارها را به کمک کدهای وی بی ای انجام بدهید ؟
اصلا چند تا روش برای این کار وجود دارد ؟
چطور می شود اطلاعات را کپی کرد بدون اینکه فرمت آنها را در نظر گرفت ؟
اگر بخواهید اطلاعات خودتان را در جایی جایگذاری کنید و فرمت اصلی آنها را هم حفظ کنید چه کار باید بکنید ؟
خب اگر دوست دارید پاسخ به این سوالات را پیدا کنید کافی است با من در طول این آموزش همراه باشید تا پاسخ همه این سوالات و البته در کنار آن کلی سوال دیگر را با هم ببرسی کنیم .
فهرست محتوا
چه جوری و به کمک چه کدهایی اطلاعات را کپی کنیم ؟
اول به سراغ کار کپی اطلاعات خودمان در اکسل می رویم .
اولین قدم برای کپی کردن اطلاعات این است که دقیقا به اکسل بگویید که اطلاعات مورد نظر شما در کدام سلول یا سلول ها قرار دارند .
بیایید برای شروع هر اطلاعاتی را که در داخل سلول A1 قرار دارد را مد نظر قرار بدهیم .
پس در قدم اول باید آدرس این سلول را به برنامه معرفی کنید .
Range("A1")
در کد بالا اکسل متوجه می شود که شما می خواهید روی اطلاعات موجود در سلول A1 اقدامی انجام بدهید .اما چه اقدامی ؟
بیایید کد خودتان را تکمیل تر کنید .
Sub Copy_paste()
Range("A1").Copy
End Sub
به همین راحتی ما توانستیم محتویات سلول مورد نظر خود را که در اینجا A1 است را کپی کنیم.
خوب حالا محتویات این سلول را کپی کردیم . در ادامه می خواهیم چکار کنیم ؟
می خواهیم این اطلاعات را در یک سلول دیگر Paste کنیم .
برای این کار باید چکار کنیم ؟
کافی است در ادامه کد خود یک فاصله ایجاد کنیم .
بعد از این کار اکسل یک کادر پیغام کوچک را برای شما نمایش می دهد .
ابن کادر به زبان بی زبانی به ما می گوید سلول هدف را برایش مشخص کنیم .
پس این کار را انجام می دهیم .
Sub Copy_paste()
Range("A1").Copy Range("f1")
End Sub
سلول f1 همان سلول هدفی است که ما می خواهیم اطلاعاتی را که کپی کردیم را در آن قرار دهیم .
می بینید به راحتی و تنها با استفاده از یک نیم خط می توانیم اطلاعات یک سلول را کپی و در جای دیگری آن را Paste کنیم .
حالا در این بین شکل و روش انجام این کار و نحوه کدنویسی ممکن است تفاوت هایی داشته باشد .
مثلا به کدهای زیر نگاه کنید .
Range("A1").Copy Destination:=Range("f1")
و یا اینکه به کدهای زیر را نگاه کنید .
Range("A1").Copy
Range("f1").Select
Activecell.Paste
در همه این کدها صورت کار و نحوه نگارش کدها تفاوت می کند اما نتیجه و خروجی همه این کدها یک چیز است .
این کاملا بستگی به سلیقه شما بعنوان یک برنامه نویس دارد که از کدام روش استفاده کنید .
فقط در مورد کدهای قسمت سوم ما مراحل کار را بصورت تفکیک شده داریم .
یعنی در خط اول ما اطلاعات سلول مبدا را کپی می کنیم .
در خط دوم سلول مقصد را تعیین می کنیم .
در خط سوم هم با استفاده از متد Paste اطلاعات خود را در سلول مقصد جایگذاری می کنیم .
تا به اینجا ما در خصوص کپی کردن اطلاعات از یک سلول به سلول دیگر صحبت کردیم .
در اینجا هم سلول مبدا و هم سلول مقصد ما در یک شیت کاری وجود دارند .
اما در نظر بگیرید که می خواهیم اطلاعات موجود در یک سلول را از یک شیت کاری به سلول دیگری که در شیت کاری دیگر وجود دارد منتقل کنیم .
در این صورت چه باید بکنیم ؟
کپی کردن اطلاعات بین شیت ها توسط کدهای وی بی ای
برای شروع کار فرض کنید می خواهیم اطلاعات موجود در شیت ۱ را به سلول F3 موجود در شیت ۳ منتقل کنیم .
برای این کار از کدهای زیر استفاده می کنیم .
Worksheets("Sheet1").Range("A1").Copy
در اینجا ما اطلاعات خود را در سلول A1 کپی کردیم .
این کدها تقریبا شبیه کدهای حالتی است که سلول های مبدا و مقصد در یک شیت هستند .
تنها تفاوت در اینجا مربوط به آدرس شیت کاری است که در ابتدای این کدها قرار داده ایم .
در واقع در اینجا به برنامه گفته ایم که سلول A1 مورد نظر ما از بین شیت های کاری در شیتی تحت عنوان “sheet 1 ” قرار دارد .
حالا باید به سراغ سلول هدف خود رفته و ان را به برنامه معرفی کنیم .
مشابه معرفی سلول های مبدا سلول مقصد را نیز معرفی می کنیم .
Worksheets("Sheet3").Range("F3")
اکنون باید این دو خط کد را با هم ترکیب کنیم .
Worksheets("Sheet1").Range("A1").Copy Destination:=Worksheets("Sheet3").Range("F3")
پس در اینجا هم توانستیم اطلاعات خود را از یک سلول در شیت کاری به سلول دیگری در شیت کاری دیگر کپی کنیم .
درست است که سلول های مبدا و مقصد ما در دو شیت مختلف هستند اما در عین حال این دو شیت هر دو در یک ورک بوک قرار دارند .
اما اگر بخواهیم اطلاعات را بین شیت هایی رد و بدل کنیم که شیتها در دو فایل اکسل مجزا یا در اصطلاح دو Workbook دیگر قرار داشته باشند چه باید کرد .
همین قضیه در خصوص ورک بوک های متفاوت نیز صدق می کند .
یعنی مراحل کد نویسی مشابه حالتی است که بین دو شیت می خواهیم کار کنیم .
به عنوان مثال به کدهای زیر نگاه کنید .
Workbooks("softpluse.xlsx").Worksheets("Sheet1").Range("A1").Copy
در این کدها ما اول نام فایل مورد نظر خود را از بین فایلهای موجود خود را به همراه فرمت آن به برنامه معرفی می کنیم .
در ادامه هم سلول مورد نظر خود را در بین شیتهای موجود به برنامه معرفی کرده ایم .
حالا باید به سراغ معرفی سلول هدف خود برویم .
Workbooks("Book 2.xlsx").Activate
ما در اینجا با استفاده از متد Activate فایل اکسل مورد نظر خود را فعال می کنیم .
در قدم بعد سلول مورد نظر را خود را به برنامه معرفی می کنیم .
ActiveWorkbook.Worksheets("Sheet 2").Select
در این کدها به برنامه می گوییم از فایل اکسلی که در حال حاضر فعال شده است به سراغ شیتی تحت عنوان sheet2 رفته و آن را انتخاب کند .
در قدم آخر هم می رویم به سراغ کار اصلی خود که همان کپی کردن اطلاعات است .
ActiveSheet.Paste
در اینجا مجموعه کدهای خود را در کنار هم قرار می دهیم تا تشکیل یک روال را بدهد .
SubCopy_Example()
Workbooks("softpluse.xlsx").Worksheets("Sheet1").Range("A1").Copy
Workbooks("Book 2.xlsx").Activate
ActiveWorkbook.Worksheets("Sheet 2").Select
ActiveSheet.Paste
End Sub
تا به اینجا ما هر چه صحبت کردیم در خصوص کپی کردن یک سلول و انتقال آن به سلول دیگر می باشد .
حالا خواه این سلول ها در یک شیت کاری باشند یا در دو شیت مجزا و یا اینکه بطور کل در دو فایل جدا از هم باشند .
اما اگر بخواهیم یک محدوده از اطلاعات را از یک منبع کپی کرده و آن را در مقصد کپی کنیم چه باید کرد ؟
برای این منظور از کدهایی شبیه زیر استفاده می کنیم .
Worksheets("Sheet1").Range("A1:D4").Copy _
destination:=Worksheets("Sheet2").Range("E5")
همانطور که می بینید روش کار کاملا شبیه حالت های قبلی است که بررسی کردیم .
تنها تفاوت در نحوه آدرس دهی می باشد که در اینجا به جای آدرس یک سلول آدرس محدوده ای از سلول ها را به برنامه معرفی کرده ایم .
بررسی چند متد دیگر در کپی کردن اطلاعات
اصول کار با عملیات های copy و paste و Delete با استفاده از کدهای وی بی ای همان چیز چیزی است که تا به اینجا به هم مرور کردیم.
در ادامه می خواهیم چند کد دیگر را نیز با هم بررسی کنیم .
بعنوان مثال به کدهای زیر نگاه کنید .
Sub Copy_Example1()
Selection.Copy Destination:=Range("B3")
End Sub
این کدها از برنامه می خواهد هر محدوده ای را که ما انتخاب می کنیم را کپی کرده و آنها را در مقصدی که برایش تعریف کرده ایم جایگذاری کند .
یا در حالتی دیگر کدهای زیر را در نظر بگیرید .
Sub Copy_Example1()
ActiveCell.Copy Destination:=Range ("B3")
End Sub
این کدها به برنامه می گوید که هر سلولی را که در حال حاضر بصورت فعال است را کپی کند .
و یا اگر بخواهیم کل محدوده ای که حاوی اطلاعات است را کپی کنیم می توانیم از کدهای زیر استفاده کنیم .
Sub Coppy()
Worksheets("Sheet1").UsedRange.Copy &_
Destination:=Worksheets("Sheet2").Range("A1")
End Sub
در ادامه با هم برویم و چند تا موقعیت خاص را با هم بررسی کنیم .
کپی کردن سلول های حاوی فرمول
فرض کنید یک سلولی داریم که در داخل آن یک مقدار عددی وجود دارد . اما این مقدار عددی با استفاده از یک فرمول محاسبه شده است .
مثلا فرض کنید که در سلول A6 این فرمول نوشته شده است .
=sum (A1:A5)
حالا فرض کنید که داخل سلول مربوطه عدد 50 نمایش داده می شود . حالا با استفاده از کد نویسی می خواهیم از همین سلول یک کپی بگیریم و آن را در داخل سلول B6 قرار بدهیم .
این کار را به کمک کدهای زیر انجام می دهیم .
sub summing()
range("A5").copy Range("B6")
end sub
خودتان این کدها را امتحان کنید می بینید که خروجی کار چیزی نیست که انتظار دارید .
چرا چون قاعدتا در سلول هدف هم باید عدد 50 نمایش داده شود اما می بینید که عدد صفر نمایش داده می شود . اما چرا ؟
برای حل مشکل چه کار باید کرد ؟
اول برویم به سراغ علت این کار و بعد به سراغ راه حل آن .
علت این موضوع این است که وقتی اکسل در یک سلول عددی را پیدا می کند که آن عدد حاصل یک فرمول می باشد به آن مقدار عددی کاری ندارد و برای کپی کردن اطلعات ان سلول به سراغ فرمولی می رود که این عدد را ایجاد کرده است .
اما اگر شما نه خود فرمول که عدد نهایی را می خواهید کپی کنید راهکارش را در ادامه برایتان توضیح می دهم .
استفاده از دستور PasteSpacial
در برنامه نویسی VBA وقتی که یک سلول یا محدوده ای از سلول ها را با استفاده از کد نویسی کپی می کنیم برای Paste کردن این مقادیر کپی شده 2 تا حالت در اختیار ما قرار دارد .
حالت اول همان چیزی است که تا به حال آن را با هم انجام دادیم . اما در حالت دوم برای جایگذاری اطلاعات کپی شده می توانیم به سراغ دستوری به اسم PasteSpacial برویم .
به تصویر زیر نگاه کنید .
متد pastespecial برای خودش شامل 4 تا ورودی می شود که توی هر کدام از انها هم می شود تنظیمات مختلفی را انتخاب کرد .
کادر زیر شکل کلی این دستور را نمایش می دهد .
expression.PasteSpecial (Paste, Operation, SkipBlanks, Transpose)
اینجا کلی قابلیت و امکانات کاربردی در اختیار شما قرار دارد که با استفاده از آنها می توانید هر کاری را در زمینه جایگذاری اطلاعات خودتان انجام بدهید .
بیایید در ادامه بیشتر با هر کدام از ورودی های این دستور آشنا شویم .
آشنایی با ورودی های PasteSpacial
اول به سراغ گزینه paste می رویم . این ورودی شامل گزینه های زیر است که می توانید بنا به نیاز خودتان یکی از آنها را انتخاب کنید .
عنوان گزینه
عملکرد گزینه
* Paste
نوع جایگذاری را مشخص می کند . اینکه جایگذاری به صورت کامل باشد یا نه
* Operation
عملگر اعمال شده حین جایگذاری را مشخص می کند
SkipBlank
آیا از جایگذاری سلول های خالی صرفنظر شود یا نه ؟
Transpose
جهت جایگذاری داده ها بصورت افقی باشد یا عمودی ؟
هر کدام از آرگومان های paste و operation برای خودشان یک سری گزینه هایی دارند که در داخل ویدئوی ابتدای این صفحه راجع به آن صحبت کرده ام .
خب اصل آموزشمان به انتها رسید . امیدوارم که برایتان کاربردی و مفید بوده باشد .
ئر انتها برویم به سراغ سوالات که در قسمت دیدگاهها مطرح شده است . بعضی از سوالات را در همان بخش دیدگاهها پاسخ داده ام اما پاسخ بعضی از انها را در داخل مطلب اصلی می آورم .
با چه کدهایی می شود اطلاعات را در اکسل حذف کرد ؟
یکی از دوستان در مورد دستور Delete و حذف اطلاعات با استفاده از آن سوال پرسیده است .
در پاسخ به این سوال باید گفت که در برنامه نویسی VBA دو تا متد و دستور برای حذف اطلاعات وجود دارد .
متد اول متد Delete است . متد دوم هم متدی است به اسم Clear.
با هر دو تای این متد می شود اطلاعات موجود در یک محدوده را حذف کرد البته در عمل یک تفاوت بین این دو تا دستور وجود دارد که در ویدئوی مربوط به همین مطلب در ابتدای این صفحه راجع به این تفاوت هم صحبت کرده ام .
مطالب زیر را حتما مطالعه کنید
تابع Hlookup در اکسل💥نکات و ترفندهای کار با آن +ویدئو
تابع فیلتر در اکسل 💥به همراه یک مثال کاربردی
تابع سفارشی در اکسل ؛ چی هست؟ چطور آن را ایجاد کنیم ؟
تابع countif در اکسل💚راهنمای کامل کار با آن
زوم کردن در سلول های اکسل + ۳ روش مختلف
چند فرمت سفارشی برای اعداد که هر حسابداری باید بداند.
18 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
عالیییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییی
با سلام
متاسفانه کد ها خطا میدن.ولی بزور تونستم کپی کنم ولی یه مشکلی دارم.اطلاعات یک سلول از اکسل که عدد هست اون عدد هم از طریق فرمول به دست میاد وقتی توی اکسل دیگه pasteمیکنم فرمول هاشو کپی میکنه نمیدونم چیکار کنم
سلام کاش می گفتید که چه خطایی نمایش میده
ولی توی آدیت این مطلب یک ویدئو قرار می دم و همه این موارد رو بصورت کامل آموزش خواهم داد
موفق باشید .
سلام ممنون بابت مطالبتون یه سوال داشتماگر بخوای اطلاعات یک سلول رو در سلول دیگه کپی کنیم و فرمت سلول مبدا به سلول مقصد منتقل بشه باید چه کدی استفاده کنیم؟ با تشکر
می تونید از کدی مثل کد زیر استفاده کنید
PasteRng.PasteSpecial xlPasteValuesAndNumberFormats
بسیار عالی و کاربردی. واقعا خسته نباشید
سلام وقت بخیر اگه بخوایم کپی کنه داخل یک سلول وبار دیگر اجرا کنیم کپی کنه سلول بعدیش یعنی به ترتیب کپی کنه با هربار اجرا کپی کن سلول بعد
سلام اینجا باید از دستور offset استفاده بشه البته در کنار اون از حلقه ها هم باید استفاده کرد .
ممنون
سلام
کد انتخاب سلول خالی در رنجaو بعد کپی کردن رنجb2:b50و بعد پیست کردن آن در سلول خالی رو میشه زحمت بکشین بفرستید
خیلی عالی . ولی امکانش هست بفرمایید که این کد ها رو دقیقا باید کجا بنویسیم؟
برای استفاده از این کدها باید یک ماژول ایجاد کنید . برای این کار دکمه های CTRL +F11 را گرفته از محیط کاری جدید و از منوی insert روی گزینه module کلیک کنید حالا این کدها را داخل آن وارد کرده و اجرا کنید
سلام
وقتتون بخیر
ممنون از اطلاعات خوبتون. من یه فرم دارم که حاوی اطلاعات هست و این اطلاعات رو با فرمول از شیت های دیگه میگیره و من میخوام با نوشتن کد این اطلاعات رو منتقل کنه به یه ورک بوک جدید که خودش باز میکنه و با همون فرمت سلول ها کپی کنه اونجا. یعنی همون فرم رو بدون فرمول ها و فقط اطلاعاتش باشه
ممنون میشم راهنماییم کنید
سلام این مطلب به روز رسانی و سوال شما هم پاسخ داده خواهد شد .
با سلام و تشکر از مطلب بسیار خوبتون، در انتهای مطلب نوشته اید:
در این مطلب ما در خصوص نحوه کار با عملیات های copy و paste و Delete در محیط برنامه نویسی VBA بطور مفصل صحبت کرده و روش های متعددی را برای این کار مورد بررسی قرار دادیم .
حالا اگه فرصت کنید و یه بار مطلب رو مرور کنید میبینید که در مورد کد نویسی برای Delete هیچ چیزی نوشته نشده!
سلام در این مورد کاملا حق با شماست .
با بروز رسانی که این مطلب خواهد دشات در مورد این آیتم هم صحبت خواهم کرد .
ممنون از دقت نظر شما
با عرض سلام و خسته نباشید
تشکر از مطالب ارزنده شما
لطفا در مورد دستور cut هم اگر مطالبی هست بفرمایید و همچنین هنگام استفاده ار دستور delete یک سطر که گاهی اوقات سلولی در سطر بالایی خالی است اطلاعات سطر جابجا میشود که نباید بشود.
اگر زحمت بکشید و به ایمیل ارسال بفرمایید مزید امتنان است
باز هم ممنون ان شاّ»الله تندرست و سلامت باشید
سلام منتظر پاسخ سوالات خودتان در آپدیت این مطلب باشید