কলাম থেকে সারি থেকে তথ্য একত্রিত করা


3

আমার একটি স্প্রেডশীট আছে:

Company 1 | ID1
Company 1 | ID2
Company 1 | ID3
Company 2 | ID4
Company 2 | ID5
Company 2 | ID6
Company 3 | ID7
Company 3 | ID8
Company 3 | ID9

আমার প্রতিটি আইডিগুলি কলামে ডানদিকে প্রতিটি সারিতে একত্রিত করতে হবে। প্রতি কোম্পানির আইডি একটি ভিন্ন সংখ্যা হতে পারে।

চূড়ান্ত ফলাফল দেখতে হবে:

Company 1 | ID1 | ID2 | ID3
Company 2 | ID4 | ID5 | ID6
Company 3 | ID7 | ID8 | ID9

আমি কিভাবে এই কাজ করতে পারে? VBA সঙ্গে পছন্দের।


আপনি যদি সারণির জন্য কলাম যোগ করতে পারেন তবে দয়া করে পাওয়ার ক্যোয়ারীটি চেষ্টা করুন: chuantu.biz/t6/335/1530177159x-1404792307.gif
Lee

উত্তর:


2

এই একক সূত্র সমাধান অনুমান করে যে প্রতিটি সংস্থার একই সারির সংখ্যা রয়েছে:

Worksheet Screenshot

নিম্নলিখিত সূত্র লিখুন D2 এবং ctrl-enter / copy-paste / fill-down এবং ডান টেবিলের বাকি অংশে:

=""&INDEX($A:$B,ROW($D$2)+3*INT(ROW()-ROW($D$2))+MAX(0,COLUMN()-COLUMN($D$2)-1),2-(COLUMN()=COLUMN($D$2)))

উল্লেখ্য যে এই সূত্রটি প্রতিটি কোম্পানির জন্য যেকোনো (অভিন্ন) সারির সংখ্যাগুলির জন্য কাজ করবে এবং সারি বা কলাম যোগ / সরানো হলে সঠিকভাবে সামঞ্জস্য করবে।

যাইহোক, টেবিলটি যদি এটিতে থাকে তবে এটি কপি করে / কাটা এবং অন্যত্র আটকানো হয়। দ্য $D$2 এটি সঠিকভাবে আবার কাজ করার জন্য নতুন টেবিলের অবস্থানের শীর্ষ-বাম ডেটা কক্ষের সাথে মেলে এমন পরিবর্তন করতে হবে।


প্রতিটি কোম্পানির জন্য একটি পরিবর্তনশীল সংখ্যা সারি থাকলে, একক সূত্র প্রয়োজন:

=IFERROR(IF(COLUMN()=COLUMN($D$2),""&INDEX($A:$A,MATCH(D1,$A:$A,0)+COUNTIF($A:$A,D1)),INDEX(INDEX($B:$B,MATCH($D2,$A:$A,0)):INDEX($B:$B,MATCH($D2,$A:$A,0)+COUNTIF($A:$A,$D2)-1),COLUMN()-COLUMN($D$2))),"")

Worksheet Screenshot


ধন্যবাদ. এবং যদি একটি অজানা পরিমাণ সারি আছে?
Oliver Yasuna

@ ওলিভার ইয়াসুনা আমি সেই মামলার উত্তরের সূত্রটি যোগ করেছি
robinCTS

1

এখানে একটি ভিবিএ বিকল্প:

'============================================================================================
' Module     : <any standard module>
' Version    : 0.1.0
' Part       : 1 of 1
' References : N/A
' Source     : https://superuser.com/a/1335738/763880
'============================================================================================
Option Explicit

Public Sub UnPivot()
       Dim ¡ As Long

  Const s_SourceColumns As String = "A:B"
  Const s_TargetColumn As String = "D"
  Const b_HasHeader As Boolean = True

  Dim lngSourceRows As Long
  lngSourceRows = ActiveSheet.Columns(s_SourceColumns).Cells(Rows.Count, 1).End(xlUp).Row + CLng(b_HasHeader)
  Dim varSource As Variant
  varSource = ActiveSheet.Columns(s_SourceColumns).Resize(RowSize:=lngSourceRows + 1).Offset(RowOffset:=-CLng(b_HasHeader)).Value2
  Dim idxNewCompany As Long: idxNewCompany = LBound(varSource, 1)
  Dim strNewCompany As String: strNewCompany = varSource(idxNewCompany, 1)
  Dim varUnPivotedData() As Variant
  ReDim varUnPivotedData(1 To lngSourceRows)
  varUnPivotedData(1) = strNewCompany
  Dim celNextTargetStart As Range
  Set celNextTargetStart = ActiveSheet.Columns(s_TargetColumn).Resize(RowSize:=1).Offset(RowOffset:=-CLng(b_HasHeader))
  Application.ScreenUpdating = False
  For ¡ = LBound(varSource, 1) To UBound(varSource, 1) - 1
    varUnPivotedData(¡ - idxNewCompany + 2) = varSource(¡, 2)
    If varSource(¡ + 1, 1) <> strNewCompany Then
      ReDim Preserve varUnPivotedData(1 To ¡ - idxNewCompany + 2)
      celNextTargetStart.Resize(ColumnSize:=UBound(varUnPivotedData)).Value2 = varUnPivotedData
      Set celNextTargetStart = celNextTargetStart.Offset(RowOffset:=1)
      idxNewCompany = ¡ + 1
      strNewCompany = varSource(idxNewCompany, 1)
      ReDim varUnPivotedData(1 To lngSourceRows)
      varUnPivotedData(1) = strNewCompany
    End If
  Next ¡
  Application.ScreenUpdating = True

End Sub

আপনার পরিস্থিতির সাথে সামঞ্জস্য করার জন্য কোডের উপরের অংশে কেবল স্টোনগুলি পরিবর্তন করুন।


-1

enter image description here

কিভাবে এটা কাজ করে:

  • A2 নির্বাচন করুন: A11 এবং বিন্যাস নাম দিন কোম্পানি
  • বি 2 নির্বাচন করুন: বি 11 এবং রেঞ্জ নাম দিন ID- র
  • সেল C2 এ এই অ্যারে সূত্র লিখুন কোম্পানির অনন্য তালিকা উৎপন্ন :

    {=INDEX($A$2:$A$11, MATCH(0, COUNTIF($C$1:C1, $A$2:$A$11), 0))}
    

N.B. সঙ্গে লিখিত সূত্র উপরে শেষ করুন জন্য Ctrl + শিফট + Enter এবং; এটা পূরণ করুন।

  • সেল D2 এ এই অ্যারে সূত্রটি লিখুন, সাথে শেষ করুন জন্য Ctrl + শিফট + Enter এবং তারপর নিচে পূরণ করুন।

    {=IFERROR(INDEX(IDs,SMALL(IF(Company=$C2,ROW(IDs)-MIN(ROW(IDs))+1),COLUMNS($C$2:C2))),"")}
    

বিঃদ্রঃ,

  • পরিবর্তনশীল সংখ্যা আছে ক্ষেত্রে এই সূত্র, মসৃণভাবে কাজ করবে প্রতিটি কোম্পানির জন্য আইডি।

  • স্ক্রিন শটতে দেখানো কলামগুলিতে আইডিগুলির তালিকা আপনি পাবেন।


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