[[20040812152647]] 『文字列の中から、数式を取り出して計算したい』(EI) ページの最後に飛ぶ

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

 

『文字列の中から、数式を取り出して計算したい』(EI)

下記のA列内の文字列の中から、「aaa×bbb×ccc」の数式だけ取り出して
B列に計算した結果を出したいです。
また、含まれない行は空白のままにしたいです。
教えてください。初心者です。宜しくお願いします。

 |     A          | B |
 |________________|___|
1| (C/No.1〜2)c/t 355×475×400  |   |←355×475×400の値
2| abcde             |   |←空白
3| (C/No.3)c/t 360×540×350     |   |←360×540×350の値
4| fghijk            |   |←空白
5| FGHIJK-81(035)        |   |←空白
6| lmnop             |   |←空白
7| (C/No.4)c/t 360×540×400    |   |←360×540×400の値
8| qrstu             |   |←空白

[エクセルのバージョン]
Excel2003
[OSのバージョン]
WindowsXP


 データ→区切り位置 を使えばできそうなデータのようです。
まず、A列のデータを選択して、使用していないSheetのA1からにコピーします。
データ→区切り位置を選択し、「区切り位置指定ウィザード-1/3」は「次へ」、
「区切り位置指定ウィザード-2/3」で「スペース」にチェックを入れて「完了」とします。
すると、「355×475×400」が隣のセルに取り出せます。
B列を選択し、データ→区切り位置 で 「その他」にチェックを入れ、「×」を入力して「完了」で
下のようになったら、
E1セルに「=IF(B1="","",B1*C1*D1)」と入力して、下方向へコピー。
 
	A		B	C	D	E
1	(C/No.1〜2)c/t	355	475	400	67,450,000
2	abcde				
3	(C/No.3)c/t	360	540	350	68,040,000
4	fghijk				
5	FGHIJK-81(035)				
6	lmnop				
7	(C/No.4)c/t	360	540	400	77,760,000
8	qrstu				
 
E列を選択して、「コピー」ボタンをクリックし、元のシートに戻って、
B1セルを選択し、編集→「形式を選択して貼り付け」で「値」にチェックを入れてOK。
 で、どうでしょうか? (Hatch)


 数式の形は 3ケタ×3ケタ×3ケタで、その右側には文字が無い。
 数式の含まれていないセルには × の文字が無い。
 上記を条件として、B1セルに 

 =IF(ISERR(FIND("×",A1)),"",MID(A1,LEN(A1)-10,3)*MID(A1,LEN(A1)-6,3)*MID(A1,LEN(A1)-2,3))

 以下、下方向にコピー。(純丸)


私も便乗質問です。
 上記の件で、初めの文字と計算させる文字のあいだに半角スペースがあるという条件で以下の式を考えたのですが、
 文字列のままで数値に変換されません。
 =IF(ISERR(FIND(" ",A1,1)),"",SUBSTITUTE("="&MID(A1,FIND(" ",A1,1)+1,1000),"×","*"))
どなたか、一括で数値になる方法をご存知ありませんでしょうか。
 (川野鮎太郎)


Hatchさん、ありがとうございます。上記のやり方でできましたが、出来たら
自動計算で出来ればと思います。

純丸さん、ありがとうございます。
自動計算で出したかったので、非常に助かりました。ありがとうございます。

申し訳ありませんが、追加で条件を出してもよろしいでしょうか?

A列に
(C/No.16〜20) Pallet 1000×1100
という文字列が入ることがあるのですが、この場合もB列は空白にすることはできますか?宜しくお願い致します。(EI)


 計算式を「セルの右から4番目が×である場合に計算する」と変えて

 IF(MID(A1,LEN(A1)-3,1)="×",MID(A1,LEN(A1)-10,3)*MID(A1,LEN(A1)-6,3)*MID(A1,LEN(A1)-2,3),"")

 川野さん、私も初めは SUBSTITUTE関数を使ったのですが、同じく、結果が数値に
 ならないので断念しました。この学校でおなじみの -- を前に付ける方法でもだめでした。
 私も数値になる方法を知りたいです。(純丸)


 そうなんですよ。--もVALUEもコピーで、加算乗算もだめでした。
 何かありそうだけど、前にKAMIYAさんがないと言われてたような気もするし・・
 (川野鮎太郎)


 基本的にパートAのようなタイトルは許可していません。
 こちらに統合しました。
(事務局・kazu)


『文字列の中から、数式を取り出して計算したい。パートA』(EI)

皆様、昨日は親切に教えて頂きましてありがとうございました。

また違うパターンも教えて頂いても宜しいでしょうか?

下記のA列内の文字列の中から、

「aa or aaa or aaaa×bb or bbb or bbbb×cc or ccc or cccc」

の数式だけ取り出してB列に自動計算した結果を出して、

数式が含まれない行は空白のままにする方法を教えてください。

(昨日は、数字は3桁だけでしたが、

今度は2桁と3桁と4桁がランダムに組み合わさった場合の数式を

自動計算したいのですが・・・。)

いろいろ注文を付けてしまって申し訳ありませんが、

宜しくお願いします。

 |     A            | B |
 |__________________|___|
1| (C/No.1〜2)c/t 355×90×1400    |   |←355×90×1400の値
2| abcde               |   |←空白
3| (C/No.3)c/t 3600×540×35       |   |←3600×540×35の値
4| fghijk              |   |←空白
5| FGHIJK-81(035)          |   |←空白
6| lmnop               |   |←空白
7| (C/No.4)c/t 360×540×400      |   |←360×540×400の値
8| qrstu               |   |←空白
9| (C/No.16〜20) Pal 1000×1100×1000|   |←1000×1100×1000

自分で計算式がいまいち作れないのですが、

( 「)」から最初の「×」までの範囲内の数字 )

×( 「×」と「×」に挟まれた数字 )

×( 文字列の終わりから「×」までの範囲内の数字 )

を取り出して自動計算するような計算式を作れば良いのでしょうか?

このような計算式は作ることは可能でしょうか?

[エクセルのバージョン]
Excel2003
[OSのバージョン]
WindowsXP


 式が長くなりすぎるので、作業列を使用して良いのであれば、以下ではどうでしょうか。
 B1セルに=IF(C1="","",LEFT(C1,D1-1)*MID(C1,D1+1,E1-D1-1)*RIGHT(C1,LEN(C1)-E1))
 C1セルに=IF(ISERR(FIND(" ",A1,1)),"",MID(A1,FIND(" ",A1,1)+1,1000))
 D1セルに=FIND("×",C1,1)
 E1セルに=FIND("×",C1,FIND("×",C1,1)+1)
 尚、(C/No.4)c/t 360×540×400のように、計算させる文字の左に半角スペースがあるのが条件となります。
        ↑半角スペースで区切り
 あとは、C,D,E列を非表示で運用すれば問題ないかと。

 (川野鮎太郎)


 前の質問で川野さんが回答されていた数式に、スペースの削除を追加した式を使います。
これをC列に入れます。
C1セルに「=IF(ISERR(FIND(" ",A1,1)),"",SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(MID(A1,FIND(" ",A1,1)+1,1000),"×","*")," ","")," ",""))」
と入力して、下方向へコピーします。
次に、挿入→名前→定義 を選択し、
名前に「keisan」 参照範囲に「=EVALUATE(C1)」と入力して、OKとします。
B1セルに「=IF(C1="","",keisan)」と入力して、下方向へコピー。
こんな方法はどうですか?  (Hatch)


 皆さん対応が早いなぁ! 
 こういう関数はどうでっしゃろか?
 必要条件としては数式の前に必ずスペースが入っている事です。(全角でも半角でも
 OKですし、それ以前にスペースが入っていても大丈夫です)
 また、式には×が2個以上入っていないと計算されんようになっとります。

 1)[Alt]+[F11]でVBEを開く
 2)「挿入」→「標準モジュール」選択
 3)下のコードをコピペ
 4)エクセルに戻る

 拾い出したいセルに、例えばC1に=ei(a1)と入力してみてくだはい。
 どないでっか?ええ塩梅でっしゃろ?
 後は下方向にコピー(関数の扱いと全く同じ)すればバッチシですワ。
 まぁ試してみておくんなはれ。
     ほな...(弥太郎)
 '-----------------------------------
 Function ei(data)
    Dim i As Integer
    Dim f, data_a

    data = StrConv(data, vbNarrow)
    f = InStrRev(data, " ")
    data_a = Mid(data, f + 1, 69)
    data_a = Split(data_a, "×", -1)

    If UBound(data_a) < 2 Then
        ei = ""
        Exit Function
    End If
    ei = data_a(0)
    For i = 1 To UBound(data_a)
        ei = ei * data_a(i)
    Next i

 End Function


[[20040812152647]] 『文字列の中から、数式を取り出して計算したい。』(EI)
 こっちじゃないんですか?  (wizik)


 まちがえて統合していました、wizikさんありがとうございます。
 (kazu)

 随分遅出しですが、作業列を使わない長〜い式を考えてみましたので書き込みます。
半角スペース以降で×が2個入っていることが前提です。当然、掛算限定です。
SUMPRODUCTをSUMに代えれば足し算でも出来そうですが???(未検証)
B1セルに ↓ として、下方コピーして下さい。 (あまりにも長過ぎるので改行してます)
=IF(ISNUMBER(FIND(" ",A1,1)),
SUMPRODUCT(REPLACE(MID(A1,FIND(" ",A1,1)+1,LEN(A1)),FIND("×",MID(A1,FIND(" ",A1,1)+1,LEN(A1)),1),LEN(A1),"")*1,
REPLACE(MID(MID(A1,FIND(" ",A1,1)+1,LEN(A1)),FIND("×",MID(A1,FIND(" ",A1,1)+1,LEN(A1)),1)+1,10^5),
FIND("×",MID(MID(A1,FIND(" ",A1,1)+1,LEN(A1)),FIND("×",MID(A1,FIND(" ",A1,1)+1,LEN(A1)),1)+1,10^5),1),
LEN(MID(A1,FIND(" ",A1,1)+1,LEN(A1))),"")*1,
RIGHT(MID(MID(A1,FIND(" ",A1,1)+1,LEN(A1)),FIND("×",MID(A1,FIND(" ",A1,1)+1,LEN(A1)),1)+1,10^5),
LEN(MID(MID(A1,FIND(" ",A1,1)+1,LEN(A1)),FIND("×",MID(A1,FIND(" ",A1,1)+1,LEN(A1)),1)+1,10^5))-
FIND("×",MID(MID(A1,FIND(" ",A1,1)+1,LEN(A1)),FIND("×",MID(A1,FIND(" ",A1,1)+1,LEN(A1)),1)+1,10^5),1))*1),"")
短く出来るかも知れませんが、自分でも分解できないのでいじれません。
参考として書き込みました。修正するとしても1日がかりです。
→既に回答されている作業列を使う方法や、マクロ(ユーザー関数)での方法が、現実的です。
(sin)

コメント返信:

[ 一覧(最新更新順) ]


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