কারও কাছে কি কোনও এক্সেল ভিবিএ ফাংশন রয়েছে যা কোনও নম্বর থেকে কলাম লেটার (গুলি) ফিরিয়ে দিতে পারে?
উদাহরণস্বরূপ, 100 প্রবেশ করে ফিরে আসা উচিত CV
।
কারও কাছে কি কোনও এক্সেল ভিবিএ ফাংশন রয়েছে যা কোনও নম্বর থেকে কলাম লেটার (গুলি) ফিরিয়ে দিতে পারে?
উদাহরণস্বরূপ, 100 প্রবেশ করে ফিরে আসা উচিত CV
।
উত্তর:
এই ফাংশন প্রদত্ত কলাম সংখ্যার জন্য কলাম পত্র প্রদান করে।
Function Col_Letter(lngCol As Long) As String
Dim vArr
vArr = Split(Cells(1, lngCol).Address(True, False), "$")
Col_Letter = vArr(0)
End Function
100 কলামের জন্য পরীক্ষার কোড
Sub Test()
MsgBox Col_Letter(100)
End Sub
(0)
যদি নিজের পরিবর্তনশীল ঘোষণা এবং কোডের অতিরিক্ত লাইন সংরক্ষণ করতে চান তবে আপনি স্প্লিট কমান্ডের শেষে যুক্ত করতে পারেন। উদাহরণস্বরূপCol_letter = Split(Cells(1, lngCol).Address(True, False), "$")(0)
v = Split(Cells(1, lngCol).Address, "$")(1)
.Cells
এটি এক্সেলের একটি সম্পত্তি, যার অর্থ আপনার ব্যবহার করা দরকার <excel_object>.Cells()
। অন্যথায়, আপনি একটি প্রকারের অমিল ত্রুটি পাবেন।
যদি আপনি বরং কোনও ব্যাপ্তি অবজেক্টটি ব্যবহার না করেন:
Function ColumnLetter(ColumnNumber As Long) As String
Dim n As Long
Dim c As Byte
Dim s As String
n = ColumnNumber
Do
c = ((n - 1) Mod 26)
s = Chr(c + 65) & s
n = (n - c) \ 26
Loop While n > 0
ColumnLetter = s
End Function
IF ColumnNumber <= Columns.Count
সংস্করণগুলির আশেপাশে অনুমানগুলি এড়ানো ভাল be
আমার পক্ষে কাজ করে এমন কিছু হ'ল:
Cells(Row,Column).Address
এটি আপনার জন্য $ AE $ 1 ফর্ম্যাট রেফারেন্সটি ফিরিয়ে দেবে।
MsgBox Columns( 9347 ).Address
আয় ।কেবলমাত্র কলাম লেটার (গুলি) ফিরিয়ে দিতে :Split((Columns(
Column Index
).Address(,0)),":")(0)
MsgBox Split((Columns( 2734 ).Address(,0)),":")(0)
আয় ।
এটি করার আরও একটি উপায়। ব্রেটডজের উত্তর আমাকে এটি ভাবতে বাধ্য করেছে, তবে আপনি যদি এই পদ্ধতিটি ব্যবহার করেন তবে আপনাকে কোনও বৈকল্পিক অ্যারে ব্যবহার করতে হবে না, আপনি সরাসরি একটি স্ট্রিংয়ে যেতে পারেন।
ColLtr = Cells(1, ColNum).Address(True, False)
ColLtr = Replace(ColLtr, "$1", "")
বা এটি এর সাথে আরও কিছুটা কমপ্যাক্ট তৈরি করতে পারে
ColLtr = Replace(Cells(1, ColNum).Address(True, False), "$1", "")
লক্ষ্য করুন এটি আপনার ঘরগুলির বস্তুতে সারি 1 উল্লেখ করার উপর নির্ভর করে।
এবং পুনরাবৃত্তি ব্যবহার করে একটি সমাধান:
Function ColumnNumberToLetter(iCol As Long) As String
Dim lAlpha As Long
Dim lRemainder As Long
If iCol <= 26 Then
ColumnNumberToLetter = Chr(iCol + 64)
Else
lRemainder = iCol Mod 26
lAlpha = Int(iCol / 26)
If lRemainder = 0 Then
lRemainder = 26
lAlpha = lAlpha - 1
End If
ColumnNumberToLetter = ColumnNumberToLetter(lAlpha) & Chr(lRemainder + 64)
End If
End Function
এটি একটি সূত্র ব্যবহারের মাধ্যমে উপলব্ধ:
=SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")
এবং অনুরোধ হিসাবে একটি ভিবিএ ফাংশন হিসাবেও লেখা যেতে পারে:
Function ColName(colNum As Integer) As String
ColName = Split(Worksheets(1).Cells(1, colNum).Address, "$")(1)
End Function
এটি লুপের পরিবর্তে পুনরাবৃত্তি ব্যবহার করে রবার্টসড-এর উত্তরের ( জান উইজিনিঙ্কেক্সের এক লাইন সমাধানের স্বাদ সহ ) এক সংস্করণ ।
Public Function ColumnLetter(Column As Integer) As String
If Column < 1 Then Exit Function
ColumnLetter = ColumnLetter(Int((Column - 1) / 26)) & Chr(((Column - 1) Mod 26) + Asc("A"))
End Function
আমি নিম্নলিখিত ইনপুটগুলির সাথে এটি পরীক্ষা করেছি:
1 => "A"
26 => "Z"
27 => "AA"
51 => "AY"
702 => "ZZ"
703 => "AAA"
-1 => ""
-234=> ""
রবার্টসডের কোডটি মার্জিত, তবুও এটি ভবিষ্যত-প্রমাণ তৈরি করতে, এন এর ঘোষণাকে দীর্ঘ টাইপ করুন
আপনি যদি ম্যাক্রোগুলি এড়ানোর জন্য কোনও সূত্র চান তবে এখানে এমন কিছু রয়েছে যা 702 সহ অন্তর্ভুক্ত কলাম পর্যন্ত কাজ করে
=IF(A1>26,CHAR(INT((A1-1)/26)+64),"")&CHAR(MOD(A1-1,26)+65)
যেখানে A1 হ'ল ঘরটি অক্ষরে রূপান্তরিত করার জন্য কলাম নম্বর রয়েছে containing
সর্বশেষ আপডেট : দয়া করে নীচের ফাংশনটি উপেক্ষা করুন, @ সুরসিনট্যাচরোয়েন আমাকে সতর্ক করতে পরিচালিত হয়েছিল যে এটি ভেঙে গেছে n = 53
।
যারা আগ্রহী তাদের জন্য এখানে নীচে অন্যান্য ভাঙা মান রয়েছে n = 200
:
আপডেট শেষ
নীচের ফাংশনটি মাইক্রোসফ্ট সরবরাহ করেছে:
Function ConvertToLetter(iCol As Integer) As String
Dim iAlpha As Integer
Dim iRemainder As Integer
iAlpha = Int(iCol / 27)
iRemainder = iCol - (iAlpha * 26)
If iAlpha > 0 Then
ConvertToLetter = Chr(iAlpha + 64)
End If
If iRemainder > 0 Then
ConvertToLetter = ConvertToLetter & Chr(iRemainder + 64)
End If
End Function
উত্স: এক্সেল কলাম নম্বরগুলিকে বর্ণানুক্রমিক অক্ষরে রূপান্তর করা যায় কীভাবে
প্রযোজ্য
Col_Letter(16384) = "XFD"
এটি উপরের @ ড্যামিয়েনফেনেলির উত্তরের উপর ভিত্তি করে একটি ফাংশন । যদি আপনি আমাকে থাম্বস আপ দেন, তাকেও থাম্বস আপ করুন! : P: P
Function outColLetterFromNumber(iCol as Integer) as String
sAddr = Cells(1, iCol).Address
aSplit = Split(sAddr, "$")
outColLetterFromNumber = aSplit(1)
End Function
এক্সেল শক্তি ব্যবহার করার জন্য খুব সহজ উপায় রয়েছে: Range.Cells.Address
সম্পত্তিটি এইভাবে ব্যবহার করুন :
strCol = Cells(1, lngRow).Address(xlRowRelative, xlColRelative)
এটি সারি 1 এ কাঙ্ক্ষিত কলামের ঠিকানা ফেরত দেবে 1
: এটি থেকে নিন :
strCol = Left(strCol, len(strCol) - 1)
মনে রাখবেন এটি এত দ্রুত এবং শক্তিশালী যে আপনি কলামের ঠিকানাগুলিও উপস্থিত থাকতে পারেন যা এমনকি উপস্থিত রয়েছে!
সম্পত্তি lngRow
ব্যবহার করে কাঙ্ক্ষিত কলাম নম্বর বিকল্প Selection.Column
!
এখানে একটি সাধারণ একটি লাইনার ব্যবহার করা যেতে পারে।
ColumnLetter = Mid(Cells(Row, LastColA).Address, 2, 1)
এটি কেবলমাত্র 1 টি অক্ষরের কলামের উপাধিতে কাজ করবে তবে সাধারণ ক্ষেত্রে এটি দুর্দান্ত। যদি আপনার এটির জন্য কেবলমাত্র 2 টি বর্ণচিহ্নের জন্য কাজ করার প্রয়োজন হয় তবে আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:
ColumnLetter = Mid(Cells(Row, LastColA).Address, 2, 2)
এক্স কলামে সারি এক্সে অবস্থিত সেল থাটগুলির জন্য আপনার এক কোড লাইনের ভিতরে যে কলামটি রয়েছে তা নির্বিশেষে এটি কাজ করবে:
Mid(Cells(X,Y).Address, 2, instr(2,Cells(X,Y).Address,"$")-2)
আপনার যদি অনন্য সংজ্ঞায়িত নাম "সেলনাম" সহ একটি ঘর থাকে:
Mid(Cells(1,val(range("Cellname").Column)).Address, 2, instr(2,Cells(1,val(range("Cellname").Column)).Address,"$")-2)
ব্রেটডডজ থেকে সমাধানটি চমত্কারভাবে কাজ করে, তবে আপনি যদি একই কারণে আমি যে কারণে একটি সম্ভাব্য সমাধান হিসাবে এসে পৌঁছে থাকেন তবে আমি ভেবেছিলাম যে আমি আমার বিকল্প সমাধানটি দেব offer
আমি যে সমস্যাটি করছিলাম তা ম্যাচ () ফাংশনের আউটপুটের ভিত্তিতে একটি নির্দিষ্ট কলামে স্ক্রোল করছিল। কলামের সংখ্যাটিকে তার কলাম লেটার সমান্তরালে রূপান্তরিত না করে আমি অস্থায়ীভাবে রেফারেন্স স্টাইলটি A1 থেকে R1C1 তে টগল করতে বেছে নিয়েছি। এই ভাবে আমি কোনও ভিবিএ ফাংশন নিয়ে কৌতুক না করে কেবল কলাম নম্বরটিতে স্ক্রোল করতে পারি। দুটি রেফারেন্স শৈলীর মধ্যে সহজেই টগল করতে, আপনি এই ভিবিএ কোডটি ব্যবহার করতে পারেন:
Sub toggle_reference_style()
If Application.ReferenceStyle = xlR1C1 Then
Application.ReferenceStyle = xlA1
Else
Application.ReferenceStyle = xlR1C1
End If
End Sub
Brettdj উত্তরে আরও বলা যায়, কলাম নম্বরটির ইনপুটটি alচ্ছিকভাবে করা এখানে। যদি কলাম নম্বর ইনপুট বাদ দেওয়া হয় তবে ফাংশনটি সেলটির কলামের চিঠিটি ফাংশনে কল করে। আমি জানি এটি নিছক ব্যবহার করেও অর্জন করা যেতে পারে ColumnLetter(COLUMN())
, তবে আমি ভেবেছিলাম এটি যদি চতুরতার সাথে বুঝতে পারে তবে এটি বেশ ভাল হবে।
Public Function ColumnLetter(Optional ColumnNumber As Long = 0) As String
If ColumnNumber = 0 Then
ColumnLetter = Split(Application.Caller.Address(True, False, xlA1), "$")(0)
Else
ColumnLetter = Split(Cells(1, ColumnNumber).Address(True, False, xlA1), "$")(0)
End If
End Function
এই ফাংশনটির বাণিজ্যটি হ'ল এটি IF
পরীক্ষার কারণে ব্রেটডজেজের উত্তরের তুলনায় খুব সামান্য ধীর হবে । তবে এটি অনুভূত হতে পারে যদি ফাংশনটি বারবার খুব বড় পরিমাণে ব্যবহৃত হয়।
এখানে একটি দেরী উত্তর, কেবল ব্যবহারের জন্য সরলতর পদ্ধতির জন্য Int()
এবং If
1-3 অক্ষরের কলামগুলির ক্ষেত্রে:
Function outColLetterFromNumber(i As Integer) As String
If i < 27 Then 'one-letter
col = Chr(64 + i)
ElseIf i < 677 Then 'two-letter
col = Chr(64 + Int(i / 26)) & Chr(64 + i - (Int(i / 26) * 26))
Else 'three-letter
col = Chr(64 + Int(i / 676)) & Chr(64 + Int(i - Int(i / 676) * 676) / 26)) & Chr(64 + i - (Int(i - Int(i / 676) * 676) / 26) * 26))
End If
outColLetterFromNumber = col
End Function
এই সূত্রটি একটি পরিসীমা (অর্থাত্, এ 1 ) এর উপর ভিত্তি করে কলামটি দেবে , যেখানে পরিসরটি একটি একক ঘর। যদি একটি বহু-কক্ষ পরিসর দেওয়া হয় তবে এটি শীর্ষ-বাম ঘরটি ফিরিয়ে দেবে। দ্রষ্টব্য, উভয় ঘর উল্লেখ অবশ্যই এক হতে হবে:
এমআইডি (সেল ("ঠিকানা", এ 1 )), 2, অনুসন্ধান ("$", সেল ("ঠিকানা", এ 1 ), 2) -2)
কিভাবে এটা কাজ করে:
সেল ("সম্পত্তি", "সীমা") ব্যবহৃত সম্পত্তির উপর নির্ভর করে ব্যাপ্তির একটি নির্দিষ্ট মান প্রদান করে। এই ক্ষেত্রে সেল ঠিকানা। ঠিকানার বৈশিষ্ট্যটি একটি মান $ [কল] $ [সারি], অর্থাৎ A1 -> $ এ $ 1 প্রদান করে। এমআইডি ফাংশনটি $ চিহ্নগুলির মধ্যে কলাম মানকে বিশ্লেষণ করে।
Sub GiveAddress()
Dim Chara As String
Chara = ""
Dim Num As Integer
Dim ColNum As Long
ColNum = InputBox("Input the column number")
Do
If ColNum < 27 Then
Chara = Chr(ColNum + 64) & Chara
Exit Do
Else
Num = ColNum / 26
If (Num * 26) > ColNum Then Num = Num - 1
If (Num * 26) = ColNum Then Num = ((ColNum - 1) / 26) - 1
Chara = Chr((ColNum - (26 * Num)) + 64) & Chara
ColNum = Num
End If
Loop
MsgBox "Address is '" & Chara & "'."
End Sub
সুতরাং আমি এখানে পার্টিতে দেরি করছি, তবে আমি অন্য উত্তরটি অবদান রাখতে চাই যা অন্য কেউ এখনও সম্বোধন করেনি যাতে এতে অ্যারে জড়িত না। আপনি সাধারণ স্ট্রিং ম্যানিপুলেশন দিয়ে এটি করতে পারেন।
Function ColLetter(Col_Index As Long) As String
Dim ColumnLetter As String
'Prevent errors; if you get back a number when expecting a letter,
' you know you did something wrong.
If Col_Index <= 0 Or Col_Index >= 16384 Then
ColLetter = 0
Exit Function
End If
ColumnLetter = ThisWorkbook.Sheets(1).Cells(1, Col_Index).Address 'Address in $A$1 format
ColumnLetter = Mid(ColumnLetter, 2, InStr(2, ColumnLetter, "$") - 2) 'Extracts just the letter
ColLetter = ColumnLetter
End Sub
আপনার ফর্ম্যাটে ইনপুট থাকার পরে $A$1
, Mid
ফাংশনটি ব্যবহার করুন , প্রথমটির জন্য অ্যাকাউন্টে অবস্থান 2 থেকে শুরু করুন $
, তারপরে আপনি দ্বিতীয়টি $
স্ট্রিংয়ের সাথে কোথায় ব্যবহার করবেন তা দেখতে পাবেন InStr
এবং তারপরে সেই শুরু অবস্থানের জন্য অ্যাকাউন্টে 2 বিয়োগ করুন।
এটি আপনাকে সম্ভাব্য কলামগুলির পুরো পরিসরের জন্য অভিযোজিত হওয়ার সুবিধা দেয়। অতএব, ColLetter(1)
"এ" ColLetter(16384)
ফিরিয়ে দেয় এবং "এক্সএফডি" ফিরিয়ে দেয়, এটি আমার এক্সেল সংস্করণের জন্য সর্বশেষ সম্ভাব্য কলাম।
কলাম নম্বর থেকে কলাম
লেটারটি নিম্নলিখিত পদক্ষেপগুলি দিয়ে সূত্র ব্যবহার করে উত্তোলন করা যায়
1. ADDRESS সূত্র ব্যবহার করে কলামের ঠিকানা গণনা করুন
2. এমআইডি এবং ফিন্ড ফাংশন ব্যবহার করে কলামের চিঠিটি বের করুন
উদাহরণ:
1. ঠিকানা (1000,1000,1)
ফলাফল ) সমস্ত $ 1000
2 । = এমআইডি (F15,2, FIND ("$", F15,2) -2)
ফলাফল সমস্ত as15ing এফ 15 এর ধাপ 1 এর ফলাফল রয়েছে
এক সাথে আমরা
এমআইডি লিখতে পারি (অ্যাড্রেস (1000,1000,1), 2, FIND ( "$", ADDRESS এর (1000,1000,1), 2) -2)
এটি কেবলমাত্র রেফিডিটের জন্যই ... শীঘ্রই সংস্করণে উপরের কোডটি উত্পন্নভাবে ব্যবহার করুন ... পড়তে এবং বুঝতে সহজ হয় / এটি পোজ ব্যবহার করে $
Private Sub RefEdit1_Change()
Me.Label1.Caption = NOtoLETTER(RefEdit1.Value) ' you may assign to a variable var=....'
End Sub
Function NOtoLETTER(REFedit)
Dim First As Long, Second As Long
First = InStr(REFedit, "$") 'first poz of $
Second = InStr(First + 1, REFedit, "$") 'second poz of $
NOtoLETTER = Mid(REFedit, First + 1, Second - First - 1) 'extract COLUMN LETTER
End Function
ক্যাপ এ 65 তাই:
MsgBox Chr(ActiveCell.Column + 64)
এতে পাওয়া গেছে: http://www.vbaexpress.com/forum/showthread.php?6103- সলভড-get-column- letter
কেবলমাত্র আসকি নাম্বারে রূপান্তর এবং চিঠিতে ফিরে রূপান্তর করতে সিআর () ব্যবহার করে কী হবে?
কল_লেটর = সিআর (নির্বাচন। কলাম +৯৯)
এখানে অন্য উপায়:
{
Sub find_test2()
alpha_col = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,W,Z"
MsgBox Split(alpha_col, ",")(ActiveCell.Column - 1)
End Sub
}