• ベストアンサー

【Excel】 文字の前後を入れ替えたい

  A                 B 1 《ABC》【あいう】ABCDE  【あいう】《ABC》ABCDE 2 《EFG》【えおかき】FGHI  【えおかき】《EFG》FGHI 3 《HIJK》【くけ】JKLMNO   【くけ】《HIJK》JKLMNO 4 《LM》【こさし】PQRS    【こさし】《LM》PQRS 5 《NOP》【すせ】TUVW    【すせ】《NOP》TUVW A列の文字列で 《***》と【***】を入れ替えて B列のようにするB列の式を教えて下さい。 9千行以上あります。 Excel 2007 です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

2つに分けて考える 【あいう】の部分抜き出し =MID(A1,FIND("【",A1),FIND("】",A1)-FIND("【",A1)+1) ーー 【あいう】を抹消 =SUBSTITUTE(A1,MID(A1,FIND("【",A1),FIND("】",A1)-FIND("【",A1)+1),"") 両者を&で結合 =MID(A1,FIND("【",A1),FIND("】",A1)-FIND("【",A1)+1)&SUBSTITUTE(A1,MID(A1,FIND("【",A1),FIND("】",A1)-FIND ("【",A1)+1),"") ーーー 例データ 《ABC》【あいう】ABCDE   《EFG》【えおかき】FGHI   結果 【あいう】《ABC》ABCDE   【えおかき】《EFG》FGHI  

hee1
質問者

お礼

大変分かりやすかったです。 おかげさまで上手く行きました。

その他の回答 (3)

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.4

9000行以上もあるならVBAの方が良さそう。 #以下のコードはExcel2003で確認 Sub Sample()   Dim oRegExp As Object   Dim oRepA As Object   Dim oRepB As Object   Dim sRepA, sRepB, sTarget   Dim nLast, nRow      Set oRegExp = CreateObject("VBScript.RegExp")   Application.ScreenUpdating = False  With oRegExp     nLast = Range("A1").End(xlDown).Row     For nRow = 1 To nLast       sTarget = Range("A" & nRow).Text          '《…》の中を取り出す       .Pattern = "《.*》"       Set oRepA = .Execute(sTarget)          '【…】の中を取り出す       .Pattern = "【.*】"       Set oRepB = .Execute(sTarget)       '《…》【…】が一個づつある場合のみ処理       If oRepA.Count = 1 And oRepB.Count = 1 Then              '《…》の中を置換         sRepB = Mid(oRepB(0), 2, Len(oRepB(0)) - 2)         .Pattern = "《.*》"         sTarget = .Replace(sTarget, "《" & sRepB & "》")                '【…】の中を置換         sRepA = Mid(oRepA(0), 2, Len(oRepA(0)) - 2)         .Pattern = "【.*】"         sTarget = .Replace(sTarget, "【" & sRepA & "】")                '置換したものをB列に         Range("B" & nRow).Value = sTarget       End If       Set oRepA = Nothing       Set oRepB = Nothing     Next nRow   End With   Set oRegExp = Nothing   Application.ScreenUpdating = True    End Sub

hee1
質問者

お礼

VBAまで組んで頂きまして、本当にありがとうございました。 今回は上手く行きました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

B1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(OR(ISERROR(FIND("【",A1)),ISERROR(FIND("《",A1))),"",MID(A1,FIND("【",A1),FIND("】",A1)-FIND("【",A1)+1)&LEFT(A1,FIND("》",A1))&MID(A1,FIND("】",A1)+1,20))

hee1
質問者

お礼

いろいろな式が作れるのですね。 ありがとうございました。

  • kybo
  • ベストアンサー率53% (349/647)
回答No.1

以下の様な式でよろしかと思います。 =MID(A1,FIND("【",A1),FIND("】",A1)-FIND("【",A1)+1)&LEFT(A1,FIND("》",A1))&RIGHT(A1,LEN(A1)-FIND("】",A1))

hee1
質問者

お礼

ありがとうございました。 大変上手く行きました。

関連するQ&A