• ベストアンサー

EXCELの関数や数式について

お世話になります。 EXCELで以下の数式が作れなくて困ってます。 Sheet1(すでに作成されている)のA1セルの内容  マウス:590円 キーボード:1,500円 CPU:18,000円  マウス~CPUまでひとつのセルに入力されてます。 これを、Sheet2のセルAに”商品名” セルBに”価格の数字”が自動的に代入されるようにしたいと思ってます。 数字の桁は最高で8桁までです。 Sheet2    セルA    セルB   1  マウス     590   2  キーボード  1,500   3  CPU     18,000   よろしくお願いいたします。

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

>実は、別な表でも応用が利くため、式を作りたいという訳があります。 >マウス:590円 キーボード:1,500円 CPU:18,000円の場合に”マウス:”と”円”の間にある、数字部分だけを取り出す式を作りたいのです。 Sheet1のA1セルに"マウス:590円 キーボード:1,500円 CPU:18,000円"と入力されているものとしてSheet2のA列に商品名、B列に価格の数値のみを左から順に抽出することを検証してみました。 Sheet2のA1へ次の数式を入力します。 =MID(Sheet1!A$1,FIND("→",SUBSTITUTE("円 "&Sheet1!A$1,"円 ","→",ROW())),FIND("←",SUBSTITUTE(Sheet1!A$1,":","←",ROW()))-FIND("→",SUBSTITUTE("円 "&Sheet1!A$1,"円 ","→",ROW()))) Sheet2のB1セルには次の数式を入力します。 =VALUE(MID(Sheet1!A$1,FIND("→",SUBSTITUTE(Sheet1!A$1,":","→",ROW()))+1,FIND("←",SUBSTITUTE(Sheet1!A$1,"円","←",ROW()))-FIND("→",SUBSTITUTE(Sheet1!A$1,":","→",ROW()))-1)) Sheet2のA1とB1を下へ3行目までコピーします。 結果は添付画像のとおりです。 尚、今回の検証では4行目までコピーすると#VALUEエラーになります。 エラーを避けるにはExcel 2007以降のとき、IFERROR関数でエラーのとき空欄にすれば良いでしょう。

jun1010
質問者

お礼

ありがとうございます。 mike_gさんのご回答と合わせてしばらく考えてみます。 商品文字列を任意の値に変えて、他の表にも応用できるかやってみます。 大変参考になりました。 実は、私はもう結構な年寄りで、目は見えないし、頭も働かなくなってきています。 そのせいか、物を調べることが下手になっていて、皆様のご教授は本当にありがたいです。 年に負けずに頭の訓練も兼ねて頑張ってやってみます。 老人は頭働かさないとホント、ボケていきます・・・。 Sheet作って式をコピペで試してみたところ、商品名表示の文字数が合いませんでしたが、これくらいは自分で考えて解決させなくっちゃ、です。 しばらく悩んでみますね。

その他の回答 (6)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.7

>Sheet作って式をコピペで試してみたところ、商品名表示の文字数が合いませんでしたが、これくらいは自分で考えて解決させなくっちゃ、です。 元データの文字で商品名と価格の区切りのコロンと価格の円と次の商品名の区切りの空白が全角文字を混在させると正しい処理ができません。 Sheet1のA1セル全体をASC関数で半角文字に変換するとカタカナの濁点と半濁点で文字数が変化するので区切り位置の誤差が生じます。 元データの前処理をするときはSUBSTITUTE関数で全角空白と全角コロンを半角に置換してください。 Sheet1!A$1    ↓ SUBSTITUTE(SUBSTITUTE(Sheet1!A$1," "," "),":",":")

jun1010
質問者

お礼

おっしゃるとおりの前処理をしたらOKになりました。 ありがとうございました。

noname#204879
noname#204879
回答No.6

[No.2補足]へのコメント、 》 ”マウス:”と”円”の間にある、数字部分だけを取り出す式を作りたいのです 「その式さえ作れれば」好いと仰るなら簡単です。添付図参照 B1: =MID(A1,FIND(":",A1)+1,FIND("円",A1)-FIND(":",A1)-1) 「マウス:でもキーボードでも、文字列を代えて使えると思う」貴方のお手並みを拝見したいものです。

jun1010
質問者

お礼

ありがとうございます。 bunjiiさんのご回答と合わせてしばらく考えてみます。 商品文字列を任意の値に変えて、他の表にも応用できるかやってみます。 大変参考になりました。 実は、私はもう結構な年寄りで、目は見えないし、頭も働かなくなってきています。 そのせいか、物を調べることが下手になっていて、皆様のご教授は本当にありがたいです。 年に負けずに頭の訓練も兼ねて頑張ってやってみます。 老人は頭働かさないとホント、ボケていきます・・・。

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

こんばんは! お望みの方法ではないかもしれませんが、VBAでの一例です。 Sheet1のA列データが何行あっても対応できるようにしてみました。 コロン「:」とスーペースは半角という前提です。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面のカーソルが点滅しているところに ↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, cnt As Long Dim str As String, wS As Worksheet, myArry Set wS = Worksheets("Sheet1") With Worksheets("Sheet2") .Range("A1").CurrentRegion.ClearContents For i = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row If InStr(wS.Cells(i, "A"), ":") > 0 Then myArry = Split(wS.Cells(i, "A"), " ") cnt = (i - 1) * 2 + 1 For k = 0 To UBound(myArry) str = myArry(k) With .Cells(k + 1, cnt) .Value = Left(myArry(k), InStr(myArry(k), ":") - 1) .Offset(, 1) = Replace(Mid(myArry(k), InStr(myArry(k), ":") + 1, Len(myArry(k))), "円", "") End With Next k End If Next i End With End Sub 'この行まで ※ 関数でないのでSheet1のデータ変更があるたびに マクロを実行する必要があります。m(_ _)m

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

>一行にメモ書きのように入力されているものが528行あるため、表にしてそれぞれの品名と金額をまとめたいと思っています。 1行に複数データがあるときは要素ごとに区分けしてから整理する必要があるでしょう。 品名と価格がコロン(:)で区切られ、其々が空白文字で区切られていると言う条件を利用してデータの「区切り位置」を活用すれば商品名、価格、商品名、価格、・・・・のように区分けできます。 その後にC列の商品名とD列の価格の組み合わせをA列の最後尾に移動する操作で良いと思います。 更にE列とF列の組み合わせをA列の最後尾に移動すると言う操作を繰り返せば目的に合うシートになるでしょう。 難しい数式を考えなくても短時間で完了すると思われます。

jun1010
質問者

補足

ありがとうございます。 実は、別な表でも応用が利くため、式を作りたいという訳があります。 マウス:590円 キーボード:1,500円 CPU:18,000円の場合に ”マウス:”と”円”の間にある、数字部分だけを取り出す式を作りたいのです。 その式さえ作れれば、マウス:でもキーボードでも、文字列を代えて使えると思うので。 やはり、かなり複雑で難しい式になってしまうのですね・・・。

noname#235808
noname#235808
回答No.2

おはようございます 台風すごいですね。そちらはいかがでしょうか? ひとつのセルに一行、全部入ってますから、自動で認識させるのは、 だいぶ複雑になります。 エクセルには、メモ帳で書いたようなテキストデータを読み取る 機能があります。 作業としては、 データを全て選択してコピー 新規のメモ帳を開いてペーストしてテキストファイルとして保存 エクセルで保存したテキストファイルを開いて編集 といった流れです 詳しくは以下のリンクで http://span.jp/office2010_manual/excel2010/data/exchange.html

jun1010
質問者

お礼

LipLapさん、ご回答ありがとうございました。 年寄りには、EXCELはややこしやです(苦笑) でも、ボケ防止に役立ってます。

jun1010
質問者

補足

ありがとうございます。 実は、別な表でも応用が利くため、式を作りたいという訳があります。 マウス:590円 キーボード:1,500円 CPU:18,000円の場合に ”マウス:”と”円”の間にある、数字部分だけを取り出す式を作りたいのです。 その式さえ作れれば、マウス:でもキーボードでも、文字列を代えて使えると思うので。 やはり、かなり複雑で難しい式になってしまうのですね・・・。

noname#204879
noname#204879
回答No.1

A列に入力されている商品名は、常に3個ですか? そうでなければ最小個数と最大個数は? 「商品名:価格」間のスペースは必ず半角スペースがあって、その個数は1個ですか?それとも全半角混在で個数もバラバラ?

jun1010
質問者

補足

ご回答ありがとうございます。 一行にメモ書きのように入力されているものが528行あるため、表にしてそれぞれの品名と金額をまとめたいと思っています。 ・A列の商品名 → 13品目 ・”マウス:590円_キーボード:1,500円_CPU:18,000円” のスペース  →スペース(_部)は、半角スペース1か全角スペース1のどちらかで区切られていそうですが、半角2とかの混在はあるかもしれません。  個数は行によりバラバラで最大7個です。(最小1・最大7)   よろしくお願いいたします。

関連するQ&A

  • エクセル関数を教えて下さい。

    こんにちは sheet1に入力されている数字をsheet2に並び変えるのですが、各セルばらばらに文字数が決まっています。そこで10文字しか入らないように設定されてあるsheet1のセルからsheet2に並び変える際に、「前にスペースを入れて右詰め」にするにはどのようにしたらいいですか?? A1    B1    C1(sheet1) (sheet2)A1      B1     C1 1 123456 123456789 ―――> _123456789 _________1 ____123456 (文字数10桁の場合)               ↑半角スペースです。 sheet2のセルに数式を入力したいです。 よろしくお願いします。2007を使っています。

  • エクセルの関数の数式がわかりません。

    A列 B列 1 10 2 20 3 30 a 4 40 エクセルの関数の数式がわかりません。 B1~B4のどこかにaの入力があった場合、aの入力がある行と同じ行のA列に入力されている数字を別のセルに表示させたいです。 例えば、上記のようにB3にaがあるので、A3の30を、別のセルに自動で30と出るようにしたいです。 B列には、ランダムにaを入力しますので、aが別の行にある場合もあります。 この場合の数式を教えてください。 よろしくお願い致します。

  • Excel 数式保護のやり方

    Excelで、シートに数式がたくさん入っています。 Aのシートの、ある一箇所のセルに数字を入れると、 Bのシートから その数字の列の情報を引き出し、 Aシートの各セルに表示する仕組みにしてます。 Aシートは、その一箇所のセル以外は全て数式なので 触れないようにしたいのです。 1つのセル以外を保護で固める方法を教えてください。

  • エクセルで数式をコピーするとき

    Sheet1に入力したものが、Sheet2の指定したセルに自動的に入るようにしたいのですが、量が多いため、入れた数式をコピーするときにわからないことがあります。 Sheet1の、 A3、B3、C3、D3・・・に入力した数字を Sheet2の、 B2、B3、C2、C3・・・に勝手に入ってほしいのです。 Sheet2のB2に、=Sheet1!A3 Sheet2のB3に、=Sheet1!B3 と数式を入れれば反映されるのはわかります。 でも、数式を一つずつ入れていくのはとても大変なので、コピーペーストしたいのですが、 Sheet2のB4には、Sheet1のA4の数字をいれたいのに、エクセル側のかしこい機能なのか、 Sheet1のA5となってしまいますよね。 上記のような規則性で何百行も作っていかないといけないので、どうしたものかと思って困っております。 とても説明が下手でわかりにくいと思いますが、伝わりますでしょうか? 画像を添付しているので、このような形式で左のデータを右のような形式のものに反映させたいです。 やり方を教えて頂けるとても助かります。 宜しくお願いします。

  • エクセルの数式をどのように入れたら良いでしょうか?

    エクセルの数式をどのように入れたら良いでしょうか? いつもこちらでお世話になっています。 今回も教えて頂きたく質問させていただきます エクセルについてですが、 sheet1に入っているデータを sheet2に入力するようにしたいのですが sheet1の A列に1~50までのNo. →A1セルにNo.1、A50セルにNo.50 B列に(1)データ C列に(2)データ があり sheet2の D5のセルに「1」と入力すれば、sheet1!A列の数字とリンクしてsheet!B1の(1)データが入り D6のセルに「10」と入力すれば、Sheet1!A列の数字とリンクしてsheet!C10の(2)データが入る ように設定し、 さらにsheet2のD5,D6のセルに上書きで(繰り返し)数字を入力させ 数式が消えないようにしたいのですが どのようにすればよいでしょうか? 分かりずらい説明で申し訳ありませんが 大変困っているので、アドバイス頂けると助かります。

  • エクセルの数式(関数)の作り方を教えてください

    全く解らないので教えてください!今表を作っています。そこで1つセルに1~10までの数字を入力したらとなりのセルに1,000円、11~20までの数字を入力したらとなりのセルに2,000円、21以上はとなりのセルに3,000円と自動に答えがでてくるような数式はどうればいいのでしょうか?チンプンカンプンで困っております。 また、プルダウンで1~10・11~20・21以上の選択肢があってどれかを選ぶと答えがとなりのセルにでてくる方法はできたりしますか?よろしくお願いいたします。

  • エクセル 数式のコピー・貼付について

    エクセルの数式のコピー・貼付について教えてください。 シート1にデータが1000行くらい入っているとします。    A   B   1 100  5 2 200  3 3 350  9 :  :   : :  :   : シート2のセルA1、A2に =A1*B1 シート2のセルA3、A4に =A2*B2 シート2のセルA5、A6に =A3*B3 と、2行ずつ数式を入れたいのですが、 普通にコピー貼付をするとセル番地が自動的に 増えていってしまいます。 2行ずつ、同じセル番地の数式を入れる方法がありますでしょうか。 どうぞよろしくお願いいたします。

  • エクセルの関数について。

    エクセルの関数。 Sheet1の作業列1のA2セルに =IF(COUNTA(Sheet2!2:2)=0,"",IF(Sheet2!A2="",A1,Sheet2!A2)) →数式1とする 作業列2のB2セルに =IF(A2=$D$2,ROW(),"") →数式2とする という数式を入れA2・B2セルを範囲指定 → B2セルのフィルハンドルで下へコピーしておきます。 (Sheet2の行数以上コピーしておく) そしてE2セルに =IF(COUNT($B:$B)<ROW(A1),"",INDEX(Sheet2!B:B,SMALL($B:$B,ROW(A1)))&"") →数式3とする という数式を入れオートフィルで列方向・行方向にコピーする。 教えて頂きたいことは、数式1、数式2、数式3が何を意味しているのか。 と、この数式を使って、表を作成したのですが、ある特定の数字(コード、D2セルに入力)を入力しても反応してくれない。 (E2~H2まで、空白セルの状態になります。) (sheet2は約1200行あります。) 教えて頂けないでしょうか?

  • エクセル関数の数式教えてください!

    下記のようなワークシートがあります。 Aセル 前年の売り上げ Bセル 今年の売り上げ Cセル 今年の伸び率 例えばBセルに「15,530円」とあって Cセルには「2.8%」とあります。 Aセルに自動的に前年の売り上げが入るような 関数の式を入力したいのです。 行はたくさんあります。 よろしくお願いします。

  • エクセルの数式のコピーについて教えてください。

    A1のセルに、「+sheet1!A1」 という数式があるとします。この数式をB1、C1、D1のセルに貼り付けると、「+sheet1!B1」、「+sheet1!C1」、「+sheet1!D1」というようになるんですけど、これを、「+sheet1!A2」、「+sheet1!A3」、「+sheet1!A4」、というように、B1、C1、D1のセルに貼り付けることって出来ますか?

専門家に質問してみよう