2016-04-25 16 views
0

複数の値を持つセルをカンマで区切ったExcelファイルがあります。例えば、ニューヨーク、シカゴ、ロサンゼルス。シカゴ、ロサンゼルス、ニューヨークのようにアルファベット順にこのセルを並べ替えることにしました。これを行う簡単な方法はありますか?複数の値をアルファベット順に並べ替え[Excel]

+0

は明らかにあなたが要求するものを行うマクロのために、この記事を参照してください:https://www.reddit.com/r/excel/comments/3okezz/sorting_words_in_an_excel_cell_by_alphabetical/ –

答えて

2

これを試してください。次のコードは列Aの値を読み取り、列Bに希望の結果を与えます。

Sub SortString() 
    Dim MyArray As Variant, varSwap As Variant 
    Dim i As Long, min As Long, max As Long, LastRow As Long 
    Dim str As String 
    Dim MyRange As Range 
    Dim IsSwapped As Boolean 

    LastRow = Cells(Rows.Count, "A").End(xlUp).Row 

    Set MyRange = Range("A1:A" & LastRow) 
    For Each cell In MyRange 
     MyArray = Split(cell.Value, ",") 

     min = LBound(MyArray) 
     max = UBound(MyArray) - 1 
     Do 
      IsSwapped = False 
      For i = min To max 
       If MyArray(i) > MyArray(i + 1) Then 
        varSwap = MyArray(i) 
        MyArray(i) = MyArray(i + 1) 
        MyArray(i + 1) = varSwap 
        IsSwapped = True 
       End If 
      Next 
      max = max - 1 
     Loop Until Not IsSwapped 

     For i = LBound(MyArray) To UBound(MyArray) 
      Debug.Print MyArray(i) 
      If str = "" Then 
       str = Trim(MyArray(i)) 
      Else 
       str = str & ", " & Trim(MyArray(i)) 
      End If 
     Next i 
     cell.Offset(0, 1).Value = str 
     str = "" 
    Next cell 
End Sub 
+0

ありがとう。これは、セルの最初の値が常に最後に格納されることを除いて、ほとんど機能します。 a、b、f、l、o、u、i、z、x、yはb、f、i、l、o、u、x、y、zを与えます – user30058

+0

@ user30058 - 私にしましょうチェック。 – Mrig

+0

@ user30058 - If If Trim(MyArray(i))> Trim(MyArray(i + 1))Then Thenを使用して、If If MyArray(i)> MyArray(i + 1)Then'の行を置き換えます。スペースで問題が発生している可能性があります。そのことが今働いているかどうかを教えてください。 – Mrig

0

データがA1にあると仮定して、区切り幅の列にテキストを使用し、区切り記号としてカンマを選択します。セルが分割されたら、それらをすべて選択し、アルファベット順に並べ替えます。次に、別のセルの使用で、

=A1 & ", " & B1 & ", " C1 

などです。これをVBAで(あなたのタグごとに)したいのであれば、マクロを記録しながら、あなたの必要に応じて編集するのが良い出発点になります。

EDIT

これはかなりされるものではないが、その出発点は、各行を実行するVBAを使用します。

Dim i As Integer, lastRow As Integer, curRng As Range 

lastRow = Range("A10000").End(xlUp).Row 

For i = 1 To lastRow 
Cells(i, 1).Select 
Set curRng = Range(ActiveCell, ActiveCell.End(xlToRight)) 
    curRng.Select 
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear 
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=curRng, _ 
    SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    With ActiveWorkbook.Worksheets("Sheet1").Sort 
     .SetRange curRng 
     .Header = xlGuess 
     .MatchCase = False 
     .Orientation = xlLeftToRight 
     .SortMethod = xlPinYin 
     .Apply 
    End With 
Next i 
+0

どのように私は、列ごとにアルファベット順に並べ替えるのですか?この例ではB1がニューヨークになり、C1 ChicacoとD1 Los Angelesになります。 B1 Chicago、C1 LA、D1 NYになるにはどうすればいいですか?私は450.000の行を持っていて、セルにはそれぞれ1〜4の値を持つセルがあります。私は行ごとに並べ替えが必要です – user30058

0

再度カンマ区切りリストを作成するには、JOIN機能を使用し、その後、あなたが望む任意の方法で配列をソート、配列の最初の店にあなたのカンマ区切りリストをSPLIT関数を使用します。例えば

:あなたが関数にセルから値の文字列を保存し、コンマのリスト分割をループする必要が

myArray = SPLIT(Cell.Value, ",") 
Call SomeSortFunction(myArray) 
myString = JOIN(myArray, ",") 
Cell.Value = myString 
0

Array = Split(yourString, ",") 

次にそれをループ:

For i = 0 To UBound(Array) 

各値の最初の文字は、

Left(Array(i), Len(Array(i)) - 1) 

アルファベット順に並べ替えることができます。値を交換するにはSUBSTITUTE()関数を使用できます。

関連する問題