- ベストアンサー
エクセルの関数について詳しい方、助けてください!
- エクセルの関数について詳しい方、教えて頂けませんか?
- A1セルに文字列があり、その文字列を複数のセルに分けたい場合、どのような計算式を使用すれば良いですか?
- また、お名前が含まれる文章をA1セルに入力し、そのお名前を分けて他のセルに入れる方法も教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
すべて同じ数式で対応するなら以下のような数式にします。 =MID(A1,開始位置の目印の文字位置+1,目印と目印間の文字数) ここで開始位置は以下の数式で表示できます。 例えば同じセル中に2つ出てくる [ 、や ] の文字位置を調べたいときは、6文字目以降を検索する以下の式を使用します。 =FIND("[",A1,6) したがってB1セルに抽出する「:」tp「[」で挟まれる最初の文字をは以下の式で表示できます。 =MID(A1,FIND(":",A1,6)+1,FIND("[",A1,6)-FIND(":",A1,6)-1) この数式の検索文字部分だけを変更すれば、すべて同じ数式でご希望の表示をすることができます。 C1セル =MID(A1,FIND("[",A1,6)+1,FIND("]",A1,6)-FIND("[",A1,6)-1) D1セル =MID(A1,FIND("]",A1,6)+1,FIND("円",A1,6)-FIND("]",A1,6)-1)*1 E1セル =MID(A1,FIND("x",A1,6)+1,FIND("個",A1,6)-FIND("x",A1,6)-1)*1 今回は関数がご希望のようですが、このようなケースでは検索置換で区切り位置部分を適当な文字(例えば#など)に置換し、置換する文字列の部分に何もいれずに必要のないデータ部分を一括削除して、この文字列を区切り位置機能で分割する方法の方が簡便な場合も多いと思います。
その他の回答 (5)
- kagakusuki
- ベストアンサー率51% (2610/5101)
Q1 以下は、商品名や商品コードに、「円」の文字や「x」の文字が含まれていたり、定価や個数を表す数字の前後に空白を入れ忘れた場合でも、正常に表示する事が可能な関数です。 B1セルの数式 =IF(A$1="","",MID(A$1,7,FIND("[",A$1,7)-1)) C1セルの数式 =IF(A$1="","",MID(A$1,FIND("[",A$1,7)+1,FIND("]",A$1,7)-FIND("[",A$1,7)-1)) D1セルの数式 =IF(A$1="","",VALUE(SUBSTITUTE(MID(A$1,FIND("]",A$1,7)+1,FIND("円",A$1,FIND("]",A$1,7))-FIND("]",A$1,7)-1)," ",))) E1セルの数式 =IF(A$1="","",VALUE(SUBSTITUTE(MID(A$1,FIND("x",A$1,FIND("]",A$1,7))+1,LEN(A$1)-FIND("x",A$1,FIND("]",A$1,7))-2)," ",))) Q2 B1セルの数式 =IF(A$1="","",MID(A$1,7,FIND(" (",A$1)-7)) C1セルの数式 =IF(A$1="","",MID(A$1,FIND("(",A$1)+1,FIND(")",A$1)-FIND("(",A$1)-1))
お礼
kagakusuki様 お返事ありがとうございます。 やってみました。 Q2のC1、そのまま使わせて頂きます。 Q2のB1は、加工できるかやってみますね。ありがとうございます! 詳しく教えて頂いたので、今勉強していますが、なんだかこんがらかってきました。 皆様にご教授頂いたので、なんとかなりそうです。 本当にご協力ありがとうございました。大感謝です!
- layy
- ベストアンサー率23% (292/1222)
VBAも覚えてしまえば、1)も2)も質問する必要が無くなります。 この手の対応で「関数で解決」というのがベストな手段かどうかは検討事項でしょう。 VBAでの方法がまだ理解できていないから、 「関数」という手段しか思いつかなかった、それだけと思われます。 VBAで指定文字数分1文字ずつ処理させれば、 区切り記号のある1文字列を複数項目に分けることは 考えるけどもコマンドそのものはそう難しい話でもない。 VBAで 『キャンディ イチゴ味[CAN-01] 100 円 x 10 個』 は 『キャンディ イチゴ味』と『[CAN-01] 100 円 x 10 個』 そのあとで 『[CAN-01]』と『100 円 x 10 個』 そのあとで 『100 円』と『10 個』 と分けることができる。まずはここまでイメージする。 円や個を取ったりするのはその後で考える。 31文字分繰り返す過程で n文字目が"["なら・・・・B列候補、残りが見つかる n文字目が"]"なら・・・・C列候補、残りが見つかる n文字目が"x"なら・・・・D列候補、残りが見つかる 2)も同じ。 "("が見つかったときが、文字列の分岐。 ------------------------------------------------- 【サンプル】: ファイル名パスからファイル名を取り出す原理を参照すると良い。 Public Function GETFILE(st As Variant) Dim I As Long Dim L As Long Dim WW As String L = Len(st) For I = L To 1 Step -1 If Mid(st, I, 1) = "\" Then Exit For End If Next I If I > 0 Then GETFILE = Right(st, L - I) Else GETFILE = st End If End Function ---------------------- これを実行すると ?GETFILE("c:\aaa.txt") aaa.txt ファイル名が取り出せます。 ---------------------- 「FIND」の多用は、わかりにくくさせるし 何度もカーソルを動かすことであり、処理遅くさせる要因に なりかねないのであまりお勧めでないですね。 ある文字列を複数に分けるには、 「規則的な区切り文字がきちんと存在するか」、で変わります。
お礼
layy 様 お返事ありがとうございます。 今は、サーバから来たメールをそのままコピ&ペしてエクセルに貼り付け、繰り返しの作業はマクロを利用して納品書を印刷したりしています。 が、実際、エクセルのマクロですらまともに使えず、すみません。。。 プログラミングされる方はほんとうにすごいと思います。 せっかく丁寧にアドバイスしてくださったのに、すみません。ありがとうございました。
- kyos554
- ベストアンサー率0% (0/3)
TXT文を入手するのではなく、CSVファイルを入手すべきです。 "[","]","円 x", "(",")"を文字関数で何文字目かを調べ、 FIND()文やFINDB()文で該当文字の位置をそれぞれ調べます。 =FINDB("[",RC[1],1) など。 更にTRIM()関数でスペースを除去すると出来そうです。 ても、そんな手間を掛けるより、 CSVファイルを入手できるよう 関係部署にまずご相談される事をお奨めします。
お礼
kyos554 様 お返事ありがとうございます。 おっしゃるとおりなのですが、入手できるファイル形式が、すべての顧客がひとつのシートになっていて、商品数の数だけ行があり、作業効率が悪いみたいです。 運営者に相談してみたのですが、サポート範囲外と言われてしまいました。 前の会社のものだと横でなく縦に並んでいたので、簡単だったんですよね。。 がんばります。ありがとうございました!
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 Q1が判ればQ2は同じ方法になりますので、 とりあえずQ1の方法です。 コツコツとそれぞれのセルに数式を入力するしかないようなので・・・ 一例です。 B1セルに =LEFT(A1,FIND("[",A1)-1) C1セルに =MID(A1,FIND("[",A1)+1,FIND("]",A1)-FIND("[",A1)-1) D1セルに =MID(A1,FIND("]",A1)+1,FIND("円",A1)-FIND("]",A1)-1)*1 F1セルに =MID(A1,FIND("x",A1)+1,FIND("個",A1)-FIND("x",A1)-1)*1 E1・F1セルの最後の「*1」の部分は数値化するためにつけています。 尚、「x」の部分は「ばつ」として変換しているのか・アルファベットの「x」としているかで違いますのでA列に入力されている「x」にしてください。 そして、エラー処理していませんので、A列が空白の場合はエラーが表示されます。 Q2に関してはこの応用で可能だと思います。 参考になれば良いのですが・・・m(__)m
お礼
tom04 様 お返事ありがとうございます。 >コツコツとそれぞれのセルに数式を入力するしかない そうですね、数学が苦手だったせいか、どうも大変難しく、苦労しています。 ありがとうございます!
- mt2008
- ベストアンサー率52% (885/1701)
関数でやりたいんですね。 あくまでも例と同じ様式の文字列である事が前提です。 Q1の答え B1 =RIGHT(LEFT(A1,FIND("[",A1,2)-1),FIND("[",A1,2)-7) C1 =MID(A1,FIND("[",A1,2)+1,FIND("]",A1,7)-FIND("[",A1,2)-1) D1 =MID(A1,FIND("]",A1,7)+1,FIND("円",A1,7)-FIND("]",A1,7)-1)*1 E1 =MID(A1,FIND("x",A1,7)+1,FIND("個",A1,7)-FIND("x",A1,7)-1)*1 D1とE1で最後に*1 しているのは数値にするためです。 Q2はQ1より単純ですのでQ1の答えを参考にご自分でやって見てください。
お礼
様 お返事ありがとうございます。 やってみました。 B1・C1・D1、そのまま使わせて頂きます。ありがとうございます! 今勉強しています。Q2、やってみているんですが、なかなか難しく、苦労しています。 がんばります!
お礼
MackyNo1様 お返事ありがとうございます。 やってみました。 C1・D1・E1、そのまま使わせて頂きます。ありがとうございます! 詳しく教えて頂いたので、今勉強しています。 Q2、やってみているんですが、なかなか難しく、苦労しています。 がんばります!