سؤال قم بتحويل عمود إلى قائمة مفصولة بفواصل


لدي مهمة إنشاء ورقة Excel بسيطة تأخذ عددًا غير محدد من الصفوف في العمود A كما يلي:

1234
123461
123151
11321

واجعلها في قائمة مفصولة بفواصل في خلية أخرى يمكن للمستخدم نسخها ولصقها بسهولة في برنامج آخر مثل:

1234,123461,123151,11321

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


108
2018-02-02 16:01


الأصل


جزء من الحل قد يكون تحرير ، لصق خاص ، تبديل لتحويل العمود إلى صف. إذا كان البرنامج الآخر يقبل علامات التبويب بدلاً من الفواصل ، فسيتم تعيينك بعد نسخ الصف الجديد. - Arjan
كيف تفعل عكس ذلك؟ خذ قائمة مفصولة بفواصل وتحويلها إلى عمود من المحتوى؟ - stevvve
stevvve تستخدم ميزة Text to Columns في علامة تبويب البيانات. support.microsoft.com/en-us/kb/214261 - Trevor
أستخدم أي محرر نصوص قادر على التعبير العادي لهذا ، مثل المفكرة ++. نسخ قيم العمود ولصقها في المحرر ، والبحث واستبدال التعبير العادي ، والعثور على "\ r \ n" الاستبدال بـ "،". إذا كنت ترغب في تحويل ملف CSV إلى عمود ، فابحث عن "،" واستبدله بـ "\ r \ n" - junaling


الأجوبة:


بافتراض بدء بياناتك في A1 ، أضع ما يلي في العمود B:

B1:

=A1

B2:

=B1&","&A2

يمكنك بعد ذلك لصق العمود B2 أسفل العمود بأكمله. يجب أن تكون الخلية الأخيرة في العمود B قائمة مفصولة بفاصلة من العمود A.


132
2018-02-02 16:37



هذا أمر رائع لعدد محدود من الصفوف ، ولكن (اعتمادا على الذاكرة المتوفرة؟) سيتم قطع العملية إذا كنت متصلا بعد بضعة آلاف من الصفوف ، تاركة قيمة ناتجك غير مكتملة. كن حذرا. - samthebrand


  • انسخ العمود في Excel
  • افتح Word
  • "لصق خاص" كنص فقط
  • حدد البيانات في Word (التي تحتاج إلى تحويلها إلى نص مفصول بـ ,)، صحافة السيطرة-H (البحث والاستبدال)
  • في المربع "Find what" اكتب ^p
  • في نوع المربع "استبدال بـ" ,
  • حدد "استبدال الكل"

64
2018-06-05 05:24



هذا يعمل ببراعة. شكر! - Michael
إجراء 1+ لنفس الحل "الرسمي" من قِبل Microsoft: support.microsoft.com/kb/819964 - Neo
حل لطيف جدا ... :-) - Saravanan


أنا في الواقع وضعت للتو وحدة نمطية في VBA الذي يفعل كل هذا العمل. يستغرق قائمة بلدي تراوحت وينشئ سلسلة مفصول بفواصل الإخراج في الخلية التي اخترتها:

Function csvRange(myRange As Range)
    Dim csvRangeOutput
    Dim entry as variant
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & entry.Value & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function

إذن ، في زنزانتي ، أنا فقط وضعت =csvRange(A:A) ويعطيني قائمة مفصولة بفواصل.


21
2018-02-03 14:10



آه .. قريب جدا من إجابتي ، لكني أحب تطبيقك. - mpeterson


إذا كان لديك Office Excel Excel ، فيمكنك استخدام TEXTJOIN ():

=TEXTJOIN(",",TRUE,A:A)

enter image description here


16
2018-01-25 18:05



في احسن الاحوال! بسيط! شكر. - Amy Patterson


قد يكون أسلوب بديل هو لصق عمود Excel في هذه الأداة في المتصفح:

convert.town/column-to-comma-separated-list

يقوم بتحويل عمود من النص إلى قائمة مفصولة بفواصل.

نظرًا لأن المستخدم يقوم بالنسخ واللصق إلى برنامج آخر على أي حال ، فقد يكون ذلك سهلاً بالنسبة لهم.


10
2018-04-22 20:46





هل يمكن أن تفعل شيئا من هذا القبيل. إذا كنت لا تتحدث عن جدول بيانات ضخم ، فسيؤدي ذلك "حسنًا" ...

  • Alt-F11 ، قم بإنشاء ماكرو لإنشاء القائمة (انظر الكود أدناه)
  • قم بتعيينه إلى الاختصار أو زر شريط الأدوات
  • يقوم المستخدم بلصق عمود أرقامهم في العمود A ، ويضغط على الزر ، وتنتقل قائمتهم إلى الخلية B1.

هنا هو رمز الماكرو VBA:

Sub generatecsv() 

Dim i As Integer
Dim s As String

i = 1

Do Until Cells(i, 1).Value = ""
    If (s = "") Then
        s = Cells(i, 1).Value
    Else
        s = s & "," & Cells(i, 1).Value
    End If
    i = i + 1 
Loop

Cells(1, 2).Value = s

End Sub

تأكد من تعيين تنسيق الخلية B1 على "النص" أو ستحصل على رقم مفسد. أنا متأكد من أنه يمكنك القيام بذلك في VBA كذلك ولكن لست متأكداً كيف في هذه اللحظة ، وأريد العودة إلى العمل. ؛)


7
2018-02-02 19:12





استخدم vi ، أو vim لوضع ببساطة فاصلة في نهاية كل سطر:

%s/$/,/

لتوضيح هذا الأمر:

  • % يعني القيام بالإجراء (مثل البحث عن واستبدال) إلى جميع الأسطر
  • s يشير إلى الاستبدال
  • / يفصل بين الحجج (أي ، s/find/replace/options)
  • $ يمثل نهاية السطر
  • , هو النص البديل في هذه الحالة

6
2018-02-06 22:53



متفق عليه. ليس حتى قريب - muncherelli
لا أوافق على التعليقات بسبب السياق. عادةً ما يكون الشخص الذي لديه حساب مستخدم متميز هو من النوع الذي يستخدم vim. - uniquegeek
لكنني استخدم ViM وأعتقد أن الفكرة الأساسية مفيدة. انتهى بي الأمر إلى حل المشكلة عن طريق استخدام الفكرة ومحرر نص بسيط. - Nigini


يمكنك استخدام دليل How-To Geek's حول تحويل الصف إلى عمود وعكسه ببساطة. ثم تصدير البيانات كـ csv (تنسيق مفصولة بفواصل) ، ويكون لديك قائمة بالنصوص الفاصلة المنقحة! يمكنك نسخ من المفكرة ووضعها مرة أخرى في التفوق إذا كنت تريد. أيضًا ، إذا كنت تريد مسافة بعد الفاصلة ، فيمكنك إجراء ميزة البحث والاستبدال ، مع استبدال "،" بـ "،". امل ان يساعد!


2
2018-02-02 16:12



التصدير إلى CSV يتجاوز ما يمكن لهذا المستخدم فعله. أحتاج أن يكون نقطة وانقر داخل اكسل. - muncherelli


muncherelli ، أنا أحب إجابتك ، وأنا أعدل ذلك :). مجرد شيء بسيط ، هناك أوقات سحب البيانات من ورقة واستخدامها للاستعلام عن قاعدة بيانات. أضفت معلمة اختيارية "textQualify" تساعد في إنشاء قائمة مفصولة بفواصل قابلة للاستخدام في استعلام.

Function csvRange(myRange As Range, Optional textQualify As String)
    'e.g. csvRange(A:A)  or csvRange(A1:A2,"'") etc in a cell to hold the string
    Dim csvRangeOutput
    For Each entry In myRange
        If Not IsEmpty(entry.Value) Then
            csvRangeOutput = csvRangeOutput & textQualify & entry.Value & textQualify & ","
        End If
    Next
    csvRange = Left(csvRangeOutput, Len(csvRangeOutput) - 1)
End Function

2
2018-04-08 15:54





قمت بتحسين الفرعي generatecsv () للتعامل مع ورقة إكسل التي تحتوي على قوائم متعددة مع خطوط فارغة تفصل كل من عناوين كل قائمة والقوائم من عناوينها. مثال

list title 1

item 1
item 2

list title 2

item 1
item 2

ويجمع بينهم ofcourse إلى صفوف متعددة ، 1 لكل قائمة.

السبب ، كان لدي عميل يرسل لي كلمات رئيسية متعددة في شكل قائمة لموقعهم على شبكة الإنترنت على أساس الموضوع ، يحتاج إلى وسيلة للحصول على هذه الكلمات الرئيسية في صفحات الويب بسهولة. لذا عدّل الروتين وابتكر ما يلي ، كما قمت بتغيير أسماء المتغيرات إلى أسماء مؤثرة:

    Sub generatecsv()

      Dim dataRow As Integer
      Dim listRow As Integer
      Dim data As String

      dataRow = 1: Rem the row that it is being read from column A otherwise known as 1 in vb script
      listRow = 1: Rem the row in column B that is getting written

      Do Until Cells(dataRow, 1).Value = "" And Cells(dataRow + 1, 1).Value = ""
        If (data = "") Then
          data = Cells(dataRow, 1).Value
        Else
          If Cells(dataRow, 1).Value <> "" Then
            data = data & "," & Cells(dataRow, 1).Value
          Else
            Cells(listRow, 2).Value = data
            data = ""
            listRow = listRow + 1
          End If
        End If
        dataRow = dataRow + 1
      Loop

      Cells(listRow, 2).Value = data

    End Sub

1
2017-09-28 17:23





الجواب Sux2Lose هي طريقتك المفضلة ، ولكنها لا تعمل إذا كنت تتعامل مع أكثر من بضعة آلاف من الصفوف ، وقد تنكسر لعدد أقل من الصفوف إذا لم يكن جهاز الكمبيوتر لديك ذاكرات كثيرة متاحة.

أفضل الممارسات في هذه الحالة هي على الأرجح لنسخ العمود ، وإنشاء مصنف جديد ، وامتياز خاص في A1 من المصنف الجديد و Transpose بحيث يصبح العمود الآن صفًا. ثم احفظ المصنف باسم .csv. CSV الخاص بك هو أساسا قائمة مفصولة بفواصل النص العادي التي يمكنك فتحها في محرر نصوص.

ملحوظة: تذكر نقل العمود إلى صف قبل الحفظ كـ csv. وإلا لن يعرف Excel التمسك بفواصل بين القيم.


1
2017-10-06 22:56