• ベストアンサー

Excelの置換

すみません、Excelを教えてください。 ↓A1から文字列の項目が縦に並んでいます。先頭の数字(1: )を削除。文末の括弧付き数値をB列に移動したいと思っています。 1: ○○○○○○○○○(981) 2: △△(25) 3: □□□□□□(111) ↓ 2500: ★★★★(1000) 2501: ☆☆☆☆☆☆☆☆☆☆☆☆(299) 置換削除のやり方を教えてください。 ワードで置換削除をやってみましたが、次の行の内容まで削除されてしまい困っています。 文字列の部分的なセル移動はできるでしょうか? 部分的な移動ができない場合、括弧付きの数値で並べ替え等をする方法は無いでしょうか?

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

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

B1セルには =IF(A1="","",MID(A1,FIND(":",A1)+1,FIND("(",A1)-FIND(":",A1)-1)) C1セルには =IF(A1="","",IF(ISNUMBER(VALUE(MID(A1,LEN(A1)-4,1))),MID(A1,LEN(A1)-4,4),IF(ISNUMBER(VALUE(MID(A1,LEN(A1)-3,1))),MID(A1,LEN(A1)-3,3),IF(ISNUMBER(VALUE(MID(A1,LEN(A1)-2,1))),MID(A1,LEN(A1)-2,2),IF(ISNUMBER(VALUE(MID(A1,LEN(A1)-1,1))),MID(A1,LEN(A1)-1,1),""))))) をそれぞれ入力して、B1セルおよびC1セルを選択してそれぞれの式を下方にオートフィルドラッグします。 なお、C1の式では最後に書かれるカッコ内の数値が4桁までに対応しています。5桁もあるのでしたらその分を考慮した式にしてください。

nobchan
質問者

補足

ありがとうございます。ほぼ完璧に変換されました<m(__)m> ずいぶん長い計算式を作らないとできない作業だったのですね。 誤変換はたぶん「括弧の直前に数字か半角記号があるデーター」だと思います。 「4桁まで対応している」とおっしゃる部分だと思います。 ○○12(4)→12(4 ○○2(255)→2(25 ○○213(500)→3(50 ○○2000!(1000)→0!(1 括弧内の数字は「1-1000」までしかありません。括弧の直前にはいろいろな数字や記号が来てしまうと思います。 文字列が数字にくっついてきてしまう誤変換は一つもありませんでした。

その他の回答 (10)

noname#204879
noname#204879
回答No.11

[回答番号:No.8この回答への補足]へのコメント、 》 ずいぶんあっさりとしたご回答ですが… 最初の質問に示された例が「ずいぶんあっさり」していたから、回答もそれで充分かと。情報の出し惜しみはやめませうね。(^_^)

nobchan
質問者

お礼

置換削除のやり方も分からない状態から、みなさまの回答を実行し、その結果を順次ご報告申し上げました。 出し惜しみをしたのではありません。 #8様も、それ以前の回答者の回答があったから、ああした書き方ができたのだと思いますが? いずれにしても、回答をいただきまして、ありがとうございました。一番短い計算式という点では最良の回答だと思いました。 Excelの機能を使った#1様の回答は「わたしでもまた使える」という点で最良だと思います。 最終的に問題解決まで導いてくださった#9様はもちろんベストアンサーです。

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

回答No9です。 後からこんなケースもあると具体的に提示されては、対応に苦慮します。 C1セルには次の式を入力して下方にオートフィルドラッグすればよいでしょう。 =IF(A1="","",IF(ISNUMBER(VALUE(MID(A1,LEN(A1)-4,4))),MID(A1,LEN(A1)-4,4),IF(ISNUMBER(VALUE(MID(A1,LEN(A1)-3,3))),MID(A1,LEN(A1)-3,3),IF(ISNUMBER(VALUE(MID(A1,LEN(A1)-2,2))),MID(A1,LEN(A1)-2,2),IF(ISNUMBER(VALUE(MID(A1,LEN(A1)-1,1))),MID(A1,LEN(A1)-1,1),""))))) B1セルには次の式を入力し下方にオートフィルドラッグします。 =IF(A1="","",SUBSTITUTE(MID(A1,FIND(":",A1),20),"("&C1&")",""))

nobchan
質問者

お礼

ありがとうございました。完璧です。 ほぼ完璧だったので、ついワガママを言って申し訳ありませんでした。

noname#204879
noname#204879
回答No.8

B2: =MID(A2,FIND("(",A2),9)

nobchan
質問者

補足

ありがとうございます。 ずいぶんあっさりとしたご回答ですが、できました(笑) 作業用の列も要らないんですね。 でもやっぱり、データーが整っていない行は無理そうですね。 末尾の(数字)だけ取り出せないかな。 1: ○○○○○○○(○○)(981) ↓ ○○○○○○○ |(○○(9

  • yucco_chan
  • ベストアンサー率48% (828/1705)
回答No.7

#2,3です ペーストは、B1セルに直接せずに、添付の図の位置にペーストして その後に、Shift、Ctrlを押しながらEnterです。 B1が「#N/A」となっている場合は、同じく図の位置で、 左クリックしてからShift、Ctrlを押しながらEnter あ、Excel2003です。

nobchan
質問者

補足

画像付きでご回答ありがとうございます。 やってみましたが、今度は「#REF!」となりました。2007だと違うんでしょうか。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

No.5です! 何度もごめんなさい。 投稿した後でもう一度他の方の方法を参考させてもらおうと 回答を読ませてもらったところ >文字列はA2から入っています >A列に21文字以上のセルがあると正しい結果が得られませんでした という内容がありましたので 補足させていただきます。 前回のC1セルの数式の ROW($A$1:$A$30) という部分はどの行に数式をいれても1から始めてください。 尚 A30 というのは30文字まで対応できます。 それ以上の文字数の場合は行数を増やせばOKです。 どうも何度も失礼しました。m(__)m

nobchan
質問者

補足

ありがとうございます。 ROW($A$1:$A$255)でやってみました。 教えていただいた計算式ですと、↓このような文字列を次のように変換してしまうようです。 ○○○○○○○○○(23) (981) ↓ ○○○○○○○○○ | (23( 元のデーターが整っていないとダメそうですね。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

こんばんは! 参考になるかどうか分かりませんが・・・ ↓のような表で説明させていただきます。 作業列としてB列を使い、B列を参照してC列に表示させるようにしています。 B1セル =IF(A1="","",SUBSTITUTE(A1,LEFT(A1,FIND(":",A1)),"")) C1セルは配列数式になりますので ↓の数式をコピー&ペーストした後に F2キーを押すか、数式バー内で一度クリックして編集可能にした後に Shift+CtrlEnterキーを押してください。 =IF(B1="","","("&MID(B1,MATCH(TRUE,ISNUMBER(MID(B1,ROW($A$1:$A$30),1)*1),0),COUNT(MID(B1,ROW($A$1:$A$30),1)*1))&")") 数式の前後に{ } が入りますので配列数式になります。 B1・C1セルを範囲指定した後に、オートフィルで下へコピーするか 又は、オートフィルの(+)のハンドルでダブルクリック これで希望に近い形にならないでしょうか? 尚、B列を削除してしまうと、参照相手がなくなりエラー表示になりますので、 C列すべてを範囲指定 → B1セルを選択 → 形式を選択して貼り付け →「値」にチェックを入れて OK 以上、参考になれば幸いですが、 他に良い方法があれば読み流してくださいね。m(__)m

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

B列に中の文字列を、C列に括弧の中の数値を表示させるとして、 B1セルには =IF(A1="","",MID(A1,FIND(":",A1)+1,FIND("(",A1)-FIND(":",A1)-1)) C1セルには =IF(A1="","",MID(A1,FIND("(",A1)+1,FIND(")",A1)-FIND("(",A1)-1)*1) をそれぞれ入力して、B1セルおよびC1セルを選択してそれぞれの式を下方にオートフィルドラッグします。

nobchan
質問者

補足

ありがとうございます。できました。 ですがやはり、#1の方に補足した不都合なデーターのせいで、C列が「#VALUE!」になるセルがあります。 なにかうまい方法がありましたら、教えてください。

  • yucco_chan
  • ベストアンサー率48% (828/1705)
回答No.3

#2です。補正というか訂正です。 =1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$256),1)),0),COUNT(1*MID(A1,ROW($1:$256),1))) #2では「$20」が2箇所ありましたが、訂正では「$256」に変えました。 ここは、A列の最大文字数を指定していますので、#2のままでは A列に21文字以上のセルがあると正しい結果が得られませんでした。

nobchan
質問者

補足

ありがとうございます。 WindowsXP Excel2007です。 =1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$256),1)),0),COUNT(1*MID(A1,ROW($1:$256),1))) これをB1にコピペして、shift+enterでよいでしょうか? この段階でB1セルに「#N/A」と表示されます。 このとき、A1セルは空白です。文字列はA2から入っています。 B1セルをドラッグして一番下までコピーしても、全部のセルで「#N/A」と表示されています。 あとはなにをすればよいでしょうか?

  • yucco_chan
  • ベストアンサー率48% (828/1705)
回答No.2

B1のセルに =1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$20),1)),0),COUNT(1*MID(A1,ROW($1:$20),1))) を入力して(コピペ可)ShiftとCtrlを押しながらEnter B1セルをB2からB2501にコピー シート全体をB列で並べ替えをする

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

A列を選択→データ→区切り位置→カンマやタブなど・・・で次へ、その他の欄に「:」を入れ、完了、A列を削除 再度A列を→データ→区切り位置→カンマやタブなど・・・で次へ、その他の欄に「(」を入れ、完了 ☆B列に括弧が必要な場合: C1に「="("&B1」と入れ、下へ数式をコピー→C列コピー→B1で形式を選択して貼り付け→値でOK ☆B列に括弧が不要な場合: B列を選択→編集→置換(Excel2007の場合、ホーム→検索と選択→置換)→検索する文字列に「)」を入れ、置換後の文字列は空欄のまま、すべて置換

nobchan
質問者

補足

丁寧に教えていただきありがとうございました。 やってみたところ、不都合なデーターが見つかりました。 ↓これを区切り位置指定すると、 ○○○○○○○○○ (△△) (981) △△(25) ↓このようなセルになりました。 ○○○○○○○○○ | △△) | 981) △△           |25) C列をコピーしてB列に貼り付ければいいのですが、けっこうな数があったので、なにかうまい方法があれば教えてください。 「B列から数値以外を削除して左詰め」なんてことができるといいのですが。

関連するQ&A

  • エクセル2003で置換

    こんにちは いつもお世話になっています。 B列の特定の複数セルの各一行目に半角の角括弧(ブラケット[ ])に挟まれた文字列があります。 文字列は半角のアルファベットや記号で、文字数は様々です。 一行目には他の文字列もあります。 この文字列を角括弧も含めて削除したいのです。 置換でやろうと思いますが、どのように検索したらよいでしょうか。 他の方法でも構いません。 セルは複数行からなり、一行目以外にも角括弧があります。一行目以外の角括弧は削除したくありません。 わかりづらい表現で恐縮です。情報不足があったら教えてください。 よろしくお願いします。

  • エクセル2003での置換について教えてください。

    エクセル2003での置換について教えてください。 こんにちは いつもお世話になっています エクセル2003での置換について教えてください。 特定の文字列以降の文字列を(特定文字列自身も含めて)削除したいのです。  特定の文字列は二つあります。【@】と【変化】です(【】も含みます)。  この二つの文字列はバラバラに出てきます。一方だけがでてくるセル、両方出てくるセル、両方出てこないセル、があるという意味です。  「*」を各特定文字の後ろに付けて、置換機能で削除していますが、二つの文字列に対して別々にやっています。 これを一度で置換して削除する方法を教えてください。  よろしくお願いします。

  • エクセルVBAで、セルの文末を置換

    エクセルの置換で、セルの文末を 別の文字列に置き換えるにはどういた記述になるのでしょうか?

  • EXCELでの置換でコーテーションを残す方法

    どなたか教えて下さい。 EXCELの置換(「編集」-「置換」)で文字列の置換は出来るのですが、 ” :ダブルコーテーション から ’ :シングルコーテーション に置換したいのですが、その場合、セルの先頭のシングルコーテーションが文字列の始まりと捕らえられ消えてしまいます。 これをそのまま残す方法はありますか?

  • ワードのこの置換方法は?

    WORD2003です。 行の先頭に、「1.」「2.」…「10.」「11.」 というように数字(1から99)とドットがついています。 これを削除したいのですが、どうすればよいでしょうか? 一度の置換でできますか? 行の先頭というのを指定する方法がわかりません。 また「.」は他の部分にもあります。 ↓こんなものが並んでいます。 44. http://www.xxxx.jp/xxxx/aquaweb9/ よろしくお願いします。

  • エクセルの置換

    m行n列の表があります。 第1行はタイトルで、 第2行の各列には (2,a)セルに関するデータが それぞれ入力されています。 第3行以降は、a列にのみコードが入力されていますが、b列以降は空欄です。 第2行のデータ中の (2,a)セルの文字を、 各行について (m,a)セルの文字に置換しながら第2行を各行にコピーして、(3,b)から(m,n)の空欄を埋めて表を完成させたいのです。 できれば、第2行の各列の書式も含めて第3行以降の各列にコピーするというVBAを教えていただきたくよろしくお願いします。

  • エクセルの置換について

    すぐ教えていただきたいんです! エクセルの文字列(この文字列は行ごとにいろんな文字列なんですがその前にある決まった文字列を付け加えたい場合はどのようにしたらいいでしょうか? たとえば置換だと、行に入力したその文字列1パターンしか置換してくれないんですよね? なんだかつたない説明ですいませんが、お分かりになる方教えてください!

  • エクセルの置換で・・

    文字列に書式設定したセルに、01-123といったゼロ始まりの数値が入っています。ハイフンを取りたいため、置換で空白にすると上記の場合、 1123といったように頭のゼロまで消えてしまいます。ゼロを残したままに置換えってできないものなんでしょうか?

  • 置換のことで

    エクセルの置換のVBAのことですが。 あるシートに沢山の文字列が入力されています。 abcという文字列が含まれるセルの最後の部分は、必ず以下のようになります。 カンマ 半角スペース 数字 カンマ 半角スペース 数字  閉じカッコ  ,             13    ,            56       ) 数字はばらばらで、1桁か2桁のどちらかで0はないです。 このような状況で、閉じカッコの左側の数字を全て 1 に置換するVBAが知りたいのですが。

  • エクセル(マクロ)置換2 置換用リストを1行ずつ読み込むには

    おはようございます。 エクセルは使いなれてますがVBAは記録を使っていて 書き換える程度なので調べてもあまり理解できず困ってます。 先程質問して、結合セルの置換に関しては解決したのですが、 もし簡単にできるのであればと質問させて頂きました。 今置換用のシートは A列に置換前の文字 B列に置換後の文字が入ってます。 そして対象のシートが置換されるようになってるのですが、 これが列ではなく 1行目に置換前の文字 2行目に置換後の文字として処理するのには どこを書き換えればよろしいのでしょうか? 色々試しましたがうまくいきませんでした。 実は、1行目に(A1セルに学生名(1)・A2のセルに住所(1))など20個くらい項目があります 2行目以降に5000行程、学生のデータが入ってます。 各会社の履歴書フォーマットは違うのですが、 入力欄が学生名(1)や住所(1)など入っている項目が同じなので 置換しております。 今は、1行ずつ下のデータを置換シートに貼り付けて 履歴書のシートで置換えをして 新しいファイルにコピーし保存して次のデータという アナログな処理をしております。 同じフォーマット(履歴書)でしたらvlookupなどが使えたのですが。。。 フォーマットによって1つのセルに、学生名(1)と住所(1)が両方入っていたりするので諦めました。 対象セルの場所も形も違いますしね・・・ 列で処理していたマクロを参考に下に貼り付けました。 明日の昼までにあと4000行を処理しなければならなくて困ってます。 お手数ですがどうぞよろしくお願いいたします。 Sub 置換() With ThisWorkbook If ActiveSheet Is .Worksheets(1) Then Exit Sub For i = 1 To .Worksheets(1).Range("A500").End(xlUp).Row ActiveSheet.Range("A1:Z200").Replace _ What:=.Worksheets(1).Range("A" & i).Value, _ Replacement:=.Worksheets(1).Range("B" & i).Value, _ LookAt:=xlPart, SearchOrder:=xlByColumns Next End With End Sub

専門家に質問してみよう