• ベストアンサー

エクセル この数式を簡単にできないでしょうか?

エクセル2000です。 以下の数式をもっと簡単にすることはできないでしょうか? V2セルにある文字列化させた7桁の数字に対する計算です。 先頭から1,3,5,7番目の数字を3倍,2,4,6番目の数字はそのままでの総和を求めたいのです。(チェックデジットを作成するモジュラス10/ウエイト3のようなものです。) =(MID(V2,1,1)+MID(V2,3,1)+MID(V2,5,1)+MID(V2,7,1))*3+MID(V2,2,1)+MID(V2,4,1)+MID(V2,6,1)

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

  • ベストアンサー
  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.1

=SUMPRODUCT(MID(V2,ROW($A$1:$A$7),1)*(MOD(ROW($A$1:$A$7),2)*2+1)) 積の和を求めるSUMPRODUCT関数の応用です。 ROW($A$1:$A$7)={1,2,3,4,5,6,7}となり MID(V2,ROW($A$1:$A$7),1)={MID(V2,1,1),MID(V2,2,1),・・・・,MID(V2,7,1)} MOD(ROW($A$1:$A$7),2)=MOD({1,2,3,4,5,6,7},2)={1,0,1,0,1,0,1} {1,0,1,0,1,0,1}*2+1={3,1,3,1,3,1,3} でこの SUMPRODUCT({MID(V2,1,1),MID(V2,2,1),・・・・,MID(V2,7,1)}*{3,1,3,1,3,1,3}) =MID(V2,1,1)*3+MID(V2,2,1)*1+・・・・+MID(V2,7,1)*3 で計算できます。 ※{}は配列を意味します。

merlionXX
質問者

お礼

SUMPRODUCT関数もずいぶん奥が深いのですねえ! 感心いたしました。 ありがとうございます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

こんなことも出来るという例で A1セルに 12345678 数字であればなんでも良い。一応8桁とする。 偶数桁の数字の和は =SUM(IF(MOD(ROW(B1:B8),2)=0,MID($A$1,ROW(B1:B8),1)*1,0)) と入れて、SHIFT+CTRL+ENTERキーを同時押し。配列数式 結果 20 奇数桁の数字の和は =SUM(IF(MOD(ROW(C1:C8),2)=1,MID($A$1,ROW(C1:C8),1)*1,0)) と入れて、SHIFT+CTRL+ENTERキーを同時押し。配列数式 結果 16 ーーーーーーー 後者にウエイトの3をかけて両者の和を取る =SUM(IF(MOD(ROW(B1:B8),2)=0,MID($A$1,ROW(B1:B8),1)*1,0))+3*SUM(IF(MOD(ROW(C1:C8),2)=1,MID($A$1,ROW(C1:C8),1)*1,0)) と入れて、SHIFT+CTRL+ENTERキーを同時押し。配列数式 結果 68 ーーーーー 式の長さから言うと、質問の式に負けているが。 === 私なら、ユーザー関数(VBAを使う)を作る。 標準モジュールに Function chkdt(a) s = 0 For i = 1 To Len(a) If i Mod 2 = 0 Then s = s + Mid(a, i, 1) Else s = s + 3 * Mid(a, i, 1) End If Next i chkdt = s End Function シートのセルに =chkdt(A1) 結果 68

merlionXX
質問者

お礼

ありがとうございました。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

既出回答と同じ事ですが =SUM(MID(V2,{1,2,3,4,5,6,7},1)*{3,1,3,1,3,1,3}) これでもいいかもしれませんね。

merlionXX
質問者

お礼

SUMPRODUCTを使わなくともできるんですね! ありがとうございます。 自分の関数の弱さがあらためてよくわかりました。

回答No.2

V2の文字列をバラして配列にする処理と、奇数番目に3偶数番目に1 をかける処理があればいいんですね。 V2の文字列"7654321"に対して、=index(mid(V2,row(1:7),1),0)*1は 配列{7;6;5;4;3;2;1}を返します。あとは{3;1;3;1;3;1;3}という配 列を用意しすれば、配列の対応する要素同士をかけ算して合計を出 すのはsumproduct関数の仕事ですね。 奇数と偶数を判定するのは2で割った余りで出来るので、2番目の配 列は=mod(row(1:7),2)*2+1で作れます。合わせて、 =sumproduct(index(mid(V2,row(1:7),1),0)*1,mod(row(1:7),2)*2+1) で60が返ってきました。とここまで書いてリロードしたらmshr1962 さんが全く同じ式を…(;_;)

merlionXX
質問者

お礼

ありがとうございます。 勉強になりました。

関連するQ&A

  • この数式でrounddownはどこに入れれば…

    以前教えて頂いた桁ごとにセルで区切られている数式を使っているのですが、 消費税などの少数以下の数字を切り捨てたいと思いrounddownを 入れようと試みたのですが、どこに入れればいいのかわからず うまくいきませんでした。 =MID(TEXT(SUMPRODUCT($Q15:$Q25,$T15:$T25)*0.08,"?????????????????????????"),COLUMN(Y25),1) この場合だとどこに入れればよいのでしょうか? また、マイナスの計算をしようとすると1桁ずつ後ろにずれてしまうので 別のシートにマイナスの計算ばかりを入れていてその都度コピーして 貼り付けて使っています。 この数式の場合だとマイナスの計算はズレるのは仕方ないのでしょうか? もし何かそのままでもズレずに使える方法がありましたら、教えてください。 どうか宜しくお願いします。

  • 数式教えてください

    F1の5桁の整数(文字列で、マイナスはありえない)を A1:E1に一桁ずつバラすには MIDを使う以外に簡単に切り出す数式はありますか。

  • エクセルの数式が作動しなくなりました

    初めて質問させていただきます。 「売上-原価=純利益」になるよう数式をあらかじめ入力しておいたのですが、なぜかセルに数字を入力しても純利益が自動ででなくなりました。セルの数式を確認したのですが、ちゃんと数式が入力されているのです。それで、あらためてもう一度「売上-原価=純利益」の数式を入れると純利益がでるのです。 さらに問題が。 ・純利益のセルに数式を入れたあとに売上・原価の欄に数字をいれると純 利益が自動ででない ・ドラッグすると、自動で計算を更新せずに、コピーになってしまう  ただし、セルを確認すると数式はきちんと次の行や列のセルに設定されて いる。(C5 C6のように) なお、他のエクセルで作った表などは問題なく自動で計算できます。 このエクセルのシートの直し方を教えていただけないでしょうか?

  • Excelで数式の前に=をつけるには

    こんにちわ Excelのセルに数式が文字列で入力されています。 すべての先頭に=をつけてちゃんと計算できるようにしたいのですが、 かなりの列数があるので手入力は面倒です。 一括に処理したいのですが =を&で結合させてもうまく行きません。 どうしたらよいか教えていただけますでしょうか? 例) A1+B1と入力されているものに=をつけて ちゃんと計算されるようにしたい。 質問の仕方がわかりにくくてすみません。

  • エクセルの数式について

    セルの列に任意の数字が入っています。 そこに1を足したものを自動的に表示するには どのような数式を入れればよいのでしょうか。 よろしくご教授いただきたく、おねがいします。

  • エクセル

    今あるエクセルには6つのセルが結合されていて、6ケタ未満の数字が入っています。 その上に画像が貼りつけてあり、それぞれの数字の間に線が引いてあります。 そのエクセルを開ける際に重いので、画像を減らして、 MID(TEXT($A1,"??????"),COLUMN(A1),1)の式を挿入してそれぞれのセルを分けたいと思っています。 そうすると画像を貼るより、セルの一つ一つに数式を入れるほうが軽くなるのでしょうか。 今のエクセルは13MBほどの容量を使っていてとても重いです。 MIDの数式を利用する場合、最後のセルにそれぞれのセルの合計を返したいのですが、 どのような数式をいれればいいのでしょうか。 よろしくお願いいたします。

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

    エクセルの数式をどのように入れたら良いでしょうか? いつもこちらでお世話になっています。 今回も教えて頂きたく質問させていただきます エクセルについてですが、 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のセルに上書きで(繰り返し)数字を入力させ 数式が消えないようにしたいのですが どのようにすればよいでしょうか? 分かりずらい説明で申し訳ありませんが 大変困っているので、アドバイス頂けると助かります。

  • エクセルの数式が無効に

    用語が間違っていたら、ご勘弁ください。 エクセル(2003)で請求書を作っています。(他にはほとんど使っていません) 掛け算、足し算、空白の処理を、初心者向きの本を購入し、どうにか作りました。 2年間使えていたのですが、先月より計算が出来なくなりました。 例)小計のセル(D10) ------- =IF(B10<>0,B10*C10,"") ------- B列とC列に数字を入れても計算してくれません。 D列に、数式は入っています。 <試しました1> 過去問題なく使えていたページで 既に入っていたB列とC列の数字を変更してみたところ、 計算されず、D列の数字は変わらぬままでした。 <試しました2> 新規書類で、単純な数式を作りましたが、無効でした。 <試しました3> オートSUMは使えます。 <試しました4> CDからの追加インストールもしてみたのですが・・・ 心当たりがあるとすれば、 先日、Windowsアプリケーションの削除を大胆に行いました。 必要なものまで削除してしまったのかもしれません。 どなたか、お分かりになりましたら、お助けください。 どうぞよろしくお願いします。

  • 再度、Excelの数式について、今朝

    再度、Excelの数式について、今朝 今朝、KURUMITO様から、下記1)~3)の条件での数式を親切に教えて頂きました。 教えて頂いた数式 =SUMPRODUCT(A4:A55,B4:B55)/H2 その後、条件が1)2)は同じですが、4)が増えたため3)が5)に変更になりました。 自分なりに次のように作ったのですが、エラーになります。=SUMPRODUCT(C4:C55="S")*(A4:A55,B4:B55)/H2 正しい数式を教えてください。バージョンは Excel2003 です、 宜しくお願いいたします。 1)A列 A4からA55まで、数字のデータが入ってるセルと、入ってないセルがあります。 2)B列もA列同様、B4からB55まで、数字のデータが入ってるセルと、入ってないセルがあります。(データの入ってる行は、A列で入っていれば、B列の同じ行に入っています)、 3)A列とB列のデータの入っている行を順番に4から55行まで、掛け算をして(例えば、A5*B5)、その4から55行まで合計を、H2に入っている、ほかの合計の数値で、割り算をする計算式をK2のセルに、一つにまとめて入れ、計算結果を表示したいのです。 4)C列もA列B列同様、C4からC55まで、B又はSの”文字のデータ”が入ってるセルと、入ってないセルがあります。(データの入ってる行は、C列(文字データ)で入っていれば、A列(数字データ)、B列(数字データ)の同じ行に入っています) 5)C列の”文字データ”がSならばA列とB列のデータの入っている行を順番に4から55行まで、掛け算をして(例えば、A5*B5)、その4から55行まで合計を、H2に入っている、ほかの合計の数値で、割り算をする計算式をK2のセルに、一つにまとめて入れ、計算結果を表示したいのです。

  • エクセルの数式について

    エクセルの数式について詳しい方がいらっしゃれば教えていただけないでしょうか。 例えば、 (1)M28セルに以下の数式が入っているとします。 =IF(INDIRECT(M$19)="","",IF(SUMIF(INDIRECT(M$20),$D27,INDIRECT(M$21))=0,"",SUMIF(INDIRECT(M$20),$D27,INDIRECT(M$21)))) (1)の数式で参照しているセルとして以下のものがあります。 (2)M19セル⇒=CONCATENATE("'計算'!",M13,)&$D$14 (3)M20セル⇒="'計算'!AR6:"&"AR"&$D$15+1 (4)M21セル⇒=CONCATENATE("'計算'!",M13)&$C$16+1&CONCATENATE(":",M13)&$D$16+1 (5)M13セル⇒N(文字列のみ) (6)D14セル⇒152(数値のみ) (7)C16セル⇒5(数値のみ) (8)D16セル⇒150(数値のみ) (9)D27セル⇒1-1(文字列のみ) そこで質問ですが、(1)の式で参照している、M$19やM$20、M$21がどこのセルを参照しているかわからないのです。 例えば、(2)の式では、M19セルには、『'計算'!N152』と表示されます。この数式とその結果としてM19に『'計算'!N152』と表示されるのはわかります。が、『'計算'!N152』がどこのセルのことを言っているのかがわかりません。 『!』があるので、『計算』というワークシートのN152を参照しているのかな・・・?とも思ったのですが違いますよね?! 因みに当ブックの中には『計算』というワークシートはありませんでした。 きちんと説明できている不安ですが、回答いただけると大変助かります。 宜しくお願い申し上げます。

専門家に質問してみよう