0

非常に多くの行を持つテーブルがあります。その構造はこの写真のようです:

ここに画像の説明を入力してください

ご覧のとおり、列Aの名前の間に「または」、「And」があります。これらの列を2つの部分に分割するにはどうすればよいですか。その場合、最初の列にDavid、Tylor、Fred、Jessi、Rolandが含まれ、2番目の列にPeter、Mark、Alfered、Hovard、DAvidが含まれます。

注:行2と5に注意してください。これらの行には、2つの「or」または2つの「and」があります。

編集:私はExcelでそれを行うことを好みます

私が試したこと

考えられる解決策の1つとして、vbaにこの関数があります。

Function udfRegEx(CellLocation As Range, RegPattern As String)

Dim RegEx As Object, RegMatchCollection As Object, RegMatch As Object
Dim OutPutStr As String
Dim i As Integer

i = ActiveWorkbook.Worksheets(ActiveWorksheet.Name).UsedRange.rows.Count
    Set RegEx = CreateObject("vbscript.regexp")
    With RegEx
        .Global = True
        .Pattern = RegPattern
    End With

        OutPutStr = ""
        Set RegMatchCollection = RegEx.Execute(CellLocation.Value)
        For Each RegMatch In RegMatchCollection
            OutPutStr = OutPutStr & RegMatch
        Next
        udfRegEx = OutPutStr

    Set RegMatchCollection = Nothing
    Set RegEx = Nothing
    Set Myrange = Nothing

End Function

この関数は正規表現を使用します。しかし、私はそれを使用する方法がわかりません。

4

3 に答える 3

2

私が言ったように、これにはVBAは必要ありません。Excelの数式も必要なことを実行します。

私の仮定

  1. 列Aにはデータがあります
  2. 列Bと列Cの出力が必要です

この数式をセルB1に貼り付けて、コピーします

=IF(ISERROR(SEARCH(" or ",A1,1))=TRUE,IF(ISERROR(SEARCH(" and ",A1,1))=TRUE,"",LEFT(A1,SEARCH(" and ",A1,1))),LEFT(A1,SEARCH(" or ",A1,1)))

これをセルC1にコピーしてコピーします

=IF(ISERROR(SEARCH(" or ",A1,1))=TRUE,IF(ISERROR(SEARCH(" and ",A1,1))=TRUE,"",MID(A1,SEARCH(" and ",A1,1)+5,LEN(A1)-SEARCH(" and ",A1,1))),MID(A1,SEARCH(" or ",A1,1)+4,LEN(A1)-SEARCH(" or ",A1,1)))

スナップショット

ここに画像の説明を入力してください

于 2012-08-30T16:14:51.680 に答える
1
(\w)+(( or | and ){0,1}(\w)+)*
于 2012-08-30T15:44:06.197 に答える
1

これはコーディングソリューションではありませんが、コードを要求しなかったため(この場合は必要ないため)、「and」および「or」という単語を検索/置換して、区切り文字に置き換えます(たとえば、replaceカンマでそれら)。次に、Excelでデータを選択し、Excelの「テキストから列へ」機能(Excel 2007の[データ]タブ)を使用して、データを異なる列に分割できます。

于 2012-08-30T15:44:35.990 に答える