- 締切済み
エクセルで数字、文字列混在のセルから数字のみを抽出し、その合計をスマー
エクセルで数字、文字列混在のセルから数字のみを抽出し、その合計をスマートに計算する方法を探しています。 現在は他のWEBサイトから数字を抽出する方法が探せたので、それを元に、こんな式を使って計算しています。 =SUM(LOOKUP(10^17,LEFT(L34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(N34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(P34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(R34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(T34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(V34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(X34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(Z34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(AB34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(AD34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(AF34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(AH34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(AJ34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(AL34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(AN34,COLUMN(2:2))*1),LOOKUP(10^17,LEFT(AP34,COLUMN(2:2))*1)) このLEFT(xx34,・・・)の部分をまとめてくくれれば式が単純になると思いますが、いい方法が探せません。 もしこれ以外で、スマートになる方法があればそれでも歓迎します。 ちなみにセルに入力されているデータの例としては「150(4年間)」、「2000(6年間)」などです。 この数字だけの部分を足したいのです。 データが膨大になりフォーマットを変えるのは至極大変なので上述のことを考えた次第です。 皆さんのお力でなんとか出来ればと思っています。 よろしくお願いします。
- みんなの回答 (8)
- 専門家の回答
みんなの回答
- rukuku
- ベストアンサー率42% (401/933)
- layy
- ベストアンサー率23% (292/1222)
計算用に 「150(4年間)」、「2000(6年間)」 を 「150」、「2000」 にする作業は考えていますか?。ここまでできれば合計は楽です。 nullへの置換の繰り返しです。 『(x』の1~9回置換と『年間)』の1回置換。 これならマクロ化して1回で済むかも・・・。
- keithin
- ベストアンサー率66% (5278/7941)
=SUMPRODUCT((0&LEFT(L34:AP34,FIND("(",L34:AP34&"(")-1))*(1-MOD(COLUMN(L34:AP34),2))) など。
- layy
- ベストアンサー率23% (292/1222)
>算出したい列同士の間隔は一定でないですね?。 すみません。無視してください。 間に必ず1列(のみ)あり、列位置としては規則性ありました。
- daiku164
- ベストアンサー率34% (151/437)
参考にもならないと思いますが、 その入っているセルは、頻繁に変更されますか? 少しで有ればこんな方法もありますよ 150(6年間)のセルで右クリック→セルの書式設定→表示形式でユーザー定義 サンプルの下種類(T)の所に、0"(6年間)"と書きこみます 150(6年間)の文字を消し150と入力すると、150(6年間)と表示され さらに通常計算が出来るようになります ただし4年間とか3年間とか他の数字になる場合は、 ユーザー定義を一個一個指定又は書き変えなければなりません
補足
ありがとうございます。データ数はそこそこあります。少し面倒ですが、これよりいい案が無い場合は採用させていただきます。
- KURUMITO
- ベストアンサー率42% (1835/4283)
ご質問はL34セルからAP34セルにそのようなデータが入っているとしたら次の式でその合計が表示されますね。 =SUMPRODUCT(LEFT(L34:AP34,FIND("(",L34:AP34)-1)*1)
補足
ありがとうございます。 試してみましたが、出来ませんでした。 今回のは少しややこしいことに、LとNにデータが入っている。いわゆるひとつ飛びの状態です。 その場合はどのような回避策がありますでしょうか?
- layy
- ベストアンサー率23% (292/1222)
式がわかりにくいので、 =SUM( LOOKUP(10^17,LEFT(L34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(N34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(P34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(R34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(T34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(V34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(X34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(Z34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(AB34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(AD34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(AF34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(AH34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(AJ34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(AL34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(AN34,COLUMN(2:2))*1), LOOKUP(10^17,LEFT(AP34,COLUMN(2:2))*1) ) 算出したい列同士の間隔は一定でないですね?。 『(』『)』は全角、半角統一されていますか?。 数値は150や2000とケタが固定でなく不明ですね?。 年数も。 シートを加工して対応。 もともとの状態は保持したとして、 『(』を『,(』に置き換えてその加工シートをCSV形式で保存。 開き直せば、『(』の前と後で列が分かれる。 『(』の前=求めている数値、となれば・・・・。 どれくらいまでできるかは試していませんが、参考です。
補足
layy様、お手数かけます。 エクセルからそのまま数式を取り出してコピー&ペーストしてしまいました。 ご迷惑おかけしました。 以下インラインで回答します。 >算出したい列同士の間隔は一定でないですね? 的を射た回答でないかもしれませんが、例に出したデータがセル内に入力されています。そういう意味では等間隔です。 >『(』『)』は全角、半角統一されていますか? はい。されています。全て半角です。 >数値は150や2000とケタが固定でなく不明ですね?。年数も。 はい、数字の桁数は統一されておりません。年数は現在、一桁で統一されています。なので計算に不必要な文字列数は固定されています。 後半部分ですが、シートを加工してその数字を持ってくるやり方はこの資料の引継ぎ性を考えると不可能です。ひとつのシートで完結出来ればと考えております。 以上、よろしくお願いします。
- bin-chan
- ベストアンサー率33% (1403/4213)
> データの例としては「150(4年間)」、「2000(6年間)」などです。 この場合、具体的にはどう扱うのですか? 「150(4年間)」は[150]だけを取り出せば良いのですか? それとも、[150]と[4]を取り出せば良いのですか? はたまた、[150]と[4年間]を取り出せば良いのですか? 「2000(6時間)」は[2000]だけを取り出せば良いのですか? それとも、[2000]と[6]を取り出せば良いのですか? はたまた、[2000]と[6時間]を取り出せば良いのですか?
補足
bin-chan様、お手数かけます。今回取り出したい数字「150(4年間)」を例にとれば150のところです。その後の4年間の4のところは関係ありません。その他の項目も同様です。以上よろしくお願いします。
補足
ありがとうございます。 そうなんです。データ間が1列空いているんです。今現在そこが課題です。