অন্য কোন কলাম প্রভাবিত না করে দুটি অ সমান কলাম বাছাই


1

আমি এক্সেল দুটি ভিন্ন কলাম আছে। আমি একটি স্ক্রিপ্ট তৈরি করতে চাই যা কলাম F, বাছাই করতে হবে (শিরোনাম আছে) এবং কলাম F এর সাজানোর কাজটি যেখানে কলাম বি অনুসারে সাজানো হবে। (যাইহোক অন্য কোন কলাম প্রভাবিত ছাড়া!)

তাই যদি আমি আছে

    ColB       ColF
 1. Cat        2
 2. Mouse      1
 3. Dog        3

সাজানোর আমাকে দিতে হবে

    ColB       ColF
 1. Mouse        1
 2. Cat          2
 3. Dog          3

কিভাবে আমি এটি করতে পারব? আমি একটি ম্যাক্রো রেকর্ডিং করার চেষ্টা করেছি, (অথবা কেবল দুইটি কলামের ক্লিক এবং সাজানোর বোতামের সাথে এটি সাজানোর চেষ্টা করছি), তবে আমি একটি ত্রুটি বলছি "কমান্ডটি একাধিক নির্বাচনের সাথে সম্পাদন করা যাবে না, একটি একক পরিসর ক্লিক করুন এবং আবার চেষ্টা করুন"



যদি একজন বন্ধু আমাকে বলে যে প্রশ্ন করার জন্য এটি একটি ভাল জায়গা ছিল, তাই আমি করেছি: /
Geoff

2
আমার মনে হয় যে কোনও কম প্রচেষ্টা, অ-ভিবিএ সমাধানগুলি আসন্ন নয়, তাই যদি আপনি আরও একটি ধাপে ফিরে যান এবং বর্ণনা করেন তবে এটি আপনাকে সাহায্য করবে। কেন আপনি এই কাজ করার চেষ্টা করছেন। এই ভাবে সাজানোর প্রয়োজন নেই যে এগিয়ে যাওয়ার একটি ভাল উপায় হতে পারে।
Excellll

উত্তর:


1

আমি এই কলামগুলিকে সাজানোর মাধ্যমে যা করতে চাই তা সম্পাদন করার জন্য একটি ভাল উপায় থাকতে হবে সন্দেহ করে, কিন্তু এখানে একটি ভিবিএ সমাধান রয়েছে যা আপনি যা ঠিক করেছেন তা ঠিক করবে। এই কোডটি সাবধান করুন যে আপনি যে শ্রেণীগুলি বাছাই করতে চান তাতে কোন ফাঁকা ঘর নেই। এটি একটি সমস্যা হলে একটি মন্তব্য করুন, কারণ এটি ঠিক করা সহজ হবে।

Sub nonadjacentsort()
Dim rng1 As Range, rng2 As Range, rngTmp As Range, s1 As Worksheet, tmpS As Worksheet
Dim tmpArr1() As Variant, tmpArr2() As Variant
Dim i As Long
Set s1 = ActiveSheet
'Set Ranges to sort.  This assumes there are no blanks in your data.
Set rng1 = s1.Range("B1", Range("B1").End(xlDown))
Set rng2 = s1.Range("F1", Range("F1").End(xlDown))
'Load first column into temporary array
tmpArr1 = rng1.Value
'Load data into larger array that will hold both columns
ReDim tmpArr2(1 To UBound(tmpArr1, 1), 1 To 2) As Variant
For i = 1 To UBound(tmpArr1, 1)
    tmpArr2(i, 1) = tmpArr1(i, 1)
Next i
'Load second column into temporary array
Erase tmpArr1
tmpArr1 = rng2.Value
'Load second column into larger array
For i = 1 To UBound(tmpArr1, 1)
    tmpArr2(i, 2) = tmpArr1(i, 1)
Next i
Erase tmpArr1
'Add new sheet and print two columns there together.
Application.ScreenUpdating = False
Set tmpS = Sheets.Add
Set rngTmp = tmpS.Range("A1").Resize(UBound(tmpArr2, 1), 2)
rngTmp = tmpArr2
Erase tmpArr2
'Sort by second column (Column F of original data)
rngTmp.Sort rngTmp.Cells(1, 2), xlAscending, Header:=xlYes
'Load sorted data into array and then overwrite columns on original data
tmpArr1 = rngTmp.Columns(1).Value
rng1 = tmpArr1
Erase tmpArr1
tmpArr1 = rngTmp.Columns(2).Value
rng2 = tmpArr1
Erase tmpArr1
'Delete temporary sheet.
Application.DisplayAlerts = False
tmpS.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub

এই স্ক্রিপ্ট জন্য আপনাকে অনেক ধন্যবাদ! এটি আমাকে আমার প্রকল্পটি সম্পূর্ণ করার জন্য একটি ভাল শুরু করার পয়েন্ট দিয়েছে: D আমি কীভাবে এটি যোগ করেছি তা উল্লেখ করার জন্য আপনি যে অতিরিক্ত পাঠ্যটি যোগ করেছেন তা সত্যিই আমি উপলব্ধি করি, এর থেকে অনেক কিছু শিখতে হবে!
Geoff
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.