ID:
PW:

     0 ºÐ
     7 ºÐ

¿£Áö´Ï¾î µ¹Á¾
  dolljong
ÇÁ·Î±×·¡¹Ö Tips
ÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ TipÀ» °øÀ¯ÇÏ´Â °÷ÀÔ´Ï´Ù.


(¿£Áö´Ï¾î¸¦ À§ÇÑ)ÆÄÀ̽㠽ÃÀÛÇϱâ[14] ¿¢¼¿VBA-ÆÄÀ̽㠿¬µ¿
À̼®Á¾  2022-12-05 14:30:31, Á¶È¸ : 414, Ãßõ : 38
- Download #1 : engpython14.png (37.5 KB), Download : 6

- Download #2 : rcworks.zip (17.1 KB), Download : 6

(¿£Áö´Ï¾î¸¦ À§ÇÑ) ÆÄÀ̽㠽ÃÀÛÇϱâ[14]

 

³»¿ë : ¿¢¼¿VBA - ÆÄÀ̽㠿¬µ¿

ÂüÁ¶ : https://wikidocs.net/157782  (VBA¿¡¼­ÆÄÀ̽ã ÄÚµå ½ÇÇàÇϱâ)

xlwings °ø½Ä ȨÆäÀÌÁö : https://docs.xlwings.org/en/stable/udfs.html (User Defined Functions)

 

 

0.½ÃÀÛÇϸç

Áö³­ ½Ã°£¿¡´Â pythonÀ¸·Î ExcelÀÇ sheet¿¡ °ªÀ̳ª ¼ö½ÄÀ» ³Ö´Â °ÍÀ» ¼Ò°³Çß´Ù. ¿¢¼¿ °í±Þ»ç¿ëÀÚµéÀº ÀڽŸ¸ÀÇ VBA¸¦ ¸¸µé¾î¼­ »ç¿ëÇÑ´Ù. Visual BasicÀº ¸¶ÀÌÅ©·Î ¼ÒÇÁÆ®°¡ MS Office¿¡ µµÀÔÇÑ ¾ð¾î·Î ¿À·§µ¿¾È »ç¿ëµÇ¾î ¿Ô´Ù. xlwings´Â ±âÁ¸¿¡ »ç¿ëÇϰí ÀÖ´Â VBA¸¦ »ç¿ëÇϸ鼭 pythonÄÚµåµéÀ» °°ÀÌ »ç¿ëÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦½ÃÇϰí ÀÖ´Ù. pythonÃø¿¡¼­ ¿¢¼¿À» ÅëÁ¦ÇÏ´Â ¹æ¹ýÀº ¸í·Éâ¿¡¼­ ÆÄÀ̽ã Äڵ带 ½ÇÇà½ÃŰ°Å³ª ÆÄÀ̽ã Äڵ带 ½ÇÇàÆÄÀÏ·Î ¸¸µé¾î¼­ ½ÇÇàÇØ¾ß ÇÑ´Ù. Á¶±Ý ºÒÆíÇÒ ¼öµµ ÀÖ´Ù. VBAÀÇ ÀåÁ¡Àº ¿¢¼¿ ½ÃÆ® ¾È¿¡ ¹öưÀ» ¸¸µé ¼öµµ ÀÖ°í, º°µµÀÇ GUI¸¦ ¸¸µé ¼ö ÀÖ´Ù. ¸¸ÀÏ VBA´Â UI¿ëÀ¸·Î¸¸ ¾²°í ÇÊ¿äÇÑ ÀÛ¾÷À» ÇÏ´Â ÄÚµå´Â pythonÀ¸·Î ¸¸µç´Ù¸é ¾î¶³±î? ¿¹¸¦ µé¾î ö±Ù·®À» ±¸ÇØÁÖ´Â ÇÔ¼ö¸¦ ¸¸µé¾ú´Ù°í ÇÏÀÚ. VBA·Î ¸¸µé¸é ÇØ´ç ¿¢¼¿¿¡¼­¹Û¿¡ »ç¿ëÇÏÁö ¸øÇÑ´Ù. ÆÄÀ̽ãÀ¸·Î ¸¸µé¸é ´Ù¸¥ ÆÄÀ̽ã ÇÁ·Î±×·¥À̳ª ´Ù¸¥ ¿¢¼¿¿¡¼­µµ ºÒ·¯´Ù »ç¿ëÇÒ ¼ö ÀÖ´Ù. ÇϳªÀÇ ÆÄÀ̽ã Äڵ带 ¸¸µé¾î¼­ »ç¿ëÇÒ ¼ö ÀÖ°í Áߺ¹À» ÇÇÇÒ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. 

 

1. xlwings¼³Ä¡ È®ÀÎ ¹× addin¼³Ä¡

¿¢¼¿ VBA¿Í pythonÀ» ¿¬µ¿Çϱâ À§Çؼ­´Â Xlwings °¡ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù. ¾Æ³ªÄÜ´Ù¸¦ ¼³Ä¡Çϸé xlwings°¡ °°ÀÌ ¼³Ä¡µÇ´Âµ¥ xlwings¼³Ä¡ È®ÀÎÀº ÀÌÀü½Ã°£ÀÇ  http://www.gumifo.org/zeroboard/view.php?id=devtips&no=56

'(¿£Áö´Ï¾î¸¦ À§ÇÑ) ÆÄÀ̽㠽ÃÀÛÇϱâ[13]  ¿¢¼¿ ÆÄÀ̽㠿¬µ¿'À» ÂüÁ¶ÇÏÀÚ. ¾Æ³ªÄÜ´Ù ¼³Ä¡´Â ù ½Ã°£ÀÇ http://www.gumifo.org/zeroboard/view.php?id=devtips&no=40 '(¿£Áö´Ï¾î¸¦ À§ÇÑ) ÆÄÀ̽㠽ÃÀÛÇϱâ[1]'À» ÂüÁ¶ÇÏÀÚ.

 

¿¢¼¿¿¡¼­ pythonÄڵ带 »ç¿ëÇÏ·Á¸é xlwings¿ë addinÀ» ¼³Ä¡ÇØ¾ß ÇÑ´Ù.  ¸í·Éâ¿¡¼­ xlwings addin installÀ̶ó°í ÀÔ·ÂÇÏ¸é µÈ´Ù. ¹°·Ð xlwings°¡ ¼³Ä¡µÇ¾î ÀÖ¾î¾ß ÇÑ´Ù.

(base) D:\dev\python\xlwings>xlwings addin install
xlwings version:
0.24.9
Successfully installed the xlwings add-
in! Please restart Excel.
There
is already an existing ~/.xlwings/xlwings.conf file. Run 'xlwings config create --force' if you want to reset your configuration.

 

 

2. ¼³Á¤

xlwings addinÀÌ ¼³Ä¡µÇ¾ú´Ù¸é ¿¢¼¿À» ½ÇÇà½ÃÄѺ¸ÀÚ. ¸Þ´º¿¡ xlwings°¡ Ãß°¡µÈ °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÀÌ ¸Þ´º¿¡ VBA¿Í ÆÄÀ̽ãÀ» ¿¬°áÇØÁÖ´Â ±â´ÉµéÀÌ µé¾î ÀÖ´Ù.

±×¸®°í [°³¹ß µµ±¸] ¸Þ´º°¡ º¸ÀÌÁö ¾Ê´Â °æ¿ì¿¡´Â [°³¹ß µµ±¸] ¸Þ´º°¡ º¸À̵µ·Ï ÇØ¾ßÇÑ´Ù.

[ÆÄÀÏ] ¸Þ´ºÀÇ [¿É¼Ç]À» ¼±ÅÃÇÑ ÈÄ [¸®º» »ç¿ëÀÚ ÁöÁ¤]À» ¼±ÅÃÇÑ ÈÄ ¿À¸¥ÂÊ ±âº» ÅÇ¿¡¼­ °³¹ßµµ±¸¸¦ ¼±ÅÃÇϸé [°³¹ß µµ±¸] ¸Þ´º°¡ ³ªÅ¸³­´Ù.

[°³¹ß µµ±¸] ¸Þ´º¸¦ ¼±ÅÃÇÏÀÚ. ¸®º»ÀÌ ³ªÅ¸³ª¸é Visual BasicÀ» ¼±ÅÃÇÏÀÚ.

 

±×·¯¸é VBA âÀÌ º°µµ·Î ¶á´Ù. VBA Äڵ带 ÆíÁýÇÒ ¼ö Àִ âÀÌ´Ù.

 

[µµ±¸] ¸Þ´ºÀÇ [ÂüÁ¶]¸¦ ¼±ÅÃÇÑ´Ù. [ÂüÁ¶(R)...]À» ¼±ÅÃÇÑ´Ù.

 

»ç¿ë°¡´ÉÇÑ ÂüÁ¶ ¸®½ºÆ®¿¡¼­ xlwings¸¦ ¼±ÅÃÇϰí [È®ÀÎ] ¹öưÀ» ´©¸¥´Ù.

 

ÂüÁ¶ ´ÙÀ̾ó·Î±× ¹Ú½ºÀÇ ¾Æ·¡ ÂÊÀ» º¸¸é xlwings À§Ä¡¸¦ ¾Ë ¼ö ÀÖ´Ù. »ç¿ëÀÚ¸í\AppData\Roaming\Microsoft\Excel\XLSTART´Ù. ÀÌ Æú´õ¿¡ °¡º¸¸é xlwings.xlamÆÄÀÏÀÌ ÀÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. xlamÆÄÀÏÀº ¿¢¼¿ÀÇ Ãß°¡±â´É ÆÄÀÏÀÌ´Ù. µð·ºÅ丮¸íÀ» º¸¸é ¾Ë°ÚÁö¸¸ XLSTART µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀÏÀº ¿¢¼¿ÀÌ ½ÇÇàµÇ¸é ÀÚµ¿À¸·Î ¿­¸°´Ù. 

VBAâÀ» ¿­¾úÀ» ¶§ ¿ÞÂÊ ÇÁ·ÎÁ§Æ® Ž»ö±â¿¡ ÀÌ¹Ì xlwings.xlamÆÄÀÏÀÌ ¿­·ÁÀÖ´Â °É È®ÀÎÇÒ ¼ö ÀÖ´Ù. ÇÁ·ÎÁ§Æ® Ž»ö±â¿¡ ÅëÇÕ¹®¼­1°ú xlwings.xlamÆÄÀÏÀÌ ¿­·ÁÀÖ´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. xlwings.xlamÆÄÀÏÀÌ ¿¢¼¿À» ½ÇÇà½Ãų ¶§¸¶´Ù ¿­·Á¼­ VBA¿Í ÆÄÀ̽ãÀ» ¿¬°áÇØÁÖ´Â Áß¿äÇÑ ¿ªÇÒÀ» ÇÑ´Ù. 

 

¿©±â±îÁö ¼³Á¤Çϸé VBA¿¡¼­ ÆÄÀ̽ã Äڵ带 ½ÇÇàÇÏ´Â µ¥ ¹®Á¦°¡ ¾ø´Ù. ±×·±µ¥ ÇÊÀÚ°¡ Å×½ºÆ®Çغ» °á°ú Á» ºÒÆíÇÑ Á¡ÀÌ ÀÖ´Ù. ÆÄÀÌ½ã ÆÄÀÏÀÌ ¿¢¼¿ ÆÄÀϰú °°Àº µð·ºÅ丮¿¡ ÀÖ¾î¾ß ÇÏ°í ÆÄÀÏÀ̸§µµ °°¾Æ¾ß ÇÑ´Ù. »ó»óÇØº¸ÀÚ. ¿¢¼¿ ÆÄÀÏÀº ³»°¡ Áö±Ý ÀÏÇϰí ÀÖ´Â ÇÁ·ÎÁ§Æ® µð·ºÅ丮¿¡ Àִµ¥ ¸Å¹ø ÆÄÀ̽ã Äڵ带 ¿¢¼¿ÆÄÀÏÀÌ ÀÖ´Â °÷¿¡ º¹»çÇØ¼­ ½á¾ß ÇÑ´Ù¸é ¿©°£ ºÒÆíÇÑ °ÍÀÌ ¾Æ´Ò °ÍÀÌ´Ù.

 

 ±×·¡¼­ Á» ¹ø°Å·ÓÁö¸¸ ¼³Á¤À» ´õ ÇÏÀÚ. ÆÄÀ̽ã Äڵ尡 ÀÖ´Â À§Ä¡¿Í ÆÄÀÌ½ã ÆÄÀÏ À̸§À» ÁöÁ¤ÇØÁÖ´Â °úÁ¤ÀÌ´Ù.

 

xlwings¼³Á¤ ÆÄÀÏÀ» ã¾Æ¼­ ¼öÁ¤ÇØÁÙ °ÍÀÌ´Ù. xlwings¼³Á¤ ÆÄÀÏÀº c:\users\»ç¿ëÀÚÀ̸§\.xlwings µð·ºÅ丮¿¡ ÀÖ´Â xlwings.conf ÆÄÀÏÀÌ´Ù. ÀÌÆÄÀÏÀ» ¿­¾î "PYTHONPATH","" ¿Í "UDF MODULES",""ÀÇ °ªÀ» ¹Ù²ãÁÖ¸é µÈ´Ù.

 

"PYTHONPATH"´Â ÆÄÀ̽ã Äڵ尡 ÀÖ´Â µð·ºÅ丮´Ù. ¿ì¸® ¿£Áö´Ï¾î¸µ¼Ò¼ÈÄÚµù¿¡¼­ ¸¸µç ÄÚµåµéÀ» C:\ESC µð·ºÅ丮¿¡ ¸ð¾Æ³õ±â·Î ÇÏÀÚ. "PYTHONPATH","C:\ESC" ÀÌ·¸°Ô ¼öÁ¤ÇØÁÖÀÚ. ÀÌÁ¦ ¿¢¼¿¿¡¼­ ÆÄÀÌ½ã ÆÄÀÏÀ» ½ÇÇà½ÃŰ¸é ¿ì¼± ¿¢¼¿ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ丮¿¡¼­ ÆÄÀÏÀ» ã°í ¾øÀ¸¸é PYTHONPATH¿¡ ¼³Á¤µÈ µð·ºÅ丮¿¡¼­ ã°Ô µÈ´Ù.

 

À̹ø¿¡´Â UDF MODULES¸¦ ¼³Á¤ÇÒ Â÷·Ê´Ù. ÀÌ ¼³Á¤Àº UDF(User Defined Function, »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö)¸¦ »ç¿ëÇϱâ À§ÇÑ ¼³Á¤ÀÌ´Ù. ¿ì¸®´Â ö±ÙÄÜÅ©¸®Æ® °ü·Ã ±â´ÉµéÀ» ¸ð¾Æ³õÀº ÆÄÀ̽㠼ҽº ÆÄÀÏÀ» rcworks.py¶ó°í ¸¸µé ¿¹Á¤ÀÌ´Ù. ÆÄÀ̽ã ÄÚµå ÆÄÀϸíÀ» ½áÁÖ¸é µÈ´Ù. È®ÀåÀÚ´Â Á¦¿ÜÇÏ°í ÆÄÀÏÀ̸§¸¸ ½áÁØ´Ù.

"UDF MODULES","rcworks"

 

±×·¯¸é xlwings.confÀÇ Àüü ³»¿ëÀº ¾Æ·¡¿Í °°´Ù. ´Ù¸¥ ¼³Á¤ Ç׸ñµéµµ Àִµ¥ xlwings °ø½Ä »çÀÌÆ®ÀÇ °ü·Ã ÆäÀÌÁö¸¦ ÂüÁ¶ÇÏÀÚ. https://docs.xlwings.org/en/stable/addin.html Add-in & Settings

 

"CONDA PATH","C:\ProgramData\Anaconda3"
"CONDA ENV","base"
"PYTHONPATH","c:\esc"
"SHOW CONSOLE","False"
"UDF MODULES","rcworks"

 

 

 

ÀÌ·¸°Ô VBA¿Í ÆÄÀ̽ãÀ» ¿¬µ¿Çϱâ À§ÇÑ ¼³Á¤Àº ³¡³µ´Ù.

 

3. VBA¿¡¼­ ÆÄÀ̽㠽ÇÇàÇϱâ

ÀÌÁ¦ VBA¿¡¼­ ÆÄÀ̽ã Äڵ带 ½ÇÇàÇØº¸ÀÚ.  ¿ì¼± ÆÄÀ̽ã Äڵ带 ¸¸µéÀÚ. ÆÄÀÏ À̸§Àº rcworks.pyÀ̰í c:\esc µð·ºÅ丮¿¡ ÀúÀåÇÏÀÚ.

 

ÀÌ ÆÄÀ̽ã ÄÚµå´Â µÎ °³ÀÇ ±â´ÉÀÌ ÀÖ´Ù Çϳª´Â ÇÊ¿ä ö±Ù·®À» ±¸ÇØÁÖ´Â ÇÔ¼ö(udf_cal_As)ÀÌ°í ¶Ç Çϳª´Â ÇÊ¿ä ö±Ù·® »êÁ¤ Å×À̺íÀ» ¸¸µé¾îÁÖ´Â ÇÔ¼ö(reqAsTable)´Ù. reqAsTableÀº ¿¢¼¿¿¡ ÇÊ¿äö±Ù·® »êÁ¤¿ë Å×À̺íÀ» ¸¸µå´Â ±â´ÉÀ̰í, udf_cal_As´Â ¿¢¼¿ÇÔ¼öó·³ »ç¿ëÇÒ Ã¶±Ù·®À» »êÁ¤ÇØÁÖ´Â UDF´Ù.

 

Áö±Ý ¸¸µé·Á´Â ±â´ÉÀº ¸ÅÅ©·Î(reqAsTable)¸¦ ½ÇÇà½Ã۸é ÇöÀç ¼±ÅÃµÈ ¼¿(A2)¿¡ Å×À̺íÀ» ¸¸µç´Ù. ÀÌ Å×À̺íÀº ÇÊ¿äö±Ù·®À» ±¸Çϴµ¥ ÇÊ¿äÇÑ µ¥ÀÌÅ͵é°ú ¸¶Áö¸· Ä®·³(K3)¿¡ udf_cal_AsÇÔ¼ö¸¦ »ðÀÔÇØÁØ´Ù. udf_cal_AsÇÔ¼ö´Â A3~J3±îÁöÀÇ ¼¿ÀÌ ¹°·Á ÀÖ´Ù. ¿¹Á¦¸¦ Çϳª ¸¸µé¾î ÁØ´Ù°í »ý°¢ÇÏ¸é µÇ°Ú´Ù. ¿©·¯ ´Ü¸éÀÇ Ã¶±Ù·®À» ±¸ÇÒ ¶§ ÀÌ Å×À̺íÀ» ÀÌ¿ëÇÏ¸é ÆíÇÏ´Ù. ±âº»Å×À̺íÀÇ ³»¿ëÀ» ¼öÁ¤ÇÏ°í º¹»çÇØ¼­ ¿©·¯ ´Ü¸éÀÇ ÇÊ¿äö±Ù·®À» ±¸ÇÒ ¼ö ÀÖ´Ù. 

 

ÀÌ ±â´ÉÀ» ¸¸µé±â À§Çؼ­´Â ÆÄÀ̽ã ÂÊ¿¡¼­ ÇØ¾ß ÇÏ´Â ÀÛ¾÷ÀÌ ÀÖ°í VBAÂÊ¿¡¼­ ÇØ¾ßÇÏ´Â ÀÛ¾÷ÀÌ ÀÖ´Ù. ¿ì¼± ÆÄÀ̽ã ÂÊ¿¡¼­ ÄÚµùÀ» ÇØº¸ÀÚ. ÆÄÀϸíÀº rcworks.pyÀÌ°í µð·ºÅ丮´Â C:\ESCÀÌ´Ù.

import xlwings as xw

def reqAsTable():
    wb = xw.Book.caller()
    sheet = wb.sheets[
0]
    seladd = wb.app.selection.address
    formula=
"=udf_cal_As(" + ",".join(sheet[seladd].offset(1,i).address.replace("$","") for i in range(0,10)) + ")"
    tblhead = [
"¥Õc", "¥Õs", "¥á", "¥â", "fck(MPa)", "fy(MPa)", "B(mm)", "H(mm)", "d'(mm)", "Mu(kN.m)", "reqAs(mm)"]
    row1 = [
0.65, 0.9, 0.8, 0.4, 30, 400, 1000, 800, 80, 100, 0]
    tbl = [tblhead,row1]
    sheet[seladd].value = tbl
    sheet[seladd].offset(
1,10).formula=formula

@xw.func
def udf_cal_As(pi_c, pi_s, alpa, beta, fck, fy, B, H, dp, Mu):
   
""" Calculate required As"""
   
return cal_As(pi_c, pi_s, alpa, beta, fck, fy, B, H, dp, Mu)

def cal_As(pi_c, pi_s, alpa, beta, fck, fy, B, H, dp, Mu):
 
    d = H-dp
 
   
# V1,2,3 : V1*As©÷+V2*As+V3=0
    V1 = beta*pi_s**
2*fy**2/(alpa*pi_c*0.85*fck*B)
    V2 = pi_s*fy*d
    V3 = Mu*
10**6
   
    As = (V2-(V2**
2-4*V1*V3)**0.5)/(2*V1)
   
return As


if __name__ == "__main__":
    print(cal_As(
0.65, 0.9, 0.8, 0.4, 30, 400, 1000, 800, 80, 100))

 

ÀÌ ÄÚµå´Â ¾Æ·¡¿Í °°ÀÌ 5°³ÀÇ ÆÄÆ®µé·Î ±¸¼ºÀ» °¡Áø´Ù.

xlwings¸¦ importÇÏ´Â ºÎºÐ : import xlwings as xw

Å×À̺íÀ» ¸¸µé¾îÁÖ´Â ÇÔ¼ö : def reqAsTable():

¿¢¼¿ UDF¸¦ Á¤ÀÇÇÏ´Â ÇÔ¼ö :  def udf_cal_As( ~ ):

ÇÊ¿äö±Ù·® ±¸ÇÏ´Â ÇÔ¼ö : cal_As( ~ ):

Å×½ºÆ®¸¦ À§ÇÑ ºÎºÐ : if __name__ ~ 

 

ÀÌ Àý¿¡¼­´Â VBA¿¡¼­ ÆÄÀ̽ã Äڵ带 ½ÇÇàÇÏ´Â ³»¿ëÀ̹ǷΠreqAsTable() ÇÔ¼ö¸¦ ½ÇÇàÇÏ´Â ¹æ¹ýÀ» »ìÆìº¸°Ú´Ù. ¿¢¼¿¿¡¼­ ÆÄÀ̽ã Äڵ带 ½ÇÇàÇϱâ À§Çؼ­´Â VBA°¡ ÇÊ¿äÇÏ´Ù. VBA¿¡¼­ ÆÄÀÌ½ã ÆÄÀÏÀ» ºÒ·¯¿Í ½ÇÇàÇÑ´Ù°í »ý°¢ÇÏ¸é µÈ´Ù.

 

¿¢¼¿ÀÇ [°³¹ß µµ±¸]¸Þ´º¿¡¼­ [Visual Basic]À» ¼±ÅÃÇÏÀÚ. VBA âÀÌ ¶ã °ÍÀÌ´Ù. ¿©±â¼­ »õ·Î¿î VBAÄڵ带 Ãß°¡Çϱâ À§Çؼ­ ¿ÞÂÊÀÇ ÇÁ·ÎÁ§Æ® Ž»ö±â¿¡¼­ ÀÚ½ÅÀÇ ¿¢¼¿ÆÄÀÏ¸í¿¡ ¿À¸¥ÂÊ ¸¶¿ì½º¸¦ Ŭ¸¯ÇÑ ÈÄ [»ðÀÔ(N)]À» ¼±ÅÃÇϰí [¸ðµâ(M)]À» ¼±ÅÃÇÑ´Ù.

 

 ±×·¯¸é ¾Æ·¡ ±×¸²Ã³·³ »õ·Î¿î ¸ðµâÀÌ Ãß°¡ µÈ´Ù. ¸ðµâÀ̸§Àº ±âº»ÀûÀ¸·Î Module1À¸·Î ¸¸µé¾îÁø´Ù. ÀÌ ¸ðµâ¿¡ ÆÄÀ̽ã Äڵ带 ½ÇÇàÇÏ´Â VBA Äڵ带 Ãß°¡ÇÒ °ÍÀÌ´Ù. VBA¸¦ Àß ¸ð¸¥´Ù°í ÇØµµ °ÆÁ¤ÇÒ ÇÊ¿ä ¾ø´Ù. ¾ÆÁÖ ´Ü¼øÇÏ°í  ÆÄÀ̽ã°ú Å©°Ô ´Ù¸£Áö ¾Ê´Ù.

È­¸éÀÇ ¿À¸¥ÂÊ¿¡ Module1ÀÇ ¼Ò½ºÄڵ带 ÀÔ·ÂÇÒ ¼ö ÀÖ´Ù. ¾Æ·¡ÀÇ Äڵ带 ÀÔ·ÂÇÏÀÚ. VBAÄÚµåÀε¥ SubÀº ÆÄÀ̽ãÀÇ def¿Í °°Àº °³³äÀÌ´Ù. ¸¶Áö¸·ÀÇ End subÀº ÇÔ¼ö ¼±¾ðÀÇ ¸¶Áö¸·ÀÓÀ» Ç¥½ÃÇÑ´Ù. ´Ü ¼¼ÁÙÀÌ´Ù.

Sub reqAsTable()
    RunPython
"import rcworks;rcworks.reqAsTable()"
End Sub

 

RunPython ´ÙÀ½¿¡ ÆÄÀ̽㠸í·ÉÀ» ½áÁÖ¸é µÈ´Ù.  import¹®À¸·Î rcworks¸¦ ºÒ·¯¿À°í rcworks.reqAsTable() ¸í·ÉÀ¸·Î reworks.py¾È¿¡ ÀÖ´Â reqAsTableÇÔ¼ö¸¦ ½ÇÇà½Ã۶ó´Â ¸í·ÉÀÌ´Ù. µÎ°³ÀÇ ¸í·ÉÀÌ ;·Î ±¸ºÐµÇ¾îÀÖ´Ù.  rcworks.pyÆÄÀÏÀº ÇöÀç ¿¢¼¿ÆÄÀÏÀÌ ÀÖ´Â µð·ºÅ͸®¿Í xlwings.conf¿¡¼­ ¼³Á¤ÇÑ PYTHONPATH¿¡¼­ ã¾Æ¼­ importÇÑ´Ù.

 

ÀÌÁ¦ ÆÄÀ̽㠸ÅÅ©·Î¸¦ ½ÇÇàÇÒ Áغñ´Â ³¡³µ´Ù. ¸ÅÅ©·Î¸¦ ½ÇÇàÇØº¸ÀÚ. ¸ÅÅ©·Î¸¦ ½ÇÇàÇÏ´Â ¹æ¹ýÀº ¿¢¼¿ÀÇ [°³¹ß µµ±¸]¸¦ ¼±ÅÃÇÑ ´ÙÀ½ [¸ÅÅ©·Î]¸¦ ¼±ÅÃÇÑ´Ù. ±×·¯¸é ÇöÀç ÆÄÀÏ¿¡¼­ ½ÇÇàÇÒ ¼ö ÀÖ´Â ¸ÅÅ©·Î ¸®½ºÆ®°¡ ¶á´Ù. VBA¿¡ Ãß°¡µÈ ¸ðµâµé ¾È¿¡ sub·Î Á¤ÀÇµÈ ¸ÅÅ©·ÎµéÀÇ ¸®½ºÆ®¸¦ º¸¿©ÁØ´Ù.

 

reqAsTable ¸ÅÅ©·Î¸¦ ¼±ÅÃÇÑ ´ÙÀ½ [½ÇÇà(R)] ¹öưÀ» ´©¸£¸é ¸ÅÅ©·Î°¡ ½ÇÇàµÈ´Ù. ½ÇÇà °á°ú´Â ¾Æ·¡ ±×¸²°ú °°´Ù. ¸ÅÅ©·Î¸¦ ½ÇÇàÇϱâ Àü¿¡ ¼±ÅõǾú´ø ¼¿¿¡ Å×À̺íÀÌ ±×·ÁÁø´Ù. A2 ¼¿¿¡¼­ ¸ÅÅ©·Î¸¦ ½ÇÇàÇ߱⠶§¹®¿¡ A2            :K3 ¿µ¿ª¿¡ Å×À̺íÀÌ ¸¸µé¾îÁ³´Ù.

¾Æ¸¶µµ ¿©·¯ºÐÀº À§ ±×¸²°ú °°Àº °á°ú°¡ ³ª¿ÀÁö ¾Ê°í ¾Æ·¡ ±×¸²°ú °°Àº °á°ú°¡ ³ª¿ÔÀ» °ÍÀÌ´Ù.

¼¿ ÁÖ¼Ò K3¿¡ µé¾îÀÖ´Â ³»¿ëÀ» È®ÀÎÇØº¸¸é ¾Æ·¡ ±×¸²°ú °°ÀÌ Á¦´ë·Î ¼ö½ÄÀÌ ¹°·Á ÀÖ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ±×·±µ¥ ¿Ö #NAME?À̶ó´Â °á°ú¸¦ º¸¿©ÁÖ´Â °ÍÀϱî? ¿¢¼¿¿¡¼­ #NAME? ¿¡·¯´Â ±×·± ÇÔ¼ö°¡ ¾ø´Ù´Â ¶æÀÌ´Ù. 

ºÐ¸í ÆÄÀÌ½ã ÆÄÀÏ(rcworks.py)¿¡¼­ @xw.func µ¥ÄÚ·¹ÀÌÅÍ·Î def udf_cal_As() ÇÔ¼ö¸¦ °¨½ÎÁÖ¾úÀ¸´Ï Á¦´ë·Î ÀÛµ¿ÇØ¾ß ÇÏ´Â °ÍÀÌ ¾Æ´Ò±î?

 

¾Õ¿¡¼­ ¡®ÆÄÀ̽ã Äڵ常À¸·Î ½ÇÇàµÇÁö ¾Ê°í VBAÄڵ带 ÅëÇØ¼­ ½ÇÇàÇØ¾ß ÇÑ´Ù¡¯´Ù°í  Çß´Ù. reqAsTableµµ ÆÄÀ̽㿡¼­ Á¤ÀÇÇϰí VBA¿¡¼­µµ Á¤ÀÇÇß´Ù. UDFµµ ¸¶Âù°¡Áö·Î VBA¿¡¼­µµ Á¤ÀÇÇØÁà¾ß ÇÑ´Ù. UDF¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀº ´ÙÀ½ Àý¿¡¼­ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

 

4. »ç¿ëÀÚ Á¤ÀÇ ÇÔ¼ö(UDF)

UDF¸¦ Á¤ÀÇÇϱâ À§Çؼ­´Â ÆÄÀ̽ã ÂÊ¿¡¼­ ¼±¾ðÇØÁÖ°í VBA ÂÊ¿¡¼­µµ ¼±¾ðÇØÁà¾ß ÇÑ´Ù. ÆÄÀ̽ã ÂÊ¿¡¼­ ¼±¾ðÇÏ´Â ¹æ¹ýÀº @xw.func µ¥ÄÚ·¹ÀÌÅÍ·Î °¨½ÎÁÖ¾ú´Ù.

@xw.func
def udf_cal_As(pi_c, pi_s, alpa, beta, fck, fy, B, H, dp, Mu):
   
""" Calculate required As"""
   
return cal_As(pi_c, pi_s, alpa, beta, fck, fy, B, H, dp, Mu)

 

def udf_cal_As( ):ÀÇ  ¾ÕÁÙ¿¡ @xw.func¶ó´Â ¹®ÀåÀÌ ³ª¿Â´Ù. ÀÌ ºÎºÐÀÌ ¹Ù·Î ¿¢¼¿¿¡°Ô UDF¶ó´Â °ÍÀ» ¾Ë·ÁÁÖ´Â ºÎºÐÀÌ´Ù. @·Î ½ÃÀÛÇÏ´Â °ÍÀº µ¥ÄÚ·¹ÀÌÅͶó°í ÇÑ´Ù. ±×³É ´Ù¸¥ ÇÔ¼ö¸¦ °¨½ÎÁÖ´Â ÀÏÁ¾ÀÇ ÇÔ¼ö¶ó°í »ý°¢ÇÏ¸é µÈ´Ù. udf_cal_As°¡ ¿¢¼¿¿¡¼­ »ç¿ëÇÒ ÇÔ¼ö À̸§ÀÌ´Ù. def¹® ¾Æ·¡¿¡ ¼¼°³ÀÇ µû¿ÈÇ¥·Î ½Î¿©Áø ¹®ÀÚ´Â ÇÔ¼öÀÇ ¼³¸íÀÌ´Ù. ¿¢¼¿¿¡¼­ [¼ö½Ä]¸Þ´ºÀÇ ÇÔ¼ö »ðÀÔÀ» ´­·¶À» ¶§ º¼ ¼ö ÀÖ´Ù.

VBA Äڵ带 Ãß°¡ÇØÁà¾ß UDF°¡ Á¦´ë·Î ÀÛµ¿ÇÑ´Ù. reqAsTableµµ VBA¿¡¼­ ¸ÅÅ©·Î¸¦ Ãß°¡Çß´ø °ÍÀ» ±â¾ïÇÏÀÚ. ÇöÀçÀÇ ¿¢¼¿ ÆÄÀÏ¿¡¼­ ÆÄÀ̽ãÀ¸·Î ÀÛ¼ºÇÑ UDF¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ´ÙÀ½°ú °°ÀÌ ¼³Á¤ÇØÁÖ¸é µÈ´Ù.

 

¿¢¼¿ÀÇ [xlwings] ¸Þ´º¸¦ ´­·¯º¸ÀÚ. Import Functions ¹öưÀ» ´­·¯ÁÖ¸é ¼³Á¤ ³¡ÀÌ´Ù.

±×·±µ¥ ÀÌ ±â´ÉÀ» »ç¿ëÇÏ·Á¸é ÇѰ¡Áö ¼³Á¤À» ´õ ÇØÁà¾ß ÇÑ´Ù. [°³¹ß µµ±¸]ÀÇ [¸ÅÅ©·Î º¸¾È]À» ´©¸¥ ´ÙÀ½ [°³¹ßÀÚ ¸ÅÅ©·Î ¼³Á¤] ÀÇ ¡®VBA ÇÁ·ÎÁ§Æ® °³Ã¼ ¸ðµ¨¿¡ ¾ÈÀüÇÏ°Ô ¾×¼¼½ºÇÒ ¼ö ÀÖÀ½¡¯À» ÄÑÁÖÀÚ. Import Functions¸¦ ´©¸£¸é xlwings°¡ VBAÇÁ·ÎÁ§Æ®¿¡ ¼Ò½ºÄڵ带 Á÷Á¢ Ãß°¡Çϱ⠶§¹®¿¡ À̰ÍÀÌ ÄÑÁ® ÀÖ¾î¾ß ÇÑ´Ù.

 

ÀÌÁ¦ [xlwings] ¸Þ´ºÀÇ [Import Functions]¸¦ ´­·¯º¸ÀÚ. ¾Æ¹« Àϵµ ¹ú¾îÁöÁö ¾Ê´Â´Ù. ±×·¡µµ µî·ÏÀº ³¡³µ´Ù. ÀÌ ¹öưÀ» ´©¸£¸é xlwings°¡ xlwings.confÆÄÀÏ¿¡ ÀÖ´Â "UDF MODULES","rcworks" ¼³Á¤¿¡¼­ ÁöÁ¤ÇÑ ÆÄÀÏÀÎ rcworks.py ÆÄÀÏÀ» ã¾Æ¼­ @xw.func·Î °¨½ÎÁø ÇÔ¼öµéÀ» ã¾Æ¼­ µî·ÏÇØÁØ´Ù. ¾îµð´Ù µî·ÏÀ» ÇÏ´Â °ÍÀϱî? VBA¸¦ ¿­¾îº¸ÀÚ.

import functions¸¦ ´©¸£±â Àü¿¡´Â ¾ø¾ú´ø xlwings_udfs ¸ðµâÀÌ Ãß°¡µÈ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. ÀÌ ¸ðµâÀÇ ³»¿ëÀ» º¸ÀÚ. º¹ÀâÇÏ´Ù. ¿ì¸®°¡ ÀÌ ÄÚµåÀÇ ³»¿ëÀ» ¾Ë ÇÊ¿ä´Â ¾ø´Ù. ´ëÃæ º¸¸é Function udf_cal_As(~)À¸·Î ½ÃÀÛÇØ¼­ End FunctionÀ¸·Î ³¡³µ´Ù. VBA·Î UDF¸¦ Á¤ÀÇÇÏ´Â ¹æ¹ýÀÌ´Ù.

Function udf_cal_As(pi_c, pi_s, alpa, beta, fck, fy, B, H, dp, Mu)
   
#If App = "Microsoft Excel" Then
       
If TypeOf Application.Caller Is Range Then On Error GoTo failed
        udf_cal_As = Py.CallUDF(
"rcworks", "udf_cal_As", Array(pi_c, pi_s, alpa, beta, fck, fy, B, H, dp, Mu), ThisWorkbook, Application.Caller)
       
Exit Function
   
#Else
        udf_cal_As = Py.CallUDF(
"rcworks", "udf_cal_As", Array(pi_c, pi_s, alpa, beta, fck, fy, B, H, dp, Mu))
       
Exit Function
   
#End If
failed:
    udf_cal_As = Err.Description
End Function

 

Áß°£ Âë¿¡ udf_cal_As = Py.CallUDF(¡°rcworks¡±, ¡°udf_cal_As¡±, ~ ) ÀÌ·± ºÎºÐÀÌ ÀÖ´Ù. rcworks.pyÆÄÀÏÀÇ udf_cal_As ÇÔ¼ö¿¡ ´ëÇØ Á¤ÀÇÇϰí ÀÖ´Â °ÍÀ¸·Î º¸ÀδÙ. ÀÌ ÄÚµåÀÇ ³»¿ëÀº ÀÚ¼¼ÇÏ°Ô ¾Ë ÇÊ¿ä´Â ¾ø´Ù. import functions¹öưÀ» ´©¸£¸é ÀÌ Äڵ尡 ÀÚµ¿À¸·Î »ý¼ºµÇ±â ¶§¹®ÀÌ´Ù.

 

4. ¸ËÀ½¸»

À̹ø ½Ã°£¿¡´Â xlwings¸¦ ÀÌ¿ëÇØ¼­ ¿¢¼¿ÀÇ VBA¿Í ÆÄÀ̽ãÀ» ¿¬µ¿ÇÏ´Â ¹æ¹ýÀ» ¾Ë¾ÆºÃ´Ù. µÎ °¡Áö ±â´ÉÀ» ¾Ë¾ÆºÃ´Âµ¥ Çϳª´Â ¸ÅÅ©·Î°í Çϳª´Â »ç¿ëÀÚÁ¤ÀÇ ÇÔ¼ö(UDF)´Ù. ¸ÅÅ©·Î´Â ÀϰýÀÛ¾÷À» ÇÏ´Â °ÍÀÌ¶ó¼­ ÆÄÀ̽ã ÂÊ¿¡¼­ ½ÇÇàÇÏ´Â °Í°ú Å©°Ô ´Ù¸£Áö ¾Ê°í VBAÂÊ¿¡¼­ sub·Î ¸ÅÅ©·Î¸¦ µî·ÏÇÏ°í ÆÄÀÌ½ã ÆÄÀÏÀ» ½ÇÇàÇÏ´Â °³³äÀ̾ú´Ù. UDF´Â ÆÄÀ̽ãÀÇ ÇÔ¼ö¸¦ ¸¶Ä¡ ¿¢¼¿ÀÇ ÇÔ¼öÀÎ °Íó·³ ¿¢¼¿¿¡¼­ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. UDF´Â ¸ÅÅ©·Î¿¡ ºñÇØ¼­ ¼³Á¤ÇÒ °ÍÀÌ Á» ¸¹´Ù. ÇÏÁö¸¸ ÆÄÀ̽ãÀ¸·Î ¸¸µç ÇÔ¼öµéÀ» ¿¢¼¿¿¡¼­µµ ¾µ ¼ö Àֱ⠶§¹®¿¡ ÄÚµå ÅëÇÕÀÌ °¡´ÉÇÏ°í °ü¸®°¡ ÆíÇÒ °ÍÀÌ´Ù.4

 

-³¡-


¿¹Á¦ÆÄÀÏ : rcworks.zip
- rcworks.py´Â C:\ESC¿¡ º¹»ç
- py1.xlsm ÆÄÀÏÀº ¿øÇÏ´Â ¾Æ¹« Æú´õ¿¡ º¹»ç ÈÄ py1.xlsmÆÄÀÏÀ» ¿­±â.



  ÃßõÇÏ±â   ¸ñ·Ïº¸±â

Copyright 1999-2023 Zeroboard / skin by zero
±¸Á¶¼³°èÀÇ ¹Ì·¡¸¦ ÁغñÇÏ´Â ¸ðÀÓ [±¸Á¶¼³°è¹Ì·¡Æ÷·³]