it-swarm.asia

كيفية "غير محوري" أو "محوري عكسي" في Excel؟

لدي بيانات تشبه هذا:

Id | Loc1 | Loc2 | Loc3 | Loc4
---+------+------+------+-----
1  | NY   | CA   | TX   | IL
2  | WA   | OR   | NH   | RI

وأريد تحويله إلى هذا:

Id | LocNum | Loc
---+--------+----
1  |   1    | NY
1  |   2    | CA
1  |   3    | TX
1  |   4    | IL
2  |   1    | WA
2  |   2    | OR
2  |   3    | NH
2  |   4    | RI

ما هي أسهل طريقة للقيام بذلك في Excel 2007؟

65
devuxer

يمكنك القيام بذلك باستخدام جدول محوري.

  1. إنشاء "PivotTable نطاقات التوحيد متعددة." (فقط على معالج Pivot Table ALT+D، P في Excel 2007)
  2. حدد "سأقوم بإنشاء حقول الصفحة الخاصة بي".
  3. اختر بياناتك.
  4. انقر نقرًا مزدوجًا على القيمة الإجمالية الكبرى - الموجودة عند تقاطع الصف الكبير و العمود الكبير ، على طول الزاوية اليمنى اليمنى من الجدول المحوري.

يجب أن ترى ورقة جديدة تحتوي على جميع البيانات الموجودة في الجدول المحوري ، ويتم نقلها بالطريقة التي تبحث عنها.

توفر تقنيات Datapig إرشادات خطوة بخطوة التي هي في الواقع أكثر تعقيدًا مما تحتاج - مثاله ينقل جزءًا فقط من مجموعة البيانات ويستخدم تقنية pivot مع TextToColumns . ولكن لديها الكثير من الصور.

لاحظ أن الجدول المحوري سيجمع البيانات. إذا كنت ترغب في فك تجميعها ، فإن الطريقة الوحيدة للقيام بذلك هي نسخ الجدول المحوري ، و "لصق خاص" كقيم. يمكنك بعد ذلك ملء الفراغات بتقنية مثل هذه: http://www.contextures.com/xlDataEntry02.html

69
DaveParillo

إذا لم تكن بياناتك عبارة عن جدول محوري لـ Excel ولكنها مجرد بيانات ، فقد تحتاج إلى "إلغاء محوره" باستخدام بعض رموز VBA البسيطة. الرمز يعتمد على اثنين من النطاقات المسماة ، المصدر والهدف. المصدر هو البيانات التي تريد إلغاء محوريتها (باستثناء رؤوس الأعمدة/الصفوف ، على سبيل المثال NY-RI في العينة) والهدف هو الخلية الأولى التي تريد وضع النتيجة فيها.

Sub unPivot()
Dim oTarget As Range
Dim oSource As Range
Dim oCell As Range

Set oSource = Names("Source").RefersToRange
Set oTarget = Names("Target").RefersToRange

For Each oCell In oSource
    If oCell.Value <> "" Then
        oTarget.Activate
      ' get the column header
        oTarget.Value = oCell.Offset(-(oCell.Row - oSource.Row + 1), 0).Text 
      ' get the row header
         oTarget.Offset(0, 1).Value = oCell.Offset(0, _
           -(oCell.Column - oSource.Column + 1)).Text 
      ' get the value
        oTarget.Offset(0, 2).Value = oCell.Text 
      ' move the target pointer to the next row
        Set oTarget = oTarget.Offset(1, 0) 
    End If
Next
Beep
End Sub
6
TJMelrose

لقد قمت بإنشاء وظيفة إضافية تتيح لك القيام بذلك ، مما يجعل من السهل التكيف مع المواقف المختلفة. التحقق من ذلك هنا: http://tduhameau.wordpress.com/2012/09/24/the-unpivot-add-in/

5
nutsch

هناك حل لطيف تمامًا في Excel 2010 ، ما عليك سوى أن تلعب قليلاً مع الطاولة المحورية.

قم بإنشاء جدول محوري من بياناتك باستخدام هذه الإعدادات:

  • لا المجاميع ، لا المجاميع الكبرى
  • تخطيط التقرير: نموذج جدولي ، كرر جميع تسميات العناصر
  • إضافة جميع الأعمدة التي تحتاجها ، والحفاظ على الأعمدة التي تريد تحويلها على اليمين
  • لكل عمود تريد تحويله: إعدادات الحقل المفتوح - في علامة التبويب "تخطيط" و "طباعة": حدد "إظهار تسميات العناصر في نموذج المخطط التفصيلي" وحدد مربعي الاختيار أدناه
  • انسخ الجدول الخاص بك إلى موقع منفصل (قيم فقط)
  • إذا كانت لديك خلايا فارغة في بياناتك الأصلية ، فقم بالتصفية بحثًا عن القيم الفارغة في العمود الموجود في أقصى اليمين وحذف هذه الصفوف (لا يتم التصفية في الجدول المحوري لأنه لن يعمل كما تريد!)
3
Máté Juhász

أفضل ما توصلت إليه حتى الآن هو هذا:

Id   LocNum  Loc
---------------------------------
1    1       =INDEX(Data,A6,B6)
1    2       =INDEX(Data,A7,B7)
1    3       =INDEX(Data,A8,B8)
1    4       =INDEX(Data,A9,B9)
2    1       =INDEX(Data,A10,B10)
2    2       =INDEX(Data,A11,B11)
2    3       =INDEX(Data,A12,B12)
2    4       =INDEX(Data,A13,B13)

يعمل هذا ، لكن يجب أن أقوم بإنشاء المعرفات و LocNum يدويًا. إذا كان هناك حل أكثر تلقائيًا (إلى جانب كتابة ماكرو) ، فيرجى إخبارنا في إجابة منفصلة.

3
devuxer

إذا كانت أبعاد بياناتك كما هي في العينة المقدمة في سؤالك ، فإن مجموعة الصيغ التالية التي تستخدم OFFSET يجب أن تمنحك النتيجة المطلوبة:

على افتراض

1 | نيويورك | كاليفورنيا | TX | انا

2 | WA | OR | NH | RI

في النطاق A2: E3 ، ثم أدخل

= OFFSET ($ A $ 2، طابق ((ROW (A2) -ROW (2 $ A $))/4،1)، 0)

في F2 ، يقول ، و

= MOD (ROW (A2) -ROW ($ A $ 2)، 4) +1

في G2 ، قل ، و

= OFFSET ($ B $ 2، طابق ((ROW (B2) -ROW (2 $ B $))/4،1)، MOD (ROW (A2) -ROW (2 $ A $)، 4))

في H2 ، يقول.

ثم انسخ هذه الصيغ لأسفل بقدر ما هو مطلوب.

هذا هو الحل الأسهل والنقي والمضمّن الذي أستطيع التفكير فيه.

2
Aaa

يبدو أنك حصلت على عمود "loc" (كما يتضح من إجابتك الأولى) ، والآن تحتاج إلى مساعدة في الحصول على العمودين الآخرين.

الخيار الأول هو ببساطة كتابة أول عدة صفوف (على سبيل المثال ، 12) في تلك الأعمدة والسحب لأسفل - أعتقد أن Excel يقوم بالشيء الصحيح في هذه الحالة (ليس لدي Excel على هذا الكمبيوتر لاختباره بالتأكيد).

إذا لم ينجح ذلك ، أو إذا كنت تريد شيئًا أكثر برمجًا ص ، فحاول استخدام دالة row (). شيء مثل "= Floor (row ()/4)" لعمود المعرف و "= mod (row () ، 4) +1" لعمود LocNum.

1
Roie Marianer

فيما يلي أداة لطيفة لإلغاء تحديد المحاكاة ، وتطبيع Pivot Table.

Normalisieren von Pivot Tabellen

اتمني ان يكون مفيدا.

1
L4a-Thompson

هناك أداة تحويل حدودي VBA لتحويل البيانات المحورية أو العكسية إلى جدول قاعدة البيانات ، يرجى الاطلاع

http://www.spreadsheet1.com/unpivot-data.html

1
Petros

DaveParillo الجواب هو أفضل إجابة لجدول علامة تبويب واحدة. أردت أن أضيف بعض الإضافات هنا.

للأعمدة المتعددة قبل الأعمدة غير المحورية

هذه الطريقة لا تعمل.

يوتيوب بيانات غير محورية بسيطة مثل السؤال

هذا فيديو يوتيوب يوضح كيفية القيام بذلك بطريقة بسيطة. لقد تخطيت الجزء حول إضافة الاختصار واستخدم اختصار @ devuxer الموجود في إجابة DaveParillo.

https://www.youtube.com/watch؟v=pUXJLzqlEPk

1
BrinkDaDrink