কোনও ঘরে বিশেষ অক্ষর সনাক্ত করার জন্য কি কোনও এক্সেল সূত্র রয়েছে?


13

আমাদের প্রায় 3500 টি নথি রয়েছে যার ব্র্যাকেট, কলোন, সেমিকোলন, কমা, ইত্যাদি বিশেষ অক্ষর অপসারণের জন্য ফাইলের নামগুলি ম্যানুয়ালি স্ক্রাব করা দরকার file

আমার কাছে একটি পাঠ্য ফাইল রয়েছে যা আমি এক্সেলে ফেলে দিয়েছি এবং আমি একটি কলাম তৈরি করার চেষ্টা করছি যা এতে বিশেষ অক্ষর অন্তর্ভুক্ত থাকলে সংশোধন করার জন্য ফাইলের নামটিকে পতাকাযুক্ত করে। সিউডোকোড সূত্র হবে

=IF (cellname contains [^a-zA-z_-0-9], then "1", else "0")

সারিটি ফ্ল্যাগ করতে যদি এতে এজেড, 0-9, - বা _ ব্যতীত অন্য কোনও অক্ষর থাকে তবে তা নির্বিশেষে।

কেউ কি আমার পক্ষে কাজ করতে পারে এমন কিছু জানেন? আমি ifদ্রুত এবং সহজ কিছু হলে কোড এবং বৃহত্তর বিবৃতিতে দ্বিধা বোধ করছি ।


এক্সেলে এই পাঠ্য প্রক্রিয়াজাতকরণ কাজটি করার কোনও বিশেষ কারণ আছে কি? এমনকি মাইক্রোসফ্ট অফিস সরঞ্জামগুলিতে নিজেকে সীমাবদ্ধ করা, এটি ওয়ার্ডে মোটামুটি সহজ অনুসন্ধান এবং প্রতিস্থাপন। দুটি কলাম, মূল ফাইল নাম এবং প্রক্রিয়াজাত ফাইলের নাম সহ সারণী।
এমপিজেড 0

এগুলি তৃতীয় পক্ষের সফ্টওয়্যার থেকে সূচক এন্ট্রি। এই সফ্টওয়্যারটি ফাইলনামগুলিকে আউটপুট করে যা কলোন, বন্ধনী, অ্যাম্পারস্যান্ড ইত্যাদি অন্তর্ভুক্ত করে, রূপান্তর প্রোগ্রামগুলিতে ব্যতিক্রম ঘটায়। রূপান্তর করার আগে আমাদের তৃতীয় পক্ষের সফ্টওয়্যারটিতে ডেটা স্ক্রাব করা দরকার; বিক্রেতা সেই কাজটি স্বয়ংক্রিয় করার জন্য একটি API সরবরাহ করে না। আমার কাছে একটি পাঠ্য ফাইলে ফাইলের নামের একটি তালিকা রয়েছে। আমি একটি ফাইল নামের বিশেষ অক্ষরের উপস্থিতির ভিত্তিতে একটি পতাকা তৈরি করতে এক্সেল ব্যবহার করছি am পাওয়ারশেল, সি # এবং জাভা সঠিক ফলাফলগুলি দেয় কারণ বিশেষ অক্ষরগুলি অপারেটর হিসাবে ব্যাখ্যা করা হয়।
dwwilson66

1
আমি উল্লেখ করতে চাই না আপনি সম্ভবত এটির জন্য ভুল সরঞ্জামটি ব্যবহার করছেন। উদাহরণস্বরূপ নোটপ্যাড ++ এ এটি বেশ দ্রুত করার কয়েকটি উপায় সম্পর্কে আমি ভাবতে পারি। এমনকি আপনি পরিণতিটি এক্সলে শেষ পর্যন্ত আমদানি করতে পারেন এবং 1s এবং 0 এর কলাম রেখেছিলেন।
ডেন

@ ডেন এনপি ++ সম্পর্কে জেনে রাখা ভাল। আমি এটি অন্বেষণ করতে হবে। আমার কাছে সরঞ্জামটি ইনস্টল করা আছে তবে এটির সাথে অনেক অভিজ্ঞতা নেই। টিপ জন্য ধন্যবাদ.
dwwilson66

উত্তর:


19

কোনো সংকেত নেই? তবে এটি এত সংক্ষিপ্ত এবং সহজ এবং সুন্দর এবং ... :(

আপনার RegEx প্যাটার্নটি [^A-Za-z0-9_-]সমস্ত কক্ষে সমস্ত বিশেষ অক্ষর অপসারণ করতে ব্যবহৃত হয়।

Sub RegExReplace()

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
    RegEx.Global = True

    RegEx.Pattern = "[^A-Za-z0-9_-]"
    For Each objCell In ActiveSheet.UsedRange.Cells
        objCell.Value = RegEx.Replace(objCell.Value, "")
    Next

End Sub

সম্পাদন করা

এটি আপনার মূল প্রশ্নের কাছে যেতে পারি ততই কাছাকাছি।

এখানে চিত্র বর্ণনা লিখুন

দ্বিতীয় কোডটি =RegExCheck(A1,"[^A-Za-z0-9_-]")2 টি যুক্তিযুক্ত ব্যবহারকারীর দ্বারা সংজ্ঞায়িত ফাংশন । প্রথমটি হল চেক করা সেল the দ্বিতীয়টি হল RegEx প্যাটার্ন যাচাই করা। যদি প্যাটার্নটি আপনার ঘরের কোনও অক্ষরের সাথে মেলে তবে এটি 1 অন্যথায় 0 এ ফিরে আসবে।

আপনি প্রথমে ALT+ সহ ভিবিএ সম্পাদক খুললে F11একটি নতুন মডিউল (!) Sertোকান এবং নীচের কোডটি পেস্ট করুন তবে আপনি এটি অন্য কোনও সাধারণ এক্সেল সূত্রের মতো ব্যবহার করতে পারেন ।

Function RegExCheck(objCell As Range, strPattern As String)

    Dim RegEx As Object
    Set RegEx = CreateObject("VBScript.RegExp")
    RegEx.Global = True
    RegEx.Pattern = strPattern

    If RegEx.Replace(objCell.Value, "") = objCell.Value Then
        RegExCheck = 0
    Else
        RegExCheck = 1
    End If

End Function

রেজিএক্স-এ নতুন ব্যবহারকারীদের জন্য আমি আপনার প্যাটার্নটি ব্যাখ্যা করব: [^A-Za-z0-9_-]

[] stands for a group of expressions
^ is a logical NOT
[^ ] Combine them to get a group of signs which should not be included
A-Z matches every character from A to Z (upper case)
a-z matches every character from a to z (lower case)
0-9 matches every digit
_ matches a _
- matches a - (This sign breaks your pattern if it's at the wrong position)

সমস্যাটি হ'ল আমি অক্ষরগুলিকে আবার পাল্টাতে চাই না, কেবল তাদের তালিকায় ফ্ল্যাগ করুন যাতে আমি এটিকে অন্য কারও হাতে তুলে দিতে পারি। ফাইলের নামগুলি তৃতীয় পক্ষের সফ্টওয়্যার দ্বারা তৈরি করা হয়েছে এবং সেই প্রোগ্রামের মধ্যে ম্যানুয়ালি পরিবর্তন করা দরকার ... আমাকে কেবল হ্যাঁ বা না ফ্ল্যাগ করা দরকার। বলা হচ্ছে, আমি মনে করি পরিবর্তে কলামটি পতাকাঙ্কিত করতে আমি আপনার প্রতিস্থাপন কোডটি সংশোধন করতে পারি। :)
dwwilson66

এটি বাস্তবায়নের জন্য ... এটি কেবলমাত্র একটি নতুন মডিউলে কাটা এবং আটকানো এবং সংরক্ষণ করার বিষয়, তাই না? বা আমার অন্য কিছু করা দরকার? সূত্রটি =RegExReplace(cell)স্বীকৃত নয় .... এবং আমি নতুন ফাংশন তৈরি করতে কিছুটা মরিচা।
dwwilson66

@ dwwilson66 আপডেট হয়েছে!
নিক্সদা

রেজিএক্সের ভিতরে হাইফেনের উপর জোর দিন (এটি ভুল অবস্থানে থাকলে এই চিহ্নটি আপনার প্যাটার্নটি ভেঙে দেয়)
রেড পিটর

7

নিকড্ডার কোডের অনুরূপ কিছু ব্যবহার করে, এখানে একটি ব্যবহারকারীর সংজ্ঞায়িত ফাংশন রয়েছে যা ঘরে বিশেষ অক্ষর থাকলে 1টি ফিরে আসবে।

Public Function IsSpecial(s As String) As Long
    Dim L As Long, LL As Long
    Dim sCh As String
    IsSpecial = 0
    For L = 1 To Len(s)
        sCh = Mid(s, L, 1)
        If sCh Like "[0-9a-zA-Z]" Or sCh = "_" Then
        Else
            IsSpecial = 1
            Exit Function
        End If
    Next L
End Function

ব্যবহারকারীর সংজ্ঞায়িত ফাংশন (ইউডিএফ) ইনস্টল এবং ব্যবহার করা খুব সহজ:

  1. ALT-F11 VBE উইন্ডোটি নিয়ে আসে
  2. ALT-I ALT-M একটি নতুন মডিউল খোলে
  3. স্টাফটি আটকে দিন এবং ভিবিই উইন্ডোটি বন্ধ করুন

আপনি যদি ওয়ার্কবুকটি সংরক্ষণ করেন তবে এটির সাথে ইউডিএফ সংরক্ষণ করা হবে। আপনি যদি 2003 এর পরে এক্সেলের কোনও সংস্করণ ব্যবহার করে থাকেন তবে আপনার অবশ্যই ফাইলটিকে .xlsx এর চেয়ে .xlsm হিসাবে সংরক্ষণ করতে হবে

ইউডিএফ অপসারণ করতে:

  1. উপরের মতো ভিবিই উইন্ডোটি আনুন
  2. কোড সাফ করুন
  3. ভিবিই উইন্ডোটি বন্ধ করুন

এক্সেল থেকে ইউডিএফ ব্যবহার করতে:

= IsSpecial (ক 1)

সাধারণভাবে ম্যাক্রোগুলি সম্পর্কে আরও জানতে, দেখুন:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

এবং

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

এবং

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

ইউডিএফ-তে নির্দিষ্টকরণের জন্য

এটি কাজ করার জন্য ম্যাক্রোগুলিকে সক্ষম করতে হবে !


কেন আপনি পৃথক বা আইটেম হিসাবে "_" ব্যবহার করেছেন? এটি একই [] গ্রুপে অন্তর্ভুক্ত করা যেতে পারে
জাস্টুয়ার্ডো

আন্ডারস্কোরটি একটি বৈধ চরিত্রের জন্য এটি কেবল স্পষ্ট করতে @jstuardo ।
গ্যারি এর শিক্ষার্থী

কোডটি কি আপডেট করা উচিত নয় If sCh Like "[0-9a-zA-Z ]" Or sCh = "_" Thenযাতে ম্যাক্রো ধরে নেয় যে ফাঁকা স্থানগুলি বৈধ অক্ষর?
ওভারিরাপ্টর

@ ওভেরিরাপটার আপনি সঠিক! আমি আগামীকাল এটি আপডেট করব।
গ্যারি এর ছাত্র 21

2

এখানে একটি শর্তসাপেক্ষ বিন্যাস সমাধান যা বিশেষ অক্ষরের সাথে রেকর্ডগুলিকে পতাকাঙ্কিত করবে।

নীচে (অত্যন্ত দীর্ঘ) সূত্রটি ব্যবহার করে আপনার ডেটাতে কেবল নতুন শর্তযুক্ত বিন্যাসের নিয়ম প্রয়োগ করুন, যেখানে A1ফাইলের নামগুলির কলামে প্রথম রেকর্ড রয়েছে:

=SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<48)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<>45))+SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>57)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<65))+SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>90)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<97)*(CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))<>95))+SUMPRODUCT((CODE(MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1))>122)*1)

এই সূত্রটি প্রতিটি ফাইলের প্রতিটি অক্ষর পরীক্ষা করে এবং এটির ASCII কোডটি অনুমোদিতযোগ্য অক্ষরের মানগুলির বাইরে কিনা তা নির্ধারণ করে। দুর্ভাগ্যক্রমে, অনুমোদিত চরিত্রের কোডগুলি সমস্ত সংগত নয়, তাই সূত্রটি SUMPRODUCTগুলি এর পরিমাণ ব্যবহার করতে হয় । সূত্রটি সেখানে খারাপ চরিত্রগুলির সংখ্যা প্রদান করে। যে কোনও ঘর যা 0 টিরও বেশি মান প্রত্যাশায় প্রতীকযুক্ত হয়।

উদাহরণ: এখানে চিত্র বর্ণনা লিখুন


1

বিশেষ চরিত্রগুলি খুঁজতে আমি একটি ভিন্ন পদ্ধতির ব্যবহার করেছি। আমি প্রতিটি অনুমোদিত অক্ষরের জন্য নতুন কলাম তৈরি করেছি এবং তারপরে প্রতিটি সারিতে প্রবেশের (জেড 2) অক্ষরটি কতবার অনুমোদিত হয়েছে তা গণনা করার জন্য এই জাতীয় সূত্র ব্যবহার করেছি:

AA2=LEN($Z2)-LEN(SUBSTITUTE($Z2,AA$1,""))
AB2=LEN($Z2)-LEN(SUBSTITUTE($Z2,AB$1,""))
...

তারপরে আমি প্রতিটি সারিতে অনুমোদিত অক্ষরের সংখ্যার সংক্ষিপ্তসার করেছি এবং তারপরে এটিকে সারির প্রবেশের মোট দৈর্ঘ্যের সাথে তুলনা করেছি।

BE2=LEN(Z2)
BF2=SUM(AA2:BC2)-BE2

এবং অবশেষে, আমি নেতিবাচক মানগুলি খুঁজে পেতে শেষ কলামে (বিএফ 2) বাছাই করেছি, যা আমাকে কলামগুলিতে নিয়ে গেছে যার সংশোধন দরকার।

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