エクセルの文字列関数を使っての操作



◇-?エクセルの文字列関数を使っての操作-武藤-11/16-15:53(90)-No.307307
 ┣?!Re:エクセルの文字列関数を使っ...-半端者-11/16-16:17(90)-No.307310
 ┃┗?!!追記...-半端者-11/16-16:26(90)-No.307314
 ┃ ┗?!!?Re:追記...-武藤-11/16-16:56(89)-No.307320
 ┃  ┗?!!?!Re:追記...-半端者-11/16-17:25(89)-No.307330
 ┃   ┗?!!?!【解決】Re:追記...-武藤-11/16-20:53(85)-No.307369
 ┗?!Re:エクセルの文字列関数を使っ...-白茶-11/16-17:09(89)-No.307327
  ┗?!-Re:エクセルの文字列関数を使っ...-武藤-11/16-17:37(89)-No.307333
   ┗?!-!Re:エクセルの文字列関数を使...-白茶-11/16-17:45(89)-No.307336
    ┗?!-!!で、別案です。...-白茶-11/16-18:22(88)-No.307340
     ┗?!-!!【解決】Re:で、別案です。...-武藤-11/16-20:50(86)-No.307368

▲このページのトップに戻る
307307エクセルの文字列関数を使っての操作武藤 2005/11/16-15:53

メーカー名: レノボ(lenovo) 元アイビーエム(IBM)
OS名:WindowsXp
パソコン名:ThinkPad R50e
ソフト名:Excel2000
使用回線:その他回線 LAN
--
一つのセル内にある用語の中に含まれている、最後の「|」から右側の単語を
抜き出すという作業をしなければいけないのですが、、、。

具体例は、

セルA1に、 えんぴつ|消しゴム|確保
セルA2に、 ボールペン|マジック|必要|人数
セルA3に、 えんぴつ|消しゴム|使用|頻度|調べ|中
セルA4に、 ボールペン|えんぴつ|その他|雑貨|年間|使用|回数
セルA5に、 弁当|持参|日
      
となっていて、最後の「|」で区切られた右側にくる単語を抜き出し、

セルB1に、 確保
セルB2に、 人数
セルB3に、 中
セルB4に、 回数
セルB5に、 日

としたい。

仕事仲間にマクロで処理できると言われたのですが、できれば関数で処理
したいと思っています。

よろしくお願いします。


▲このページのトップに戻る
307310Re:エクセルの文字列関数を使っての操作半端者 2005/11/16-16:17

記事番号307307へのコメント
武藤さんは No.307307「エクセルの文字列関数を使っての操作」で書きました。

最後尾の文字列が2文字と決めて、
・「中」や「日」は、その文字の前後いずれかに1文字分のスペースを入れて2文字
 とする。

B1のセルに「=RIGHT(A1,2)」と入れて、B列の最終行までコピー。

▲このページのトップに戻る
307314追記半端者 2005/11/16-16:26

記事番号307310へのコメント
半端者さんは No.307310「Re:エクセルの文字列関数を使っての操作」で書きました。
かなり行数が多く、A列の「中」「日」の前後いずれかにスペースを入れるのが
面倒くさければ、

A列の項目記号のところでクリック(A列全体が反転)して、
[編集]→[置換]→[検索する文字列]に「中」と入力
    同     [置換後の文字列]に「中 」と入力
→「全て置換」をクリック

以下、「日」も同上

▲このページのトップに戻る
307320Re:追記武藤 2005/11/16-16:56

記事番号307314へのコメント
半端者さんは No.307314「追記」で書きました。

ありがとうございます。

早速やってみたところ、最後の用語が3文字とりたいものや、8文字だったなど、
最後の「|」からの文字数がまちまちだったため、
長い単語の例としては、
「オペレーション」と、したいところが、「ョン」となってしまい
ました。

もちろん、例に挙げたとおり1〜2文字が一番多いように思うのですが、データが
10,000行に近いので、確認が困難です。

また、置換してのスペース入れは、置換したい種類が多いので、またこれも
困難です。

解決法はあるでしょうか?

▲このページのトップに戻る
307330Re:追記半端者 2005/11/16-17:25

記事番号307320へのコメント
武藤さんは No.307320「Re:追記」で書きました。
そのファイルの使い方によりけりですが、裏技で。

1.そのファイルのA項目の「|」を「 (スペース)」に置換え
 (先に回答した方法で、1発で置換えはできるはず)

2.その入力されているEXCELのファイルを「スペース区切りテキストファイル形式」
 (拡張子:prn)で保存

3.保存した(拡張子:prn)のファイルを開く(スペース区切りを指定)

4.開いたファイルは、一番右側の列に表示させたい文字列が入っているはず

使えるかどうかは、その元ファイルに他のデータが入っているか、ただ単に目的の
文字列を単一項目に表示できれば用が足りるのかで違ってきます。

▲このページのトップに戻る
307369Re:追記武藤 2005/11/16-20:53

記事番号307330へのコメント
半端者さんは No.307330「Re:追記」で書きました。

早速、技を使わせていただきました。
裏技、教えていただけてよかったです。
データはきれいに仕上がりました。ありがとうございました。

他の業務が入ってしまい、ご連絡遅くなったことをお詫びします。


▲このページのトップに戻る
307327Re:エクセルの文字列関数を使っての操作白茶 2005/11/16-17:09

記事番号307307へのコメント
武藤さんは No.307307「エクセルの文字列関数を使っての操作」で書きました。

こんにちは。

関数でこなすなら、

B1=RIGHT(A1,LEN(A1)-MAX(IF(MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1)="|",ROW(OFFSET($A$1,,,LEN(A1))))))
を配列数式(確定時に「Ctrl」「Shift」「Enter」同時押し)で。
B1を好きなだけフィルダウン。

なんて、どうでしょうか?

▲このページのトップに戻る
307333Re:エクセルの文字列関数を使っての操作武藤 2005/11/16-17:37

記事番号307327へのコメント
白茶さんは No.307327「Re:エクセルの文字列関数を使っての操作」で書きました。

ありがとうございます。

早速、作業したのですが、取り出したいセルAの中に入っている文字すべてが
そのままセルBに返されてしまいました。

自分事で申し訳ありませんが、よろしくお願いします。

▲このページのトップに戻る
307336Re:エクセルの文字列関数を使っての操作白茶 2005/11/16-17:45

記事番号307333へのコメント
武藤さんは No.307333「Re:エクセルの文字列関数を使っての操作」で書きました。

>取り出したいセルAの中に入っている文字すべてが
>そのままセルBに返されてしまいました

配列数式(確定時に「Ctrl」「Shift」「Enter」同時押し)
にしないと、そうなります。
配列数式にすると、数式バー内の式が「{ }」で囲まれます。
囲まれてなかったら配列数式になってません。



追記:式の解説です。

大枠となる式は
=RIGHT(A1,「A1の総文字数」-「最後の"|"は何文字目」)
です。

MAX(IF(MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1)="|",
ROW(OFFSET($A$1,,,LEN(A1)))))
この部分が「最後の"|"は何文字目」を判定する式です。

MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1)="|"
A1の文字列を一文字ずつ垂直方向の1次元配列に格納し、
(↑あえて難しく表現。補足は後程)
それぞれの要素が"|"と等しいかを判定。

もし(IF)判定がTRUEなら、ROW(OFFSET($A$1,,,LEN(A1)))
で、該当要素番号を返す(ROWを代用)。

返ってきたROWの最大値(MAX)が「最後の"|"は何文字目」の答えです。

補足:
空きセルに
=MID(A1,ROW(OFFSET($A$1,,,LEN(A1))),1)
と入力し、確定せずに「F9」キーを押せば、
「A1の文字列を一文字ずつ格納した垂直方向の1次元配列」
が、どういうものなのか確認できます。
=ROW(OFFSET($A$1,,,LEN(A1)))
も同様です。

▲このページのトップに戻る
307340で、別案です。白茶 2005/11/16-18:22

記事番号307336へのコメント
白茶さんは No.307336「Re:エクセルの文字列関数を使っての操作」で書きました。

この方法は、元データが1列である場合に使えます。
コレがマズい場合は、
目的のデータ1列のみを別ブックにコピペし、
抽出後に元ブックへ戻してください。

今、A列にデータが来ているとします。
A列全体を選択し、「データ」→「区切り位置」で
「区切り位置指定ウィザード」を開きます。

「元データの形式」で「カンマやタブなどの区切り文字によって・・・」
を選択して「次へ」

「区切り文字」の「その他」にチェックを入れて
その横の箱に「|」を入れて「完了」

これで、「|」によってデータが区切られ、
各要素が水平方向に分配されたと思います。

で、Sheet2のA1に
=INDEX(Sheet1!1:1,COUNTA(Sheet1!1:1))
として普通にENTER。
「0」が返って来るまでフィルダウン。

これで、Sheet1の各行にある最後の要素だけが
抽出されていると思います。

「形式を選択して貼り付け」で元のブックに戻して下さい。


▲このページのトップに戻る
307368Re:で、別案です。武藤 2005/11/16-20:50

記事番号307340へのコメント
白茶さんは No.307340「で、別案です。」で書きました。

ご説明ありがとうございます。すみません。
データはきれいに仕上がりました。ありがとうございました。

他の業務が入ってしまい、ご連絡遅くなったことをお詫びします。

A1.本ページは参考になりましたか? 又はアドバイスがありますか?
解決 参考になった 参考にならなかった アドバイスする

A2.何度目の訪問ですか?
初めて来た   数度目(2〜4) 5回以上来ている   管理人:

A3.何か一言どうぞ(アドレスは書くことができません)

A4.アドレスがあればどうぞ(1つまで)


↑↑↑↑よろしければ押してください↑↑↑↑

何か一言(本ページで参考になったならないを含めて残してあります)
◎:解決 ○:参考になった ×:参考にならなかった !:アドバイスあり

参考回数投稿日時何か一言