[[20040813233329]] 『先頭の文字だけを一括で消す方法ありますか?』(アリスト) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『先頭の文字だけを一括で消す方法ありますか?』(アリスト)

[先頭の文字だけを一括で消す方法って出来ますか?]

例えば

 1アポロ
 2サボテン
 3オレ、天使
 4アゲハ蝶
 5ラビュー・ラビュー

これを修正後には

 アポロ
 サボテン
 オレ、天使
 アゲハ蝶
 ラビュー・ラビュー

 だけにしたいと言う事です。
 わかりづらいくてすいません 宜しくお願いします。


 A列に入力済みだとして、隣のB列に=MID(A1,2,100)と入れて、下方にコピーでどうでしょうか。
 A列が必要ないなら、B列をコピー−A列に値の複写してB列の削除
 (川野鮎太郎)


 もし関数ではない方法だとすれば、変更したいセルを選んで−データ−区切り位置
 スペースによって右または・・・・にチェックを入れて−次へ 白い枠に文字が出ますので
 最初の文字と2番目の文字の間をセルでクリック、そうすると以下のように線が出ますので、そのまま完了を押すとふたつのセルに分割されます。
 区切り前        区切り後
 1|アポロ        1  アポロ
 2|サボテン       2  サボテン
 3|オレ、天使      3  オレ、天使
 4|アゲハ蝶       4  アゲハ蝶
 5|ラビュー・ラビュー  5  ラビュー・ラビュー

 必要の無いA列を削除してください。
 (川野鮎太郎)


初めまして 川野鮎太郎様
ご教授ありがとうございました
おかげさまで解決いたしました
本当にありがとうございました!(^o^)


 解決済の件なので、今更なにですが。
私は
=MID(A1,2,LEN(A1)-1)
のような式を考えていましたが川野鮎太郎様の
=MID(A1,2,100)
文字数を100と置かれたのを見て関心させられてしまいました。
EXCELって案外、気をきかしてくれるんですねー。
余談でした。   (SS)


 余談ついでに (^_^;)
=RIGHT(A1,LEN(A1)-1)
=REPLACE(A1,1,1,"")
なども使えそうです・・・(Hatch)


 横から失礼します。。。
 先頭の文字だけでなく、その後も【連番で続いている】と仮定すると
 どうなるのでしょうか?
 がんばって考えた結果...
 =IF(ISNUMBER(LEFT(A1,3)*1),MID(A1,4,100),IF(ISNUMBER(LEFT(A1,2)*1),MID A1,3,100),IF(ISNUMBER(LEFT(A1,1)*1),MID(A1,2,100),A1)))
 こんなに長くなってしまったのですが、どうすればよろしいのでしょう?
 ※ちなみに、連番999までですが。。。

 (川野鮎太郎)さん>数式を少しお借りいたしました^^;A
 (ぽこ)


 =IF(ISERROR(MIDB(A1,2,1)+1),MIDB(A1,2,100),IF(ISERROR(MIDB(A1,3,1)+1),MIDB(A1,3,100),IF(ISERROR(MIDB(A1,4,1)+1),MIDB(A1,4,100),"")))
とりあえず、1から999までの対応可能です。1000になると空白になります。
大変、格好の悪い式ですが・・・・お恥ずかしい(SS)


 >先頭の文字だけでなく、その後も【連番で続いている】と仮定すると...
 先頭連番が 1 から始まるとして
=TRIM(REPLACE(A1,1,LEN(ROW(A1))," "))
 というのはダメでしょうか。  (jun53)


 なーるほど、行番号という手がありましたか。
jun53様 恐れいりました。(SS)


 (jun53)さん(SS)さん、さすがですね!!
 やっぱり、関数命令の種類が頭に入っていないとダメですね・・・
 勉強になります^^

 そこでさらに、お二人に質問があります。
 ・連番では無い
 ・番号が頭についていない場合もある
 以上の条件のときは、どうなりますでしょうか?

 ちなみに自分が作ったものは、IFの最後にA1にしてあるので
 出来ましたが、なにぶん長すぎる^^;
 もっともっと勉強させてくださいm(..)m
 (ぽこ)


 "・番号が頭についていない場合もある"というのは
数字が全く存在しないという事でしょうか?。
又は、文字列の中間もしくは最後尾にあるという事でしょうか?。
何れにしても、私の"ラベル"では少々無理っぽいですが確認事項です。
(SS)


 すいません。言葉足らずで・・・
 >数字が全く存在しないという事でしょうか?
 はい。
 数字がない場合(文字のみ)です。
 ※アリストさんの場合は必要ないと思いますが、例題としてです。
 (ぽこ)


 ぽこさん、ゴメンナサイ。書き逃げしてしまいました。

 SSさんが言われるように
 文字列内の数字のみ一気に検索抽出するのは
 標準関数では、できないかもしれません(タブン)
 これができないと、ぽこさんの例題が解決しないようなので
 試していませんが、
 IF を繋げるのが確実かもしれませんね。  (jun53) 


 横から失礼します。こんな感じでしょうか?

=IF(A1="","",RIGHT(A1,LEN(A1)-MAX(ISNUMBER(LEFT(A1,ROW(INDIRECT("A1:A"&LEN(A1))))*1)*ROW(INDIRECT("A1:A"&LEN(A1))))))

 と入力してShift+Ctrl+Enterで配列数式とします。(Yosh!)


 アウチッ ぽこさん、ゴメンナサイの追加です。
 標準関数で、できましたー、わたしじゃないけど...ガックシ!

 Yosh!さん、流石素晴らしいです。

 Yosh!さん、夏休みはお済みですか?  (jun53)


 Excelって奥が深いですねー。私も標準関数じゃあ無理かな、なんて諦めていました。
Yosh!さん助け舟ありがとうございました。
他の先生方も、はやく学校へ帰ってきてくださーい。
先生方の留守中に難問が出てきそうな気配でーす (~o~) 
                   (SS)

 少しいない間に面白いことされてますね^^;
 こんな風にたまには課題を出していつも回答されてる方のいろんな意見、
 回答例みたいなもので話すのも良いかもしれませんね^^
 (川野鮎太郎)


 junさん、SSさん、横からお邪魔しました^^
 私の夏休み、まだずっと先です^^;
(Yosh!)


 みなさん、おはよ〜ございます^^

 (Yosh!)さん、さすが〜 
 無理なのかな〜と、少し思っていましたが出来るものなんですね^^

 (川野鮎太郎)さん>ここは学校ですから、こういうのがあってもいいかな〜って
 前から、思ってました^^
 こうすれば、私をはじめとする初心者にはいろいろな考え方が身に付くかなって^^

 校長先生へ
 こんなコーナー(企画)はいかがでしょうか?
(ぽこ)


 (Yosh!)さんに質問があります。
 >=IF(A1="","",RIGHT(A1,LEN(A1)-MAX(ISNUMBER(LEFT(A1,ROW(INDIRECT("A1:A"&LEN(A1))))*1)*ROW(INDIRECT("A1:A"&LEN(A1))))))
                                ~~~~~~~~~~~~~~~~~~~~~~
 の部分が、何を意味しているのか理解できません・・・ 
 ヘルプ等も参照してみたのですが、頭から湯気が出そうです(??)
 初心者の私にもわかるように教えていただいてもよろしいでしょうか?
 (沸騰中ぽこ) 


 INDIRECT("A1:A"&LEN(A1)) の部分を説明すればよろしいですか?

 INDIRECT関数は与えられた文字列をそのままセル参照として扱ってくれます。
今回の式でINDIRECTに与えられた文字列は "A1:A"&LEN(A1) です。
LEN(A1)はA1の文字数が返るので、A1が 1アポロ なら4文字なので4になります。
この場合 "A1:A"&4 となるので、INDIRECT("A1:A4") と同じ意味になり、
これをROW(INDIRECT("A1:A"&LEN(A1)))とすると、ROW(A1:A4)とするのと同じ事になります。
つまり、ROW(A1:A4) の4をA列の文字数によって可変にしたかったので、
今回はINDIRECTとLENを組み合わせて使用したという事です。

 こんな説明で良いでしょうか?(Yosh!)


 (Yosh!)さん、ありがとうございます。
 何となくわかったのですが、上記で言うと
 なぜ ROW(A1:A4) → A1:A4の範囲の行番号が必要になってくるのか?
 仮に、A6 = 10ぽこ だった場合は、ROW(A1:A4) ということですよね?
 そうすると、A6を参照することが出来ない気がするのですが・・・なぜ?

 もちろん、(Yosh!)さんの作った数式は、完璧でした。
 だからこそ、内容まで知りたくなりました。
 配列数式が関係しているのですか?

 勉強不足は百も承知ですが、是非々ご教授くださいm(..)m
 (ダメぽこ)


 ROWを使用した理由は、ぽこさんのお察しのとおり配列数式に関係しています。
ROWはセルの行番号を返す関数です。ROW(A1)なら1、ROW(A4)なら4になります。
これを配列数式の中でROW(A1:A4)にすると1,2,3,4と順に計算されます。
この式では、この1から順に大きくなる数字をLEFT関数の桁数に使いたかったのです。
A1が 10ぽこ の場合
LEFT(A1,ROW(A1)) = LEFT(A1,1) = 1
LEFT(A1,ROW(A2)) = LEFT(A1,2) = 10
LEFT(A1,ROW(A3)) = LEFT(A1,3) = 10ぽ
LEFT(A1,ROW(A4)) = LEFT(A1,4) = 10ぽこ
と配列数式の中で文字列が返ってきます。

 これをISNUMBERで数値かどうかを判断させると、
ISNUMBER(LEFT(A1,ROW(A1))*1) = ISNUMBER(1)      = TRUE 
ISNUMBER(LEFT(A1,ROW(A2))*1) = ISNUMBER(10)     = TRUE 
ISNUMBER(LEFT(A1,ROW(A3))*1) = ISNUMBER(10ぽ)   = FALSE
ISNUMBER(LEFT(A1,ROW(A4))*1) = ISNUMBER(10ぽこ) = FALSE
と、10までは数値と判断しますが、3桁目の ぽ が入った時から
数値ではなく文字列と判断されるようになります。

 数式ではこれに *ROW(A1:A4)をしています。TRUEは1,FALSEは0として計算されるので、
TRUE *ROW(A1) = 1
TRUE *ROW(A2) = 2
FALSE*ROW(A3) = 0
FALSE*ROW(A4) = 0
になります。

 さらにこの結果からMAX関数で最大値を返させているので、返る値が2になります。

 その結果RIGHT関数の数式が、
RIGHT(A1,LEN(A1)-2) = RIGHT(A1,4-2) = RIGHT(A1,2) になり、
10ぽこ の右から2文字を取り出す数式となります。

 ちょっと説明が長くなってしまいましたね^^;
 これでお判りいただけたでしょうか?(Yosh!)


 横から失礼します。
「数字+文字」の文字列から数字を取り出す数式として
=LOOKUP(99^9,--LEFT(A1,ROW(1:16)))
が、過去ログ↓にあります。
[[20040629091848]]『文字列を計算したい』(ひかる)
 
原理は(Yosh!)さんの提示された式と同じような気がします。
参考になりますでしょうか?   (Hatch)

 お礼が遅くなってしまい、すいません。
 (Yosh!)さん、(Hatch)さん、ありがとうございます。

 (Yosh!)さん>すっごくわかり易いです!!!
 なるほど〜  だから、配列数式なんですね^^
 そこに来て、MAXか〜 ウンウンわかってきた^^

 (Hatch)さん>LOOKUP関数でそんなことまでできるとは・・・
 またまた勉強になりました^^

 (ぽこ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.