- ベストアンサー
エクセルで、1セル内のデータの計算
XP+EXCEL2002です。 ひとつのセル内に";"で区切られた数値が入力されています。 例) 250;1500;890 これらを;区切りの数値としてとらえて サマリ値を任意のセルに表示したいのですが可能でしょうか? (例の場合は250+1500+890=2640) なおセルには何も入力されていない場合があり またレコードの並びの最後には;はありません。 よろしくおねがいします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>が、ホントはマクロは組みたくなかったです。。。 シートだけで行う方法を考えてみました。 『250;1500;890』の形式のデータが、A1から下方向に向かって多数登録されているとします。 (1)A列をコピーしてC列に貼り付けます。 (2)C列を選択します。 (3)データ→区切り位置 を実行。 (4)元のデータの形式で『カンマやタブなどの区切り文字・・・』を選択して、次へ。 (5)区切り文字で『セミコロン』にチェックして、完了。データが分離される。 (6)B1に =SUM(C1:IV1) を入力して、フィルハンドルをダブルクリックしてコピー。 セミコロンが250個程度までなら、これでB列に合計が表示されます。 これはExcel97での操作です。Excel2002では?ですが、余り変わらない?ご参考に。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
考えたとおり式にしてみました。暗算でやるほうが速い。 馬鹿馬鹿しいと笑ってください。プログラムを組むときは 根気がいるから、本件でもやって見ました。 A1にデータがあるとします。 B1に=SEARCH(”;”,A1,1) C1に=SEARCH(”;”,A1,B1+1) D1に=LEN(A1) E1に=B1-1 F1に=C1-B1-1 G1に=D1-C1 H1に=MID(A1,1,E1) I1に=MID(A1,B1+1,F1) J1に=MID(A1,C1+1,G1) K1に=H1+I1+J1 B1からK1をB2からK10(例えばの一例)に複写する。
お礼
回答ありがとうございます。 お礼遅くなってすいません。 忙しかったり、繋がりにくかったりしたもんで・・・ ひとつのセルに関数をごちゃごちゃくっつけて 何とかならないかと思っていたのですが やっぱり一つ一つやっていくしかないですかねぇ、、、 ありがとうございました。
- nishi6
- ベストアンサー率67% (869/1280)
ユーザー定義関数を作ってみました。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、挿入→標準モジュール で標準モジュールを挿入します。出てきたコードウインドウに下記ユーザー定義関数を貼り付けます。 例えば、セルA1にある文字列の計算をする場合は、 =SumCalc(A1) とします。 A1に何も入力されていなければ『0』と表示されます。最後の行の『'』を外せば何も表示しません。 また、『EE;1』は『1』、『EE;E』は『0』のように計算します。 『;』は何個でもかまいません。ご参考に。(Excel2000です) Public Function SumCalc(Fm As String) Dim wkFm As String '計算用のワーク変数 Dim pot As Integer '『;』の位置 Dim TTL As Double '合計値 wkFm = Fm If Right(wkFm, 1) <> ";" Then wkFm = wkFm & ";" pot = InStr(wkFm, ";") While pot > 0 TTL = TTL + Val(Left(wkFm, pot - 1)) '『;』で分離して加算する wkFm = Right(wkFm, Len(wkFm) - pot) '対象文字列を短くする pot = InStr(wkFm, ";") Wend SumCalc = TTL 'If TTL = 0 Then SumCalc = "" End Function
お礼
ご協力ありがとうございます。 関数を作っていただけるなんて・・・ ちょっと感動すらしています。 が、ホントはマクロは組みたくなかったです。。。 足し算するだけのことに起動時の確認パネルが出るのが嫌だったので。。。 けどセルに記述する方法でループ処理させるような方法はないみたいですね。 入力方法も含めもうしばらく検討してみます。 ありがとうございました。
お礼
回答ありがとうございます。 御礼遅くなってすいません。 忙しかったり、OK Webだけつながりにくかったりしたもんで。。。 セルには多くても10個を超える;区切りのデータが入ることはないので この方法でやってみようかと思います。 ご協力ありがとうございました。