এক্সেল: একটি স্ট্রিংয়ে শেষ অক্ষর / স্ট্রিং ম্যাচ


187

বেস ফাংশনগুলি ব্যবহার করে কোনও স্ট্রিংয়ে শেষ অক্ষর / স্ট্রিং ম্যাচটি সনাক্ত করার কোনও কার্যকর উপায় আছে? অর্থাত না শেষ অক্ষর / পংক্তি এর স্ট্রিং, কিন্তু একটি অক্ষর / পংক্তি শেষ সংঘটন অবস্থান মধ্যে একটি স্ট্রিং। Searchএবং findউভয়ই বাম থেকে ডানে কাজ করে তাই লম্বা পুনরাবৃত্ত আলগোরিদিম ছাড়া কীভাবে প্রয়োগ করব তা আমি ভাবতে পারি না। এবং এই সমাধানটি এখন অপ্রচলিত বলে মনে হচ্ছে।


3
কারণ আমি উদাহরণ হিসাবে "পিরিয়ডের সর্বশেষ উদাহরণের অবস্থান চাই।" "one.two.three.four" স্ট্রিং
ভূগোলিক


1
আমি এটি অন্য দৃষ্টিকোণ থেকে দেখুন বলার অর্থ, এর অর্থ অন্যান্য ব্যক্তিরাও আপনার প্রশ্নে কী বোঝাতে চেয়েছিলেন তাও বুঝতে পারেন নি এবং তাই এই পরামর্শটি সঠিক সমাধান হ'ল ... এমনকি আপনার নির্বাচিত উত্তরটি "আমার মনে হয় আমি দিয়েই শুরু হয়েছিল" আপনি যা বলতে চাইছেন তা পান "... একটি সমালোচনা নয়, বরং লোকেরা আরও সহজে উত্তর দেওয়ার জন্য আপনার প্রশ্নগুলিকে আরও সহজ করে তোলার লক্ষ্য করার জন্য একটি অনুরোধ।
জন বুস্টোস

আমার প্রশ্নের উদাহরণটি যুক্ত করা উচিত ছিল, তবে আমি মনে করি একটি স্ট্রিংয়ের চূড়ান্ত চরিত্র সম্পর্কে কোয়েরি থেকে এটির মধ্যে পার্থক্য করার পক্ষে যথেষ্ট ছিল: searchএবং findউভয় ক্যোয়ারী স্ট্রিং সামগ্রী , 'ম্যাচ' একটি স্ট্যান্ডার্ড শব্দ, যুক্ত সংযুক্ত উদাহরণ।
ভূগোলিক

উত্তর:


1

এক্সেলের নতুন সংস্করণগুলির সাথে নতুন ফাংশন এবং এইভাবে নতুন পদ্ধতি আসে। যদিও এটি পুরানো সংস্করণে প্রতিরূপযোগ্য (এখনও আমি এটি আগে দেখিনি), যখন কারও কাছে এক্সেল O365 থাকে তবে এটি ব্যবহার করতে পারে:

=MATCH(2,1/(MID(A1,SEQUENCE(LEN(A1)),1)="Y"))

এটি (ওভারল্যাপিং) সাবস্ট্রিংগুলির শেষ অবস্থানটি পুনরুদ্ধার করতেও ব্যবহার করা যেতে পারে:

=MATCH(2,1/(MID(A1,SEQUENCE(LEN(A1)),2)="YY"))

| Value  | Pattern | Formula                                        | Position |
|--------|---------|------------------------------------------------|----------|
| XYYZ   | Y       | =MATCH(2,1/(MID(A2,SEQUENCE(LEN(A2)),1)="Y"))  | 3        |
| XYYYZ  | YY      | =MATCH(2,1/(MID(A3,SEQUENCE(LEN(A3)),2)="YY")) | 3        |
| XYYYYZ | YY      | =MATCH(2,1/(MID(A4,SEQUENCE(LEN(A4)),2)="YY")) | 4        |

যদিও এই উভয়ই আমাদের আর স্বেচ্ছাসেবী প্রতিস্থাপনের অক্ষর ব্যবহার করতে দেয় না এবং এটি ওভারল্যাপিং প্যাটার্নগুলিকে অনুমতি দেয়, "ডাউনসাইড" হ'ল একটি অ্যারের ব্যবহার।


দ্রষ্টব্য: আপনি পুরানো এক্সেল সংস্করণগুলিতে উভয়ের মাধ্যমে একই আচরণকে জোর করতে পারেন

=MATCH(2,1/(MID(A2,ROW(A1:INDEX(A:A,LEN(A2))),1)="Y"))

অন্তর্ভুক্ত ছেদটি থেকে মুক্তি পাওয়ার জন্য প্রবেশ করানো CtrlShiftEnterবা একটি ইনলাইন ব্যবহার করে INDEX:

=MATCH(2,INDEX(1/(MID(A2,ROW(A1:INDEX(A:A,LEN(A2))),1)="Y"),))

1
আমি এই উত্তরাধিকারী টিক এখন মনে করি, যদিও পূর্ণ ঐতিহাসিক সন্মান @ tigeravatar এর দীর্ঘদিনের সমাধান অন্তর্গত stackoverflow.com/a/18617720/1156245
geotheory

দ্রষ্টব্য: যদিও আমার পরামর্শ স্কেচি কোড-গল্ফে জিততে পারে, বড় পরিমাণে ব্যবহার করার সময় অ্যারে ব্যবহারের পরামর্শ সর্বদা দেওয়া হয় না। তবে এর অন্যান্য সুবিধা রয়েছে যা আমি স্পষ্ট করে উল্লেখ করার চেষ্টা করেছি। এটি @ টাইগারভাটারের উত্তরটিকে ঠিক আগের মতো প্রাসঙ্গিক করে তোলে!
জেভিডিভি

345

আমি মনে করি আপনি যা বলতে চাইছেন তা পেয়েছি। আসুন উদাহরণস্বরূপ বলি যে আপনি নীচের স্ট্রিংয়ের মধ্যে ডান-সর্বাধিক চান which যা সেল এ 1 তে সঞ্চিত রয়েছে:

ড্রাইভ: \ ফোল্ডার \ SubFolder \ Filename.ext

শেষ \ এর অবস্থান পেতে, আপনি এই সূত্রটি ব্যবহার করবেন:

=FIND("@",SUBSTITUTE(A1,"\","@",(LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))/LEN("\")))

এটি আমাদের জানিয়েছে যে ডান দিকের সর্বাধিক \ 24 অক্ষরে রয়েছে "এটি" @ "অনুসন্ধান করে এবং একটি" @ "দিয়ে সর্বশেষ" \ "প্রতিস্থাপন করে এটি করে। এটি ব্যবহার করে শেষটি নির্ধারণ করে

(len(string)-len(substitute(string, substring, "")))\len(substring)

এই দৃশ্যে, সাবস্ট্রিংটি কেবল "\" যার দৈর্ঘ্য 1, যাতে আপনি শেষে বিভাজনটি ছেড়ে দিতে পারেন এবং কেবল ব্যবহার করতে পারেন:

=FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))

ফোল্ডারের পাথ পেতে এখন আমরা এটি ব্যবহার করতে পারি:

=LEFT(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))))

পিছনে ছাড়াই এখানে ফোল্ডারের পথ \

=LEFT(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))-1)

এবং কেবল ফাইলের নাম পেতে:

=MID(A1,FIND("@",SUBSTITUTE(A1,"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))

তবে, একটি নির্দিষ্ট চরিত্রের শেষ উদাহরণের ডানদিকে সবকিছু পাওয়ার একটি বিকল্প সংস্করণ এখানে। সুতরাং আমাদের একই উদাহরণ ব্যবহার করে এটি ফাইলের নামও ফিরে আসবে:

=TRIM(RIGHT(SUBSTITUTE(A1,"\",REPT(" ",LEN(A1))),LEN(A1)))

24
মাথা কাটানো; মাথা স্পিনিং; মাথা কাটানো; "ঠিক আছে - এটি না বুঝে এটি ব্যবহার করতে চাই না, তাই ... আহহহহ, ঠিক আছে, উহহহ ... অপেক্ষা কর? হুহহ! আসলেই বুদ্ধিমান! আমি আত্মবিশ্বাস অনুভব করি যে আমি কয়েক ঘন্টার মধ্যে এমনটি ভাবিনি! দিন বা সপ্তাহ না হলে! " - +1, দুঃখের বিষয়, কারণ +5 বা +10 আমার নিজের পক্ষে করা শক্ত --- যদি আপনি-আটকে থাকেন-ব্যাখ্যা: (উদাহরণ ব্যবহার করে) SUBSTITUTEসমস্ত (3) উদাহরণস্বরূপ \কিছু নয় (স্ট্রিংয়ের দৈর্ঘ্য সংক্ষিপ্ত করুন ) 3) -> যে \(3 য়) সর্বশেষটি; এটি অনন্য কিছু এবং FINDসেই অনন্য চরিত্রের অবস্থানের সাথে প্রতিস্থাপন করুন ... দুর্দান্ত ... ধন্যবাদ!
কোড জকি

7
এটা চালাক। কেবল সচেতন হওয়া দরকার যে ঘরে ইতিমধ্যে '@' থাকে না অন্যথায় আপনাকে অন্য কিছুর সাথে সাবধান করতে হবে। ব্যবহার করে আপনি পরীক্ষা করতে পারবেন =ISNUMBER(SEARCH("@",A1)), যেমন @ gwin003 দ্বারা প্রস্তাবিত
ভূগোলিক

3
শেষ ঘটনাটির ডানদিকে সবকিছু বের করার জন্য আপনার সর্বশেষ বিকল্পটি অনেক প্রশংসাযোগ্য কারণ বেশিরভাগ সময় আমি "স্ট্রিং ওয়াইয়ের মধ্যে স্ট্রিং x এর শেষ উপস্থিতি" খুঁজছিলাম, আমার শেষ লক্ষ্যটি সত্যই সব কিছু পাওয়ার জন্য ছিল যে শেষ ঘটনা ডান।
এসএসিল্ক

1
কেন 99? আপনি কি ধরে নিচ্ছেন যে এই বিভিন্ন স্ট্রিংয়ের দৈর্ঘ্য 99 এর চেয়ে কম? দেখুন এই উত্তর এবং এই উত্তরটি যা কোন ধৃষ্টতা ভুলবেন না।
জিন-ফ্রানসোয়া কার্বেট

2
"@" এর পরিবর্তে, আমি CHAR (9) (ট্যাব চরিত্র) ব্যবহার করেছি, যেহেতু আমার ডেটা মূলত ট্যাব-বিস্মৃত ফাইল থেকে আসে এবং আমি নিশ্চিত যে এটি আমার ডেটাতে থাকবে না be
জোশিয়ার যোদার

28

আপনার সূত্রে একটি কাস্টম ফাংশন তৈরি এবং এটি ব্যবহার সম্পর্কে কীভাবে? ভিবিএর একটি অন্তর্নির্মিত ফাংশন রয়েছে, InStrRevযা আপনি যা খুঁজছেন ঠিক তা করে।

এটি একটি নতুন মডিউলে রাখুন:

Function RSearch(str As String, find As String)
    RSearch = InStrRev(str, find)
End Function

এবং আপনার ফাংশনটি দেখতে এইরকম হবে (ধরে নিলে মূল স্ট্রিং বি 1 তে রয়েছে):

=LEFT(B1,RSearch(B1,"\"))

2
এটি একটি খুব সরল কিন্তু কার্যক্ষম সমাধান। আপনি যদি আপনার প্রকল্পে কিছু ভিবিএ ব্যবহার করতে পারেন তবে এটি ব্যবহার করুন।
প্যাট্রিক হফম্যান

7

টাইগ্রাভ্যাটর এবং জিন-ফ্রেঞ্চোইস কর্পেট "\" চরিত্রের শেষ উপস্থিতির ডানদিকে স্ট্রিং তৈরি করতে এই সূত্রটি ব্যবহার করার পরামর্শ দিয়েছেন

=TRIM(RIGHT(SUBSTITUTE(A1,"\",REPT(" ",LEN(A1))),LEN(A1)))

বিভাজক হিসাবে ব্যবহৃত চরিত্রটি যদি স্থান, "" হয় তবে সূত্রটি এতে পরিবর্তন করতে হবে:

=SUBSTITUTE(RIGHT(SUBSTITUTE(A1," ",REPT("{",LEN(A1))),LEN(A1)),"{","")

উল্লেখ করার প্রয়োজন নেই, "{" অক্ষরটি এমন কোনও অক্ষরের সাথে প্রতিস্থাপন করা যেতে পারে যা প্রক্রিয়ায় পাঠ্যটিতে "সাধারণত" না ঘটে।


আমি এই সমাধানটি আরও মার্জিত এবং বোধগম্য মনে করি। এছাড়াও যদি আপনি লেন (এ 1) কে একটি সংখ্যার দ্বারা গুণিত করেন তবে আপনি শেষ সংখ্যায় নবম পেতে পারেন, তবে আপনার মূল স্ট্রিংয়ে ফাঁকা স্থান না থাকে (যা আমার ক্ষেত্রে ছিল)
জ্লাতিন জ্লেটেভ

4

সবেমাত্র এই সমাধানটি নিয়ে এসেছিল, কোনও ভিবিএর প্রয়োজন নেই;

আমার উদাহরণে "_" এর শেষ ঘটনাটি সন্ধান করুন;

=IFERROR(FIND(CHAR(1);SUBSTITUTE(A1;"_";CHAR(1);LEN(A1)-LEN(SUBSTITUTE(A1;"_";"")));0)

ভিতরে বাইরে ব্যাখ্যা করা;

SUBSTITUTE(A1;"_";"") => replace "_" by spaces
LEN( *above* ) => count the chars
LEN(A1)- *above*  => indicates amount of chars replaced (= occurrences of "_")
SUBSTITUTE(A1;"_";CHAR(1); *above* ) => replace the Nth occurence of "_" by CHAR(1) (Nth = amount of chars replaced = the last one)
FIND(CHAR(1); *above* ) => Find the CHAR(1), being the last (replaced) occurance of "_" in our case
IFERROR( *above* ;"0") => in case no chars were found, return "0"

আশা করি এটি সহায়ক ছিল।


3

স্ট্রিংয়ের মধ্যে একটি স্ট্রিংয়ের শেষ উদাহরণটি খুঁজে পেতে আপনি তৈরি করা এই ফাংশনটি ব্যবহার করতে পারেন।

নিশ্চিতভাবে গৃহীত এক্সেল সূত্রটি কাজ করে তবে এটি পড়া এবং ব্যবহার করা খুব বেশি কঠিন। এক পর্যায়ে আপনাকে ছোট অংশগুলিতে ছড়িয়ে দিতে হবে যাতে এটি রক্ষণাবেক্ষণযোগ্য হয়। নীচে আমার ফাংশনটি পঠনযোগ্য, তবে এটি অপ্রাসঙ্গিক কারণ আপনি নামকরণকৃত পরামিতিগুলি ব্যবহার করে কোনও সূত্রে এটি কল করেন। এটি সহজ ব্যবহার করে তোলে।

Public Function FindLastCharOccurence(fromText As String, searchChar As String) As Integer
Dim lastOccur As Integer
lastOccur = -1
Dim i As Integer
i = 0
For i = Len(fromText) To 1 Step -1
    If Mid(fromText, i, 1) = searchChar Then
        lastOccur = i
        Exit For
    End If
Next i

FindLastCharOccurence = lastOccur
End Function

আমি এটি এর মতো ব্যবহার করি:

=RIGHT(A2, LEN(A2) - FindLastCharOccurence(A2, "\"))

2

@ এসিল্কের করা মন্তব্যের একটি অংশ বিবেচনা করে আমার শেষ লক্ষ্যটি হ'ল এই শেষ ঘটনার ডানদিকে সবকিছু পাওয়া খুব সহজ সূত্রের সাথে একটি বিকল্প পদ্ধতির Aস্ট্রিংগুলির একটি কলাম (বলুন ) অনুলিপি করা এবং অনুলিপি (বলুন) কলামবিবি) ফাইন্ড এন্ড রিপ্লেস প্রয়োগ করুন। উদাহরণস্বরূপ উদাহরণ গ্রহণ:Drive:\Folder\SubFolder\Filename.ext

কি খুঁজে

এটি Filename.extযে চরিত্রটি বেছে নেওয়া হয়েছে (এখানে \) যা কখনও কখনও উদ্দেশ্য হয় এবং সর্বশেষে এইরকম অক্ষরের অবস্থান একটি সংক্ষিপ্ত সূত্র সহ সন্ধানের জন্য শেষ উদাহরণের পরে যা রয়েছে তা এখানে ফিরে আসে :

=FIND(B1,A1)-1

1

আমি পার্টিতে কিছুটা দেরি করেছি, তবে সম্ভবত এটি সাহায্য করতে পারে। প্রশ্নের লিঙ্কটিতে একটি অনুরূপ সূত্র ছিল তবে আমার ত্রুটি থেকে মুক্তি পেতে আইএফ () বিবৃতিটি ব্যবহার করে।

আপনি যদি সিটিআরএল + শিফট + এন্টার সম্পর্কে ভীত না হন তবে আপনি অ্যারের সূত্রটি দিয়ে বেশ ভাল করতে পারেন।

স্ট্রিং (সেল এ 1 এ): "one.two.three.four"

সূত্র:

{=MAX(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)))}  use Ctrl+Shift+Enter

ফলাফল: 14

প্রথমত,

ROW($1:$99)

1 থেকে 99 পূর্ণসংখ্যার একটি বিন্যাস দেখায়: {1,2,3,4,...,98,99}

পরবর্তী,

MID(A1,ROW($1:$99),1)

লক্ষ্য স্ট্রিংয়ে পাওয়া 1-দৈর্ঘ্যের স্ট্রিংগুলির একটি অ্যারে প্রদান করে, তারপরে লক্ষ্যযুক্ত স্ট্রিংয়ের দৈর্ঘ্য পৌঁছানোর পরে ফাঁকা স্ট্রিংগুলি প্রদান করে: {"o","n","e",".",..."u","r","","",""...}

পরবর্তী,

IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99))

অ্যারের প্রতিটি আইটেমকে স্ট্রিংয়ের সাথে তুলনা করে ""। এবং অক্ষরটির সূচকটি স্ট্রিংয়ে দেয় বা মিথ্যা:{FALSE,FALSE,FALSE,4,FALSE,FALSE,FALSE,8,FALSE,FALSE,FALSE,FALSE,FALSE,14,FALSE,FALSE.....}

সর্বশেষ,

=MAX(IF(MID(I16,ROW($1:$99),1)=".",ROW($1:$99)))

অ্যারের সর্বাধিক মান প্রদান করে: 14

এই সূত্রের সুবিধাগুলি হ'ল এটি সংক্ষিপ্ত, তুলনামূলকভাবে সহজ বোঝার জন্য এবং কোনও অনন্য অক্ষরের প্রয়োজন নেই।

অসুবিধাগুলি হ'ল সিটিআরএল + শিফট + এন্টার এবং স্ট্রিং দৈর্ঘ্যের সীমাবদ্ধতার প্রয়োজনীয় ব্যবহার। এটি নীচে দেখানো একটি প্রকরণের সাথে চারপাশে কাজ করা যেতে পারে, তবে সেই প্রকরণটি অফসেট () ফাংশনটি ব্যবহার করে যা একটি উদ্বায়ী (পড়ুন: ধীর) ফাংশন।

এই সূত্রটির গতি বনাম অন্যগুলি কী তা নিশ্চিত নয়।

প্রকারভেদ:

=MAX((MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1)=".")*ROW(OFFSET($A$1,,,LEN(A1)))) works the same way, but you don't have to worry about the length of the string

=SMALL(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)),2) determines the 2nd occurrence of the match

=LARGE(IF(MID(A1,ROW($1:$99),1)=".",ROW($1:$99)),2) determines the 2nd-to-last occurrence of the match

=MAX(IF(MID(I16,ROW($1:$99),2)=".t",ROW($1:$99))) matches a 2-character string **Make sure you change the last argument of the MID() function to the number of characters in the string you wish to match!



0

পার্টিতে খুব দেরীতে, তবে একটি সাধারণ সমাধান একটি কাস্টম ফাংশন তৈরি করতে ভিবিএ ব্যবহার করছে using

ওয়ার্কবুক, ওয়ার্কশিট বা কোনও ভিবিএ মডিউলটিতে ভিবিএতে ফাংশন যুক্ত করুন

Function LastSegment(S, C)
    LastSegment = Right(S, Len(S) - InStrRev(S, C))
End Function

তারপরে সেল সূত্র

=lastsegment(B1,"/")

একটি ঘরে এবং সেল বি 1-তে অনুসন্ধান করা স্ট্রিংটি কোষ বি 1 থেকে শেষ "/" টেক্সটটি অনুসরণ করে সেলকে জনপ্রিয় করবে। দৈর্ঘ্যের সীমা নেই, কোনও অস্পষ্ট সূত্র নেই। কেবলমাত্র ডাউনসাইডই আমি ভাবতে পারি ম্যাক্রো-সক্ষম ওয়ার্কবুকের প্রয়োজন।

যে কোনও ব্যবহারকারীর ভিবিএ ফাংশনটি কোনও বিল্টিন এক্সেল ফাংশনের পরামিতি সহ একটি সেল সূত্রে কোনও মান ফেরত দেওয়ার জন্য এভাবে বলা যেতে পারে।

আপনি যদি ফাংশনটি ভারীভাবে ব্যবহার করতে যাচ্ছেন তবে আপনি যখন অক্ষরটি স্ট্রিংয়ের মধ্যে নেই তখন আপনি কেসটি পরীক্ষা করতে চান তবে স্ট্রিং ফাঁকা থাকে ইত্যাদি etc.


0

কোষ A1 = find/the/position/of/the last slash

এটি করার সহজ উপায় হ'ল পাঠ্যটি বিপরীত করুন এবং তারপরে সাধারণ হিসাবে প্রথম স্ল্যাশ সন্ধান করুন। এখন আপনি এই সংখ্যাটি সম্পূর্ণ পাঠ্য বিয়োগের দৈর্ঘ্য পেতে পারেন।

তাই ভালো:

=LEN(A1)-FIND("/",REVERSETEXT(A1),1)+1

এটি 21 ফেরত দেয়, শেষের অবস্থান /


REVERSETEXTকোনও স্ট্যান্ডার্ড এক্সেল সূত্র নয়
d219
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.