• ベストアンサー

【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 です。 よろしくお願いします。

  • hee1
  • お礼率32% (137/422)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答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

  • EXCELで特定の文字を含んでいるかどうか

    もう1つ質問です。 下記のようなデータがあります。 (1表) AB_CDE_2345 CD_EFG_567 EFG_HIJK_890 LM_NO-p_UU_123 QRS_TU-VZ_456 AB_CDE_345 EFG_JJK_123 ・ ・ (2表) AB_CDE EFG LM_NO-p 1表のデータそれぞれが2表にある特定の文字列を含んでいるかどうか 調べたい場合、どのようにしたらよいでしょうか。 1表は1000行、2表は20行くらいあります。

  • 【Excel】複数条件でのLookup

    最近LOOKUP関数の存在を知ったのですが、 この条件を複数にしたような動作をする関数はないでしょうか。 abc,100,qwe abc,200,aaa efg,100,zsc efg,150,ooo という表(A1:C4)があったときに A6:abc B6:200 と入力したときに C6:aaa が自動的に入るようにしたいのです。 A列とB列の組み合わせが重複することはありません。 よろしくおねがいします。

  • 行頭と行末に文字追加

    文字変換がうまくいきません。 sedとawkもしくはperlを使ってなんとかならないでしょうか? 行の行頭と行末を " で囲みたいのですが。 ------test.txt----- abc cde fgh hijk lm nopq rstu vwx y z ------test.txt---- 以下のように。 "abc cde fgh" "hijk lm" "nopq rstu vwx y z" よろしくお願いします。

    • ベストアンサー
    • Perl
  • エクセル セルから文字の抜き出しについて

    エクセル(多分2003)で、セルの中に任意の文字列があり、ピリオド(ドット?)で分かれてる部分を抜き出す作業をしています。 例)セルA1 ABCD.EFG.HIJK 上記からABCDを抜き出す場合、 =MID(A1,1FIND(".",A1,1)-1  (もしくはLEFT) を使えば、最初の区切りまでが抜き出せるのですが、 中に、ピリオドが含まれていないセルがあります。 例)セルA5 LMNOPQR その場合、上記の式ではエラーになってしまいます。 IF か ISERROR を使えば出来るのだとは思うのですが、 そこで行き詰ってしましました。 関数を理解してないからなのですが、教えていただければ助かります。 あと、もし、2つ目の部分(A1だとEFGの部分)とか抜き出す方法も分かれば教えてください。 よろしくお願いたします。

  • EXCELで特定の文字を含むデータの個数について

    下記のようなデータがあります。 (1表) AB_CDE_2345 CD_EFG_567 EFG_HIJK_890 LM_NO-p_UU_123 QRS_TU-VZ_456 AB_CDE_345 EFG_JJK_123 ・ ・ (2表) AB_CDE EFG LM_NO-p 1表のデータで2表にある特定の文字を含むデータの数を特定の文字ごとに数えたいです。 実際には1表は1000行くらい、2表は20行くらいあります。 どのような方法が効率的でしょうか?アドバイスお願いいたします。 特定の文字は文字頭からの場合と文字の途中にある場合があります。 また、ACCESSの使用も可能です。 よろしくお願いいたします。

  • 【Excel】たくさんの文字をつなげたい

    こんにちは A2から横に 230列並んだセルの文字列をつなげたいのですが、 =A2&B2&C2&D2・・・&HV2 とする以外の簡単な式はないでしょうか。 Excel2013です。

  • excel2003で複数条件

    A列にA~Gのアルファベットかブランク、B列に数字(0~5)かブランクが入っています。 A列にアルファベット、B列に0が入っている行を抽出し、 A列とB列がAと0、BとO、CとO・・・の行がそれぞれABCごとに何個あるかカウントしたいのですが、 どのような論理式を作ればよいでしょうか? なおexcel2003を使用しておりますのでcountifとsumproductは使うことはできますが、countifsを使うことはできません。 よろしくお願い致します。。

  • PHP 正規表現による文字列の抜き出しについて

    PHP 正規表現による文字列の抜き出しについて 初歩的な質問で申し訳ありません。いくつかググったのですが、それでも自分の求める形を見つけられず質問させて頂きました。 「あいうえおかきくけこさいすせそ $abc12345678 $99999 たちつてと」 このような文字列の時に、 『$abcで始まって半角スペースで終わる所までの部分を抜き出す』には、 どのように記述すれば宜しいでしょうか。 (上記の文字列の場合は、「$abc12345678」を抜き出したいことになります。) よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字列に数字を含むセルを調べたい

    Excel2007を使っています。 A列の文字列に数字を含む場合、B列に「含む」と表示させたいです。 どういった関数でできるのでしょうか? A列    B列 ABC1   含む DEFG 23HIJK  含む I4M5N   含む OPQ RSTUV W6X    含む 7YZ8    含む

  • 文字列のswap

    文字列をswapするプログラムを作りたいと思っています。 やってみると、最初の一文字しかswapされません。 どうしてこれではいけないのでしょうか? よろしくお願いします。 以下が作ったプログラムです。 #include<stdio.h> void swap(char *a,char *b); int main() { char a[2][5]={"abc","efg"}; printf("befor a[0]:%s a[1]:%s?n",a[0],a[1]); swap(&a[0],&a[1]); printf("after a[0]:%s a[1]:%s?n",a[0],a[1]); } void swap(char *a,char *b) { char *tmp; tmp=*a; *a=*b; *b=tmp; } 実行結果は befor a[0]:abc a[1]:efg after a[0]:ebc a[1]:afg となります。 befor a[0]:abc a[1]:efg after a[0]:efg a[1]:abc となって欲しいです。

専門家に質問してみよう