এক্সেলের একক সারিতে একাধিক সারি থেকে মানগুলি কীভাবে একত্রিত করবেন?


10

এক্সেলে আমার কাছে একটি ডেটা ডাম্প রয়েছে যা দুটি পৃথক মানের জন্য বার্ষিক গ্রাহক ডেটা নিয়ে থাকে। তথ্য প্রতি বছর এবং গ্রাহকের জন্য পৃথক সারির সাথে সরবরাহ করা হয়েছিল। এটি দেখতে এটির মতো দেখাচ্ছে:

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

আমি ২০০৯ সালে মান A এর জন্য গ্রাহক 1 এবং একই বছরে একই গ্রাহকের জন্য মান B এর জন্য পৃথক সারিতে আটকে আছি ।

কিছু উদাহরণে উপরের উদাহরণ এ বা মান বি নেই above এবং, উদাহরণে উপস্থাপিত না হলেও, কিছু ক্লায়েন্টের এক বছরে উভয় মানের জন্য কোনও ডেটা থাকবে না (এবং সেইভাবে সেই বছরে সেই গ্রাহকের জন্য কোনও সারি থাকবে না)। এই পরিস্থিতিতে, সেই বছরে সেই গ্রাহকের পক্ষে সারি না থাকা ভাল।

আমি এটি একটি ওয়ার্কশিটে পেতে চাই যেখানে প্রতি বছর এবং গ্রাহকের জন্য উভয় মানের জন্য এক সারি থাকে । উদাহরণস্বরূপ, আমি ডেটাটি দেখতে দেখতে চাই:

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

ফলাফলটি তৈরি করার সবচেয়ে কার্যকর উপায় কী?

উত্তর:


6

এটি ভিবিএ, বা কোনও ম্যাক্রো আপনি নিজের শীটে চালাতে পারেন। অ্যাপ্লিকেশন প্রম্পটটির জন্য ভিজ্যুয়াল বেসিক আনার জন্য আপনার অবশ্যই alt+ টি F11চাপুন, আপনার ওয়ার্কবুকটিতে যান right click - insert - moduleএবং এই কোডটি সেখানে আটকে দিন। তারপরে আপনি টিবিতে ভিবিএর মধ্যে থেকে মডিউলটি চালাতে পারেন F5। এই ম্যাক্রোর নাম দেওয়া হয়েছে "পরীক্ষা"

Sub test()
'define variables
Dim RowNum as long, LastRow As long
'turn off screen updating
Application.ScreenUpdating = False
'start below titles and make full selection of data
RowNum = 2
LastRow = Cells.SpecialCells(xlCellTypeLastCell).Row
Range("A2", Cells(LastRow, 4)).Select
'For loop for all rows in selection with cells
For Each Row In Selection
    With Cells
    'if customer name matches
    If Cells(RowNum, 1) = Cells(RowNum + 1, 1) Then
        'and if customer year matches
        If Cells(RowNum, 4) = Cells(RowNum + 1, 4) Then
            'move attribute 2 up next to attribute 1 and delete empty line
            Cells(RowNum + 1, 3).Copy Destination:=Cells(RowNum, 3)
            Rows(RowNum + 1).EntireRow.Delete
        End If
     End If
    End With
'increase rownum for next test
RowNum = RowNum + 1
Next Row
'turn on screen updating
Application.ScreenUpdating = True

End Sub

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

সম্পাদনা করুন - সম্পূর্ণরূপে আমার with statementসম্পূর্ণ অপ্রয়োজনীয় এটি সম্ভব , তবে এটি কারও ক্ষতি করছে না ..

02/28/14 পর্যালোচনা করা হয়েছে

কেউ এই প্রশ্নের উত্তর অন্য প্রশ্নে ব্যবহার করেছেন এবং আমি যখন ফিরে গেলাম তখন ভেবেছিলাম এই ভিবিএটি দরিদ্র। আমি আবার করেছি -

Sub CombineRowsRevisited()

Dim c As Range
Dim i As Integer

For Each c In Range("A2", Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, 1))
If c = c.Offset(1) And c.Offset(,4) = c.Offset(1,4) Then
            c.Offset(,3) = c.Offset(1,3)
            c.Offset(1).EntireRow.Delete
End If

Next

End Sub

05/04/16 এ পুনরায় দেখা হয়েছে

আবার জিজ্ঞাসা করা হয়েছে কীভাবে একাধিক সারি থেকে মানগুলি একক সারিতে সংযুক্ত করবেন? একটি মডিউল আছে, তবে পরিবর্তনগুলি ব্যাখ্যা করে আবার প্রয়োজন, এটি বেশ দরিদ্র।

Sub CombineRowsRevisitedAgain()
    Dim myCell As Range
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row

    For Each myCell In Range(Cells("A2"), Cells(lastRow, 1))
        If (myCell = myCell.Offset(1)) And (myCell.Offset(0, 4) = myCell.Offset(1, 4)) Then
            myCell.Offset(0, 3) = myCell.Offset(1, 3)
            myCell.Offset(1).EntireRow.Delete
        End If
    Next
End Sub

যাইহোক, সমস্যার উপর নির্ভর করে, এটি step -1একটি সারির সংখ্যায় ভাল হতে পারে যাতে কিছুই এড়ানো যায় না।

Sub CombineRowsRevisitedStep()
    Dim currentRow As Long
    Dim lastRow As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    For currentRow = lastRow To 2 Step -1
        If Cells(currentRow, 1) = Cells(currentRow - 1, 1) And _
        Cells(currentRow, 4) = Cells(currentRow - 1, 4) Then
            Cells(currentRow - 1, 3) = Cells(currentRow, 3)
            Rows(currentRow).EntireRow.Delete
        End If
    Next

End Sub

2

অন্য বিকল্প:

  1. কলাম বি নির্বাচন করুন, CTRL+G-> Special-> Blanks-> টিপুনOK
  2. টাইপ করুন =প্রেস , তারপরCTRL+ENTER
  3. কলাম সি নির্বাচন করুন CTRL+G-> Special-> Blanks-> টিপুনOK
  4. টাইপ করুন =IF(প্রেস টাইপ =প্রেস প্রেস টাইপ ,প্রেস টাইপ ,0)তারপরCTRL+ENTER
  5. সমস্ত ডেটা নির্বাচন করুন এবং CopyএবংPaste Special as Values
  6. সদৃশ অপসারণ.

সম্পাদনা করুন:

ব্যাখ্যা: আমি GoTo খালি বিকল্পটি ব্যবহার করার চেষ্টা করছি । আপনি একবার শূন্যস্থান নির্বাচন করার পরে আপনি সমস্ত নির্বাচিত ফাঁকা ঘরগুলির জন্য একই সূত্রটি প্রবেশ করতে পারেন। ওপি-র প্রশ্ন সম্পর্কে, ডেটা দেখতে মনে হয় ধারাবাহিক ফাঁকা রয়েছে, যেমন: Value Aকলাম ফাঁকা CustomerIDউপরে ননব্ল্যাঙ্ক সারির মতোই রয়েছে। একইভাবে Value Bকলাম CustomerIDফাঁকাগুলির ননব্ল্যাঙ্ক সারির নীচের মতো রয়েছে।


হ্যালো zx8754। আপনি কি দয়া করে কিছু ব্যাখ্যা যুক্ত করতে পারেন আপনার সমাধানের পিছনে ধারণাটি কী?
নিক্সদা

@ নিক্সদা ব্যাখ্যা যোগ করেছেন, দুঃখিত ভেবেছিলেন পদক্ষেপগুলি যথেষ্ট পরিষ্কার ছিল।
zx8754

0

এটি করার সর্বাধিক কার্যকর উপায় হ'ল পিওট টেবিলের সমস্ত ডেটা ডাম্প করা এবং 'গ্রাহককে' সারি লেবেলে ফেলা এবং তারপরে অন্যান্য কলামগুলির সাথে অনুসরণ করা। আপনি যদি বছরের পর বছর ভাঙ্গন দেখতে চান তবে আপনি 'বর্ষ' কলামের শিরোনামে ফেলে দিতে পারেন

পিভট টেবিলগুলি এক্সেল 2010 এ সন্নিবেশের অধীনে পাওয়া যাবে


বি কলামে কোনও কক্ষের কোনও মূল্য নেই এমন কোষগুলির সাথে আপনি ইস্যুগুলিতে দৌড়াবেন কারণ এক্সেলের জানার কোনও উপায় থাকবে না যে বি 2 এবং বি 3 এর মান কোনওভাবেই সম্পর্কিত।
xXPhenom22Xx

আমি স্বীকার করি পিভট টেবিলগুলির সাথে আমার খুব কম অভিজ্ঞতা আছে তবে আমি মনে করি না যে পিভট টেবিলগুলি আমার সমস্যাটি সমাধান করে। আমি প্রতি বছরের এক সারিতে গ্রাহকের জন্য সমস্ত মানগুলির ডেটা চাই যাতে আমি এটির কৌশলটি তৈরি করতে পারি (উদাহরণস্বরূপ একটি কলাম তৈরি করুন মান A + মান বি যোগ করে), কেবল এটি কীভাবে পিভট টেবিলের মাধ্যমে দেখছি তা পরিবর্তন করবেন না। আমি আক্ষরিকভাবে ওয়ার্কশিটে ডেটা কাঠামোগতভাবে চাই।
গ্রেগ আর।

হ্যাঁ আপনি শক্ত হবেন যদি না আপনি সবসময় উদাহরণের মতো হারিয়ে যাওয়া ডেটা সহ বিকল্প কলামগুলি না করেন। যদি এটি না হয় তবে এক্সেলের পক্ষে যুক্তিযুক্তভাবে আপনি যা চান তা করার উপায় নেই।
xXPhenom22Xx

গ্রেগ - আপনি সমস্যাটি এইভাবে সমাধান করতে পারেন: একবার আপনি যে ফর্ম্যাটটি চাইছেন সেটি পিভট টেবিলের মধ্যে এসে গেলে, পিভট টেবিলের বাইরে অন্য কোনও জায়গায় (একই শিট বা অন্য কোনওটি) অনুলিপি করুন - এবং তারপরে আপনি যেকোন উপায়ে এটি পরিচালনা করতে পারবেন , কলাম, সূত্র ইত্যাদি যুক্ত সহ
yosh m

0

কনডেন্সড ডেটা সহ একটি পৃথক টেবিল তৈরি করার পদক্ষেপ এখানে।

  1. আপনার পুরো টেবিলটি অনুলিপি করুন এবং এটি একটি নতুন শীটে পেস্ট করুন।
  2. আপনার নতুন টেবিলটি নির্বাচন করুন এবং কলামগুলিতে Customerএবং ডুপ্লিকেটগুলি (ডেটা ফিতা -> নকল সরান) সরান Year। এটি কনডেন্সড টেবিলের কাঠামো সরবরাহ করবে।
  3. বি 2 তে (প্রথম প্রবেশের জন্য Value A) নিম্নলিখিতটি প্রবেশ করান:

    =IFERROR(INDEX(Sheet1!B$1:B$11,MIN(IF(Sheet1!$A$1:$A$11=$A2,IF(Sheet1!$D$1:$D$11=$D2,IF(Sheet1!B$1:B$11<>"",ROW(Sheet1!$A$1:$A$11),1000000),1000000),1000000))),"")

    টিপে একটি বিন্যাস সূত্র হিসেবে সূত্র লিখুন Ctrl+ + Shift+ + Enter

  4. কলামটিতে সূত্রটি পূরণ করুন। তারপরে Value Bকলামটি পূরণ করার জন্য পূরণ করুন । ভাল খবর!

কয়েকটি নোট:

  • আপনার ডেটা ফিট করার জন্য আপনাকে অবশ্যই ঠিকানাগুলি সামঞ্জস্য করতে হবে। রেফারেন্সের জন্য, শীট 1 হ'ল ডি-এর মাধ্যমে কলামগুলির মূল তথ্য is
  • আমি ধরে নিচ্ছি যে আপনার ডেটা (বা শিরোনামগুলি) সারি 1 এ শুরু হবে এটি সম্ভবত সত্য যদি এটি কোনও ডেটা ডাম্প হয়। সূত্রটি এমনটি না করে ঠিক করতে হবে।
  • আমি ধরে নিচ্ছি আপনার টেবিলটিতে এক মিলিয়ন সারি কম রয়েছে। যদি আপনার কাছে 1000000এর চেয়ে বেশি কিছু থাকে তবে সূত্রের গুলিটিকে আপনার সারি সংখ্যার চেয়ে বড় কিছুতে পরিবর্তন করুন ।
  • যদি আপনার টেবিলটিতে অনেক হাজার সারি (100,000+) থাকে, তবে আপনি অ্যারের সূত্রগুলি বড় অ্যারে দিয়ে জড়িয়ে যেতে পারেন তার পরিবর্তে আপনি ভিবিএ সমাধান ব্যবহার করার বিষয়টি বিবেচনা করতে পারেন।

0

প্রত্যেকে এর জন্য প্রচুর ভিবিএ কোড বা জটিল ফাংশন ব্যবহার করছে। আমার এমন একটি পদ্ধতি রয়েছে যা প্রয়োগ করতে এক সেকেন্ড সময় নেয় তবে এটি আরও অনেক বেশি বোধগম্য এবং অন্যান্য বিভিন্ন সম্ভাবনার উপর নির্ভর করে সামঞ্জস্য করা খুব সহজ।

আপনি উপরে যে উদাহরণটি দিয়েছেন তাতে উদাহরণস্বরূপ, এগুলি (4) ফাংশনগুলি যথাক্রমে E2, F2, G2 এবং H2 তে আটকে দিন (উপরের F&G ফাংশনগুলি রেফারেন্স সেলগুলি):

=IF(D2=D3, A2,         IF(D2<>D1, A2,            ""))    
=IF(D2=D3, MAX(B2:B3), IF(D2<>D1, B2,            ""))    
=IF(D2=D3, MAX(B2:B3), IF(D2<>D1, IF(C2=0,"",C2),""))    
=IF(D2=D3, D2,         IF(D2<>D1, D2,            ""))

এই সূত্রগুলি যতটা প্রয়োজন নীচে টেনে আনুন। এটি প্রতিবার ২ টি সারি উপস্থিত থাকলে একক সারিটিকে প্রভাবিত না করে একক সারির ডেটা তৈরি করে। অন্য কোথাও EFGH কলামের মানগুলি (সূত্রগুলি সরিয়ে ফেলতে) এঁকে দিন এবং সমস্ত অতিরিক্ত সারি সরিয়ে ফেলার জন্য গ্রাহক দ্বারা তাদের বাছাই করুন।

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