Total Pageviews

Saturday, 19 May 2018

MACRO - 3 FOR.....NEXT LOOP AND MESSAGE BOX



MACRO - 3 FOR.....NEXT LOOP AND  MESSAGE BOX

முதல் இரண்டு அத்தியாயங்களில் MACRO என்றால் என்ன, அதில் உள்ள OBJECTகள், எப்படி செலக்ட் செய்வது, அவற்றிற்கு உள்ளீடு அளிப்பது,  உருவாக்கும் MACRO வை பதிவு செய்வது, அதற்கு குறுக்கு வழி (SHORTCUT) அமைப்பது மற்றும் எங்கு சேமிக்கவேண்டும் என்பதையெல்லாம் பார்த்தோம்MACRO உள்ள கோப்புகளை சேமிக்கும்போது .XLSM என்ற (EXTENSION TYPE) வகையில் சேமிக்க வேண்டும்.

முதல் அத்தியாயத்தில் FOR ..... NEXT என்று ஒரு LOOP உபயோகித்துள்ளோம்.  அதைப்பற்றி கொஞ்சம் பார்க்கலாம். ஒரு செயல்முறை திருப்பி திருப்பி செய்ய வேண்டுமென்றால், அதுவும் எத்தனை முறை செயல்பட வேண்டும் என்று நிச்சயமாக தெரியும்போது FOR ...... NEXT  லூப்பை உபயோகிக்கலாம்.

ஒரு ஐம்பது  செல்களில் ஒன்று, இரண்டு என்று வரிசையாக எழுத வேண்டும். இதை பின்வருமாறு எழுகலாம்.

A10 ல் ஆரம்பிப்போம்.
SUB SLNO()
[A10].VALUE=1
[A11].VALUE=2
[A13].VALUE=3
[A14].VALUE=4 
' இதைப்போல் 50 மதிப்பு வரும் வரையில் வரிசையாக எழுதவேண்டும் 
END SUB


SUB SLNO()
' USAGE OF FOR AND NEXT
[A10].SELECT
FOR I = 1 TO 50
ACTIVECELL.VALUE=I
ActiveCell.Offset(1, 0).Select
NEXT I
END SUB 



முதல் MACRO வையும் இரண்டாவது MACRO வையும் கவனியுங்கள்.  முதலில் உள்ளதில் 50 வரிசைகள் எழுத வேண்டியுள்ளது.  இரண்டாவதில் ஐந்து வரிசைகளில் அடங்கிவிட்டது.  மறுபடியும் மறுபடியும் செய்ய வேண்டிய வரிகள் லூப்பில் உள்ளன. எவ்வளவு தடவைகள் செய்யவேண்டும், எதிலிருந்து ஆரம்பிக்கவேண்டும் என்பவைகள் நிச்சயிக்கப்பட்டுவிட்டன.

மேலே இரண்டாவது வரியின் ஆரம்பத்தில் ஒற்றைக்குறி ( ' ) இட்ட வரியை கவனியுங்கள்.  ஒரு வரியின் ஆரம்பத்தில் ஒற்றைக்குறியிட்டால் அவ்வரியானது நிரலல்ல, ஒரு குறிப்பு என்று குறிக்கும் (not a program statement, it is a remark - for programmer's information). இது பயனீட்டாளர்களுக்கு உதவுவதற்காக .

  ActiveCell.Offset(1, 0).Select  

தற்போது இருக்கும் நிலையிலிருந்து எந்த பக்கம் நகரவேண்டும் என்பதைக் குறிப்பத்து தான்    



ActiveCell என்பது தற்போது கர்சர் இருக்குமிடம்.

Offset(1, 0) என்பது கீழே ஒருவரிசை நகரவேண்டும்.  பத்தி அதே பத்தியில்தான் இருக்க வேண்டும்.

தற்போது A10 ல் இருக்கும் கர்சர் ஒரு வரி கீழே அதாவது A11 க்கு வரும்.

Offset(-1, 0) அதே பத்தியில் ஒரு வரி மேலே 
Offset(1, 1)  அடுத்த வரியில் அடுத்த பத்தியில் (வலது பக்கமாக)
Offset(0, 1) அதே வரியில் வலது பக்கமாக ஒரு செல் நகர 
Offset(-10, 1) வலது பக்கமாக ஒரு செல் நகர்ந்து பத்து செல்கள் மேலே போகவேண்டும் 

மற்றுமொரு உதாரணத்தைப்  பார்ப்போம்.


TABLE ஒன்று தயார் செய்வோம்.

Sub TABLES()
[A1].Value = "T  A  B  L  E  S"
[A2].Select
For I = 1 To 10
ActiveCell.Value = I & " * " & 1 & " = " & I
ActiveCell.Offset(1, 0).Select
Next I
End Sub 

A1 ல் "T  A  B  L  E  S" என்பதை உள்ளீடாக கொடுக்கிறோம்.
A2 வை செலக்ட் செய்கிறோம் 

FOR LOOP ஐ ஒன்றிலிருந்து பத்து தடவை கீழே உள்ள கட்டளைகளை செய்யச் சொல்கிறோம்.

தற்போது இருக்கும் செல்லின் மதிப்பை  I & " * " & 1 & " = " & I என்று எழுதப் சொல்கிறோம்.

(அதாவது முதல் சுற்றில் I =1, & ( & என்பது அத்துடன் என்று பொருள்படும்.  முதலில் இருப்பவற்றோடு  பின் வருபவற்றையும் சேர்த்துக்கொள் .  ஆக 1 * 1 = 1 என்றும், இரண்டாவது சுற்றில் 2 * 1=2......) ( & இதை concotanete operator என்று சொல்வார்கள்.)


இதை செயல்படுத்தினால் (RUN ) 

என்று வரும்.


இந்த MACRO வை கொஞ்சம் மேம்படுத்துவோம் 

பத்து TABLES எழுதுவோம்.


Sub TABLES()
[A1].Value = "T  A  B  L  E  S"
[A2].Select
For i = 1 To 10
For j = 1 To 10
ActiveCell.Value = j & " * " & i & " = " & i * j
ActiveCell.Offset(1, 0).Select
Next j
ActiveCell.Offset(-10, 2).Select
Next i
End Sub

விளக்கம் :
•Sub TABLES()
•[A1].Value = "T  A  B  L  E  S"
•[A2].Select
For i = 1 To 10   (ஒன்றிலிருந்து பத்து வாய்ப்பாடுகள் )
For j = 1 To 10   (ஒவ்வொன்றிலும் ஒன்றிலிருந்து பத்து வரை )
ActiveCell.Value = j & " * " & i & " = " & i * j
ActiveCell.Offset(1, 0).Select   (தற்போது இருக்கும் செல்லிலிருந்து ஒரு செல் கீழ் பக்கமாக நகர )
Next j (வாய்ப்பாட்டுக்குள் அடுத்த எண்ணிக்கைக்கு செல்ல) 

ActiveCell.Offset(-10, 2).Select (வாய்ப்பாடு முடிந்தவுடன் பத்து செல்கள்மேல்பக்கமாகவும் இரண்டு செல்கள் வலது பக்கமாகவும் நகரவேண்டும்.)
Next I  (வாய்ப்பாடு முடிந்து அடுத்த வாய்ப்பாட்டிற்கு செல்ல )
End Sub






MESSAGE BOX



MESSAGE BOX என்பது பயனாளருக்கு தகவல் அளிக்கும் ஒரு பெட்டியாகும். சில சமயத்தில் பயனாளருக்கு தகவலை அளிப்பதுடன் அது சம்பந்தமாக எழும் கேள்விகளுக்கு விடையைப்பெறவும் MESSAGE BOX பயன்படுகிறது.

ஒரு சிறிய உதாரணத்தைப் பார்ப்போம். 


மேலே வாய்ப்பாடு தயாரிக்க ஒரு மேக்ரோ எழுதியுள்ளொமல்லவா, அதில் ஒரு சிறிய மாற்றம் செய்வோம்.  நான்காவது வரிக்கு அடுத்தாற்போல் MSGBOX "GOOD MORNING "   என்று எழுதி, புதியதாக ஒரு வரி சேர்க்கப்பட்டுள்ளது என்பது நமக்கு தெரிவதற்காக  ' A NEW LINE ADDED HERE என்று ஒரு குறிப்பையும் சேர்ப்போம்.

Sub TABLES()
[A1].Value = "T  A  B  L  E  S"
[A2].Select
For i = 1 To 10
MSGBOX "GOOD MORNING "   ‘ A NEW LINE ADDED HERE
for j = 1 To 10
ActiveCell.Value = j & " * " & i & " = " & i * j
ActiveCell.Offset(1, 0).Select
Next j
ActiveCell.Offset(-10, 2).Select
Next i
End Sub




இப்போது இந்த மேக்ரோவை செயல்படுத்தி பாருங்கள் (RUN ) செயல்படுத்த மேலே STANDARD TOOLBAR ல் உள்ள முக்கோண குறியிட்ட பட்டனை அழுத்தவும்.









ஒவ்வொரு அட்டவணையும் அச்சு செய்வதற்கு முன்பு message box ல் கொடுத்த தகவல் நமக்கு தோற்றமளிக்கும். அதற்கு ok என்ற பட்டனை அழுத்தினால்தான் அடுத்த செயலுக்கு (வரிக்கு) நகரும்.


இப்போது கொடுத்த வரியிலேயே மற்றொரு மாற்றத்தை செய்வோம்.  MsgBox "GOOD MORNING என்றுள்ளதற்கு பக்கத்தில்  - Now i am going to type table no." & i என்பதை தட்டச்சு செய்யுங்கள். (MsgBox "GOOD MORNING - Now i am going to type table no." & i) . இதில் & i  என்பது மேலே நாம் பயன்படுத்திய மாறிலியில் (variable) உள்ள மதிப்பை காண்பிக்க.




மேலே காணப்படும் Message Box ல் இருக்கும் செய்தியை இரண்டு வரியில் குறிப்பிடுவோமா ? புது வரி சேர்க்க வேண்டுமென்றால் & vbnewline என்று எழுதி, பின் இரண்டாவது வரியில் என்ன வரவேண்டுமோ அதை & (ambersand )  குறிக்கு பின் சேர்க்க வேண்டும்.

அதாவது 

MsgBox "GOOD MORNING -" _
& vbNewLine & "Now i am going to type table no." & i

என்று இருக்கவேண்டும்.  மேலே காணப்படும் வரிகளில் முதல் வரியில் கடைசியில் _ எழுதப்பட்டுள்ளது. ஒரு வரியில் ஒரு statement ஐ (நிரலின் ஒரு வரியை ) முடிக்கமுடியாமல் அடுத்த வரியிலும் தொடர்ந்தால் முதல் வரியின் கடைசியில் _ (underscore ) தட்டச்சு செய்யவேண்டும். (தொடர்கிறது என்று பொருள்)




தொடரும்...........

Monday, 14 May 2018

வயதைக் கண்டுபிடிக்க ஒரு மேக்ரோ





ஒருவருடைய வயதைக் கண்டுபிடிக்க எக்செல்லில் இருக்கின்ற DATEDIF() என்கின்ற செயலியை எப்படி உபயோகிப்பது என்று DATE FUNCTIONS - 2 என்ற அத்தியாயத்தில் பார்த்தோம்.  ஒரு மேக்ரோவை எப்படி எழுதுவது மற்றும் எப்படி நகலெடுத்து என்பதும்  MACRO-1 மற்றும் MACRO-2 என்ற அத்தியாயங்களில் கூறியுள்ளேன்.  கீழே வயதைக் கண்டுபிடிக்க ஒரு மேக்ரோவை எழுதியுள்ளேன்.  பயனடையவும்.  ஒரு செல்லில் பிறந்த தேதியை தட்டச்சு செய்து பின்பு அதற்க்கு வலது புறத்தில் அடுத்த செல்லில் வைத்து மேக்ரோவை ரன் செய்யவும்.  

SUB AGE ()
   ActiveCell.Select
    ActiveCell.FormulaR1C1 = _
        "=DATEDIF(RC[-1],TODAY(),""y"") & ""Years, "" & DATEDIF(RC[-1],TODAY(),""ym"") & ""Months"""

END SUB 

எழுத்துப்பிழை இல்லாமல் தட்டச்சு செய்யவும்.


Friday, 11 May 2018

DATE FUNCTIONS - 3 HOUR, MINUTE, SECONDS, WEEKDAY, WEEKNUM, NETWORKDAYS AND INT




     
INT()



இந்த செயலி ஒரு மதிப்பில்  உள்ள முழு எண்ணை மட்டும் கண்டுபிடிக்க பயன்படுகிறது.  அதாவது அந்த மதிப்பில் உள்ள தசம எண்களை கணக்கில் எடுத்துக்கொள்ளாது.


INT() ன் பயன்பாட்டிற்கு மற்றுமொரு உதாரணத்தையும் பார்ப்போமா ?

சாதாரணமாக ஒரு மதிப்பின் தசம எண்கள் .50 ஆகவோ அதற்கு மேலே போனால் அதை முழு எண்ணாக மாற்ற Round() என்ற செயலியை பயன்படுத்துகிறோம். (விவரம் - MS EXCEL - ROUND, ROUNDUP, ROUNDDOWN, CEILING, FLOOR,  IF, LARGE AND SMALL FUNCTIONS -13/6/2017 ).

எனக்கு 25 பைசாவிற்கு குறைவாக இருந்தால் 25 பைசாவை தவிர்த்தும், 25 பைசாவோ அல்லது அதற்கு மேலே போனாலோ அடுத்த ரூபாய்க்கு மாறவேண்டும் . இதற்கு  Round() செயலியை பயன்படுத்த முடியுமா?    முடியாது.. ஆகவே Round() செயலிக்கு பதிலாக If() உடன்  Int() பயன்படுத்தலாம் 
   








A1ல் 15.24 ம் A2ல் 15.25 ம்  இருப்பதாக கொள்வோம் .
=Int(a1) மற்றும் =Int(b1) இரண்டுமே 15 தான்.   ஆனாலும் 
 IF() உடன் INT() சேர்த்து 
=IF(A1-INT(A1)<0.25,INT(A1),INT(A1)+1) என்று உபயோகித்தால்  
விடை a1 க்கு 15 ம் A2 க்கு  16 ம் வரும்.


HOUR()

இந்த செயலி  NOW() என்ற செயலியிலிருந்து மணியை மட்டும் பிரித்தெடுக்க உபயோகமாகிறது

SYNTAX:  HOUR(SEIRAL NO.)




















NOW() என்ற செயலி ஒரு செல்லில் தேதியையும் நேரத்தையும் காண்பிக்கும்.


ஒரு செல்லில் நேரத்தை பதிவு செய்ய வேண்டுமென்றால் மணிக்கும் நிமிடத்திற்கும் இடையில் அரைப்புள்ளி (:) இடவேண்டும்


MINUTE()

இந்த செயலி  NOW() என்ற செயலியிலிருந்து நிமிடங்களை  மட்டும் பிரித்தெடுக்க உபயோகமாகிறது

SYNTAX:  MINUTE(SEIRAL NO.)




SECONDS()

இந்த செயலி  NOW() என்ற செயலியிலிருந்து வினாடிகளை   மட்டும் பிரித்தெடுக்க உபயோகமாகிறது.


SYNTAX:  SECONDS(SEIRAL NO.)



WEEKDAY()

இந்த செயலி  ஒரு தேதி தகவலிலிருந்து இந்த தேதி இந்த வாரத்தின் எத்தனையாவது நாள் என்று கண்டுபிடிக்க  உபயோகமாகிறது.

SYNTAX : WEEKDAY(DATE)




WEEKDAY எழுத்தில் வேண்டுமென்றால் =TEXT(WEEKDAY(DATE),"DDDD") என்று தட்டச்சு செய்து என்டர் கீயை அழுத்தவேண்டும்



WEEKNUM()


இந்த செயலி  ஒரு தேதி தகவலிலிருந்து இந்த தேதி இந்த வருடத்தின்  எத்தனையாவது வாரம் என்று கண்டுபிடிக்க  உபயோகமாகிறது.

SYNTAX :

WEEKNUM(serial_number)


NETWORKDAYS()
SYNTAX:  NETWORKDAYS( start_date, end_date, [holidays] )

இந்த செயலி இரண்டு தேதிகளுக்கிடையேயுள்ள மொத்த முழு வேலைநாட்கள் எவ்வளவு என்று சொல்லும்.  சனி, ஞாயிறு இரண்டு நாட்களும் விடுமுறை நாட்களாக கருதும்.   இதைத் தவிர வேறு ஏதெனும் விடுமுறை நாட்கள் இருந்தாலும் குறிப்பிடலாம். இல்லையென்றாலும் பரவாயில்லை.