PDA

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



jjsafa2020
2021/12/11, 14:01
با سلام و درود

یک فایلی دارم که توش حدود 8000 تا قطعه با موجودی و کد کالا هستش و این فایل رو برنامه حسابداری بهم میده. می میخواستم یک محدوده از یک شیت این فایل رو مثلاً a1 تا d10000 از شیت 1 فایل anbar رو با زدن دکمه update به شیت 1 فایل search بیارم تا بتونم روش فرمول نویسی کنم.

ممنون میشم راهنماییم کنین

jjsafa2020
2021/12/16, 12:23
با سلام و درود

یک فایلی دارم که توش حدود 8000 تا قطعه با موجودی و کد کالا هستش و این فایل رو برنامه حسابداری بهم میده. می میخواستم یک محدوده از یک شیت این فایل رو مثلاً a1 تا d10000 از شیت 1 فایل anbar رو با زدن دکمه update به شیت 1 فایل search بیارم تا بتونم روش فرمول نویسی کنم.

ممنون میشم راهنماییم کنین



دوستان لطفاً راهنمایی کنین.

kazamie
2021/12/17, 21:23
هر دو فایل را باز کنید بعد با فرمول index داده های فایل اول را به فایل دوم بیاورید بعد با ماکرونویسی این داده ها که فرمول هستند را کپی و به شیت دیگر به صورت داده پیست کنید بعد آن را به صورت دکمه درست کنید

jjsafa2020
2021/12/18, 16:50
هر دو فایل را باز کنید بعد با فرمول index داده های فایل اول را به فایل دوم بیاورید بعد با ماکرونویسی این داده ها که فرمول هستند را کپی و به شیت دیگر به صورت داده پیست کنید بعد آن را به صورت دکمه درست کنید

میشه لطفاً بیشتر راهنمایی کنین. اگه کد باشه که خیلی بهتره. ممنون

kazamie
2021/12/18, 21:56
این هم یک ماژول برای شما نوشتم فقط مسیر فایل و رنج ها را ویرایش کنید

Sub Macro1()
Workbooks.Open ("D:\Book1.xlsx")
Workbooks("Book2.xlsx").Activate
Range("A1").Formula = "=INDEX([Book1.xlsx]Sheet1!E:E,ROW())"
Range("A1").Select
Dim i As Integer
i = WorksheetFunction.CountA(Workbooks("Book1.xlsx").Sheets("Sheet1").Range("E:E"))
Selection.AutoFill Destination:=Range("A1:A" & i), Type:=xlFillDefault
Range("A1:A" & i).Copy
Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

- - - Updated - - -


این هم یک ماژول برای شما نوشتم فقط مسیر فایل و رنج ها را ویرایش کنید

Sub Macro1()
Workbooks.Open ("D:\Book1.xlsx")
Workbooks("Book2.xlsx").Activate
Range("A1").Formula = "=INDEX([Book1.xlsx]Sheet1!E:E,ROW())"
Range("A1").Select
Dim i As Integer
i = WorksheetFunction.CountA(Workbooks("Book1.xlsx").Sheets("Sheet1").Range("E:E"))
Selection.AutoFill Destination:=Range("A1:A" & i), Type:=xlFillDefault
Range("A1:A" & i).Copy
Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

در این ماژول book1 فایل مبدا است و book2 فایل مقصد است و اطلاعات از ستون E به ستون A فایل مقصد کپی می شوند

jjsafa2020
2021/12/19, 10:32
این هم یک ماژول برای شما نوشتم فقط مسیر فایل و رنج ها را ویرایش کنید

sub macro1()
workbooks.open ("d:\book1.xlsx")
workbooks("book2.xlsx").activate
range("a1").formula = "=index([book1.xlsx]sheet1!e:e,row())"
range("a1").select
dim i as integer
i = worksheetfunction.counta(workbooks("book1.xlsx").sheets("sheet1").range("e:e"))
selection.autofill destination:=range("a1:a" & i), type:=xlfilldefault
range("a1:a" & i).copy
range("a1").pastespecial paste:=xlpastevalues, operation:=xlnone, skipblanks _
:=false, transpose:=false
end sub

- - - updated - - -



در این ماژول book1 فایل مبدا است و book2 فایل مقصد است و اطلاعات از ستون e به ستون a فایل مقصد کپی می شوند

واقعاً ممنون
خیلی خوب و عالی
فقط ییه سوال میشه به جای یک ستون یک محدوده را انتقال داد. مثلاً از a1:e100 شیت1 فایل مبداً به همون مختصات در فایل مقصد
متشکر
,

kazamie
2021/12/19, 12:00
واقعاً ممنون
خیلی خوب و عالی
فقط ییه سوال میشه به جای یک ستون یک محدوده را انتقال داد. مثلاً از a1:e100 شیت1 فایل مبداً به همون مختصات در فایل مقصد
متشکر
,

این فرمول برای هر ستون جداگانه باید تکرار شود و یا کلا از فرمول دیگری استفاده شود
شما می توانید با تابع index و match همیشه در فایل مقصد و در یک شیت اطلاعات فایل مبدأ را به صورت داینامیک داشته باشید و بعد از آن شیت به شیت های دلخواه کپی پیست کنید که این کپی پیست کردن هم با ضبط ماکرو می توانید آسان تر کنید

kazamie
2021/12/19, 12:09
.index([book1.xlsx]sheet1!A:A,row())
این فرمول را در سلول A1 فایل مقصد بنویسید و از با لا به پایین درگ کنید و از چپ به راست هم درگ کنید تا اطلاعات فایل مبدأ را همیشه داشته باشید

jjsafa2020
2021/12/19, 14:58
.index([book1.xlsx]sheet1!A:A,row())
این فرمول را در سلول A1 فایل مقصد بنویسید و از با لا به پایین درگ کنید و از چپ به راست هم درگ کنید تا اطلاعات فایل مبدأ را همیشه داشته باشید

واقعا دم هموتن گرم عالی بود
یه سوال این کدی که نوشتین موقعی که فایل مبدأ بسته است داده ها نمی یاد و باید فایل باز بشه. راهی هست که بدون نیاز به باز کردن فایل مبدأ داده ها رو انتقال بوده. تو خود این کد باشه بهتره و نیاز به ماکرو نباشه

با تشکر

kazamie
2021/12/19, 18:32
واقعا دم هموتن گرم عالی بود
یه سوال این کدی که نوشتین موقعی که فایل مبدأ بسته است داده ها نمی یاد و باید فایل باز بشه. راهی هست که بدون نیاز به باز کردن فایل مبدأ داده ها رو انتقال بوده. تو خود این کد باشه بهتره و نیاز به ماکرو نباشه

با تشکر

این کد بدون باز کردن فایل مبدأ اطلاعات را در فایل مقصد نشان می دهد اگر فایل مبدأ پسورد داشته باشد پسورد را می‌پرسد، نمیدانم چرا این مشکل را دارید

- - - Updated - - -

فهمیدم شما برای نوشتن این تابع ابتدا هر دو فایل را باز کنید و بعد بنویسید سری های بعد این تابع مسیر کامل را در فرمول ذخیره می کنند و نیازی به باز کردن فایل مبدأ نیست

jjsafa2020
2021/12/20, 12:57
این کد بدون باز کردن فایل مبدأ اطلاعات را در فایل مقصد نشان می دهد اگر فایل مبدأ پسورد داشته باشد پسورد را می‌پرسد، نمیدانم چرا این مشکل را دارید

- - - Updated - - -

فهمیدم شما برای نوشتن این تابع ابتدا هر دو فایل را باز کنید و بعد بنویسید سری های بعد این تابع مسیر کامل را در فرمول ذخیره می کنند و نیازی به باز کردن فایل مبدأ نیست

در صورتی می یاره که تو هر خانه قسمت فرمول رو انتخاب کنین و enter بزنین.

jjsafa2020
2021/12/20, 13:05
در صورتی می یاره که تو هر خانه قسمت فرمول رو انتخاب کنین و enter بزنین.

درست شد ممنونم.
automatic update رو از تنظیمات فعال کردم درست شد
واقعا درستت درد نکنه.
پرروییه ها ولی یه سوال دیگه داشتم. میشه نام شیت بصورت متغییر باشه و از محتویات یکی از خونه های اکسل برداره. مثلا تو خونه i1 اگه sheet1 باشه بره از شیت1 برداره و اگه sheet2 باشه بره شیت2

kazamie
2021/12/20, 16:28
درست شد ممنونم.
automatic update رو از تنظیمات فعال کردم درست شد
واقعا درستت درد نکنه.
پرروییه ها ولی یه سوال دیگه داشتم. میشه نام شیت بصورت متغییر باشه و از محتویات یکی از خونه های اکسل برداره. مثلا تو خونه i1 اگه sheet1 باشه بره از شیت1 برداره و اگه sheet2 باشه بره شیت2

بله چون فرمول را دستی در شیت یک وارد می کنید و آدرس فایل مبدأ هم به صورت دستی در فرمول وارد می کنید، شما می توانید فرمول ها را در هر صفحه ای که خواستید بنویسید و آدرس فایل مبدأ را در فرمول اصلاح کنید

- - - Updated - - -

تازه متوجه شدم باید از تابع indirect همراه با شرط استفاده کنید

jjsafa2020
2021/12/20, 16:42
بله چون فرمول را دستی در شیت یک وارد می کنید و آدرس فایل مبدأ هم به صورت دستی در فرمول وارد می کنید، شما می توانید فرمول ها را در هر صفحه ای که خواستید بنویسید و آدرس فایل مبدأ را در فرمول اصلاح کنید

- - - updated - - -

تازه متوجه شدم باید از تابع indirect همراه با شرط استفاده کنید

من قبلا از این فرمول برای یه برنامه دیگه استفاده کردم استفاده کردم indirect($i$1&"!$x23") . ولی اینجا نشد. میشه راهنمایی کنین

kazamie
2021/12/20, 18:34
من قبلا از این فرمول برای یه برنامه دیگه استفاده کردم استفاده کردم indirect($i$1&"!$x23") . ولی اینجا نشد. میشه راهنمایی کنین
چون تابع ایندایرکت کمی پیچیده است باید درباره آن مطالعه کنی و بعد هم روی فایل نمونه آن را ببینی ولی من کد آن را اینجا قرار می دهم اگر متوجه نشدی برو مطالعه کن

=INDEX(INDIRECT("'[book1.xlsx]"&$I$1&"'!"&$I$2), row())
در سلول I1 باید نام شیت را بنویسید در سلول I2 باید یک نام دلخواه بنویسی مثلا abc بعد در name manager این نام را تعریف کنید و مثلا ستون A:A را به آن بدهید به این صورت =sheet1!$A:$A

kazamie
2021/12/20, 18:52
ویا اگر نمی خواهی نام تعریف کنی و فرمول را ساده تر کنی از کد زیر استفاده کنید

.INDEX(INDIRECT("'[book1.xlsx]"&$I$1&"'!A:A"), row())

jjsafa2020
2021/12/26, 08:21
ویا اگر نمی خواهی نام تعریف کنی و فرمول را ساده تر کنی از کد زیر استفاده کنید

.index(indirect("'[book1.xlsx]"&$i$1&"'!a:a"), row())

واقعا ممنون
خیلی خوب بود. فقط یه ایرادی که داره باید برنامه مبدأ باز باشه وگرنه #ref میده. ولی همینکه برنامه مبدأ باز میشه داده ها میان

kazamie
2021/12/26, 10:51
واقعا ممنون
خیلی خوب بود. فقط یه ایرادی که داره باید برنامه مبدأ باز باشه وگرنه #ref میده. ولی همینکه برنامه مبدأ باز میشه داده ها میان

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

D:\test\[book1.xlsx]

jjsafa2020
2021/12/26, 15:35
مسیر کامل را قبل از فایل بنویسید ت لازم به باز کردن فایل مبدأ نباشد

D:\test\[book1.xlsx]

این کار رو قبلا انجام داده بودم ولی بازم امتحان کردم. به محض بسته شدن فایل مبدأ داده ها REF میشن
=INDEX(INDIRECT("'E:\New folder\[FORMULASION.xlsx]"&$I$1&"'!e:e"); ROW()+12)
توخطاشم می زنه INVALID CELL REFRENCE ERROR

kazamie
2021/12/26, 17:49
این کار رو قبلا انجام داده بودم ولی بازم امتحان کردم. به محض بسته شدن فایل مبدأ داده ها REF میشن
=INDEX(INDIRECT("'E:\New folder\[FORMULASION.xlsx]"&$I$1&"'!e:e"); ROW()+12)
توخطاشم می زنه INVALID CELL REFRENCE ERROR
وقتی دو تا فایل باز هستند و در سلولی مساوی می گذاریم و بعد به فایل دوم می رویم و سلولی را انتخاب می‌کنیم در سربرگ دیتا و در قسمت edit links به صورت خودکار لینکی اضافه می شود و وقتی فایل بسته است اطلاعات فایل بسته را هم نشان می دهد ولی این لینک در حالت دستی ایجاد می شود و برای من هم سوال است که چطور می توان این آدرس هم که خودمان نوشتیم در اینجا لینک کنیم، اگر بتوانیم آن را لینک کنیم مشکل حل می شود