it-swarm.asia

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

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

1234
123461
123151
11321

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

1234,123461,123151,11321

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

119
muncherelli

أنا في الواقع مجرد إنشاء وحدة نمطية في 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) وهي تعطيني قائمة محددة بفواصل.

22
muncherelli

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

B1:

=A1

B2:

=B1&","&A2

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

140
Sux2Lose
  • انسخ العمود في Excel
  • افتح كلمة
  • "لصق خاص" كنص فقط
  • حدد البيانات في Word (تلك التي تحتاج إلى تحويلها إلى نص مفصول بـ ,) ، اضغط Ctrl-H (بحث واستبدال)
  • في المربع "ابحث عن" ، اكتب ^p
  • في المربع "استبدال بـ" ، اكتب ,
  • حدد "استبدال الكل"
74
Michael Joseph

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

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

 enter image description here

27
Scott Craner

تتمثل الطريقة البديلة في لصق عمود Excel في أداة المتصفح هذه:

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

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

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

10
sunset

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

  • 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
mpeterson

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

%s/$/,/

لشرح هذا الأمر:

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

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
mitch

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

2
Duall

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

list title 1

item 1
item 2

list title 2

item 1
item 2

ويجمعها فكورسي في صفوف متعددة ، 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
roger lamb

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

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

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

1
samthebrand