オフィス環境では、他の人が作成したExcelファイルを操作することも珍しくありません。これらのファイルの一部は、作成するファイルとはかなり異なる場合があります。たとえば、最初の列の最初の行に人の名が含まれ、次に2番目の行に姓が含まれているファイルを継承する場合があります。 (ユーザーがAlt + Enterキーを押して、同じセル内の2番目の名前から名を分離しました。)人の姓に基づいてワークシートの行を並べ替える必要がある場合はどうなりますか?

おそらく、このようなタスクを完了するための最良の方法は、ワークシートに新しい列(列B)を挿入することです(この列は非表示になっている可能性があるため、通常のワークシートでの作業時や印刷時に表示されません)。次に、数式を列Bの各セルに配置する必要があります:

=RIGHT(A2,LEN(A2)-FIND(CHAR(10),A2))

明らかに、セル参照は列Bに配置されると変更されます。この数式では、FIND部分がAlt + Enter文字の位置を決定します(この文字の文字コードは10です)。 RIGHT関数は、Alt + Enter文字に続く文字から始まるセル内の文字を返します。このソリューションの結果、列Bには最初の列の2行目の情報が含まれます。その後、列Bの情報に基づいて簡単に並べ替えることができます。

このソリューションでは、列Aの各セルに2行しかないという1つの仮定があります。多い、または少ない場合、ソリューションはより困難になります。その場合、最良の(そして最も簡単な)解決策は、ワークシートを再フォーマットして、ソートキーがすべて単独で列に含まれるようにすることです。それが(何らかの理由で)不可能な場合は、次のユーザー定義のVBA関数を使用できます。

Function SecLine(x) As String     Dim B1 As Integer     Dim B2 As Integer          B1 = InStr(x, Chr(10))

B2 = InStr(B1 + 1, x, Chr(10))

If (B1 + B2) > 0 Then         If B2 > 0 Then             SecLine = Mid(x, B1 + 1, B2 – B1 - 1)

Else             SecLine = Mid(x, B1 + 1)

End If     End If End Function

このルーチンを使用するには、列Bのセルに以下を含めるだけです。

=SecLine(A2)

セルA2(この場合)の行数に関係なく、関数は2行目の値を表す文字列を返します。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(2252)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。