12/30/2020

Excel。VBAでの並び替えは条件を設定してから実行させる2段階方式です。【SORT】

Excel。VBAでの並び替えは条件を設定してから実行させる2段階方式です。

<Excel VBA>

大量のデータから集計や抽出したあとに、例えば、売上高を降順で並び替えや、顧客名のフリガナを五十音順で並び替えを行いたいケースは結構あります。


Excel VBAで集計や抽出をしたら、ついでに並び替えも行いたいわけですね。

ところが、Excel VBAで並び替えを行う場合、ちょっとした特徴があります。


それが、並び替えの条件などを設定してから、並び替えを実行します。

つまり、「2段階方式」です。


次のデータを用意しました。


今回は、このデータのC列にある「売上高」を降順で並び替えるExcel VBAを作っていきます。


プログラム文はこのような感じです。


Sub 並び替え()

    With ActiveSheet.Sort.SortFields

        .Clear

        .Add Key:=Range("c2"), _

            SortOn:=xlSortOnValues, _

            Order:=xlDescending, _

            DataOption:=xlSortNormal

    End With

    

    With ActiveSheet.Sort

        .SetRange Range("a1").CurrentRegion

        .Header = xlYes

        .Orientation = xlTopToBottom

        .Apply

    End With

End Sub


説明は後ほどとして、まずは実行して確認してみましょう。


ご覧のように、売上高を降順で並び替えすることができました。


では、プログラム文を確認していきましょう。


上部ブロックの「SortFieldsオブジェクト」が並び替えの条件などを設定するところです。

With ActiveSheet.Sort.SortFields

    .Clear

    .Add Key:=Range("c2"), _

         SortOn:=xlSortOnValues, _

         Order:=xlDescending, _

         DataOption:=xlSortNormal

End With


「ActiveSheet.Sort.SortFields」を毎回入力するのは面倒なので、With ~ End With文を使用しています。

.Clearは、並び替えの条件が「SortFieldsオブジェクト」に残っているといけないので、並び替えの条件をクリアします。


.Add Key:=Range("c2")は、並び替えの基準となる列を指定します。

今回はC列の売上高が基準となります。


SortOn:=xlSortOnValuesの「SortOn」は並び替えの基準を指定します。

今回は、セルの値で並び替えるので、「xlSortOnValues」を設定します。


なお、SortOnですが、

xlSortOnCellColorがセルの背景色

xlSortOnFontColorがセルの文字の色

xlSortOnIconが条件付き書式のアイコン

というように、並び替えの条件を指定することもできます。


Order:=xlDescendingは、並び替えを昇順か降順か設定するところで、「xlDescending」なので降順という条件を設定しました。


DataOption:=xlSortNormalは、標準の並び替え基準という意味です。


要するに、「以前あった条件をクリアしてから、C列の値を基準に降順で並び替える」という条件を設定したわけです。


なので、まだ実行していません。


下部ブロックでは、上部ブロックで設定した条件に従い、並び替えを実行します。

    With ActiveSheet.Sort

        .SetRange Range("a1").CurrentRegion

        .Header = xlYes

        .Orientation = xlTopToBottom

        .Apply

    End With


.SetRange Range("a1").CurrentRegionは、並び替えの対象範囲を設定します。

今回は、A1から連続する範囲(CurrentRegion)としています。


.Header = xlYesは、先頭行がヘッダー。

つまり見出し行かどうかということを聞いています。

「xlYes」は、先頭行が見出し行なので、それ以降のデータが並び替えの対象ということです。


.Orientation = xlTopToBottomは、上から下に向かって並び替えを実行するという意味です。


.Applyは、「実行」という意味ですね。


このように、並び替えをExcel VBAで設定する場合は、2段階方式です。

このようなプログラム文を保存しておいて、コピペして使いまわすと、一から入力しない済むので楽かもしれませんね。

12/29/2020

今週のFacebookページの投稿 2020/12/21-2020/12/27【Facebook】

今週のFacebookページの投稿 2020/12/21-2020/12/27

<Facebookページ>

Facebookページで【書いてみた】ワンポイントです。

12月21日

Excel。SEARCH関数。

読み方は、サーチで、英字の大文字小文字の区別なく検索する文字列の位置を算出します。


12月22日

Excel。SEARCHB関数。

読み方は、サーチビーで、英字の大文字小文字の区別なく検索す文字列のバイト数を算出します。


12月23日

Excel。SEC関数。

読み方は、セカントで、角度の正割を算出します。


12月24日

Excel。SECH関数。

読み方は、ハイパーポリック セカントで、数値の双曲線正割を算出します。


12月25日

Excel。SECOND関数。

読み方は、セコンドで、時刻から"秒"を算出する


12月26日

Excel。SERIESSUM関数。

読み方は、シリーズサムで、べき級数を算出する


12月27日

Excel。SHEET関数。

読み方は、シートで、シートが何枚目かを算出します。

12/27/2020

Excel。ピボットテーブル。独自の分類名を作りグループ化して見やすくしよう。【Grouping】

Excel。ピボットテーブル。独自の分類名を作りグループ化して見やすくしよう。

<ピボットテーブル>

大きなデータはそのままでは、どのような傾向があるとかわかりませんので、まずは集計してみようとすると、ピボットテーブルをつかうことが多いですね。


ただ、対象アイテムが多い場合は、それでも見にくいために、せっかくピボットテーブルで作った資料も、わかりにくい資料となってしまうので、独自の分類名を作ってグループ化すると、いいわけですね。


下記のデータを用意しました。


最初はピボットテーブルをつかって集計していきます。


表のないのセルをアクティブ(A1をクリックでOKです)にして、挿入タブのピボットテーブルをクリックします。


「テーブルまたは範囲から」をクリックします。


テーブルまたは範囲からのピボットテーブルダイアログボックスが表示されますので、範囲を確認してOKボタンをクリックします。


新しいシートが追加されます。

ピボットテーブルのフィールド作業ウィンドウをつかって、レイアウトを設定してきます。


行のボックスには、「旅行名」のフィールドを設定します。

値のボックスには、「金額」のフィールドを設定します。


これで旅行名ごとの金額合計一覧が作成できたわけです。

ただ旅行先が多すぎてわかりにくい感じもします。


そこで、例えば、サンフランシスコとニューヨークとハワイはアメリカ合衆国なので、アメリカという分類名で、まとめてみることにしましょう。


集計データの旅行名の上にマウスカーソルを移動すると、「➡」という形に変わったらクリックすると集計データ行を選択することができます。


今回は、サンフランシスコ・ニューヨーク・ハワイを選択します。

ピボットテーブル分析タブの「グループの選択」をクリックします。


グループとしてまとめることができました。


グループ1だとなんだかわからないので、「アメリカ」と入力修正します。


グループ化していないものが、それぞれで、小計を算出している状態なので、次に、スペイン・ドイツ・フランスを先程と同じように選択して、グループ化します。


ベトナムと北京をアジア。

沖縄と北海道で国内というようにグループ化する作業を繰り返します。


ご覧のように、それぞれの地域名のフィールドは用意していない表から、分類を作り分けて確認出来るようになりましたね。

アメリカとヨーロッパの4行目と8行目を選択して、再度グループ化することで、さらにまとめることができます。


このように、グループ化を上手く使うことで、わかりやすい資料を作ることもできます。

12/26/2020

Excel。グラフの復習。逆向き横棒グラフ~積み上げ帯横棒グラフ【graph】

Excel。グラフの復習。逆向き横棒グラフ~積み上げ帯横棒グラフ

<グラフの復習>

Excelのグラフは、用途に合わせて様々なグラフを作ることができます。


今回は、グラフの復習ということ、4つをピックアップ

・Excel。逆向き横棒グラフ(横軸だけ反転)を作るのは面倒なんです。

・Excel。ウォーターフォールの作り方と合計を表示させてみよう

・Excel。基準から減少推移がわかる、100%減少推移グラフを作成する

・Excel。積み上げ帯横棒グラフをつくりたい。だけどどうやって、隙間を縮めるの?


Excel。逆向き横棒グラフ(横軸だけ反転)を作るのは面倒なんです。

逆向き横棒グラフ

縦軸はそのままで、横軸を逆転するグラフを作るのは意外と、面倒なんですね。


<続きはこちら>

Excel。逆向き横棒グラフ(横軸だけ反転)を作るのは面倒なんです。

https://infoyandssblog.blogspot.com/2018/11/excelhorizontal-bar-chart.html


Excel。ウォーターフォールの作り方と合計を表示させてみよう

ウォーターフォール

Excelで作成することができるグラフに、新しく登場した『ウォーターフォール』


<続きはこちら>

Excel。ウォーターフォールの作り方と合計を表示させてみよう

https://infoyandssblog.blogspot.com/2018/12/excelwaterfall.html


Excel。基準から減少推移がわかる、100%減少推移グラフを作成する

100%減少推移グラフ

基準からコストカットの結果や、価格をどのぐらい下げたのかを確認するグラフを作成するには、どうしたらいいのでしょうか?


<続きはこちら>

Excel。基準から減少推移がわかる、100%減少推移グラフを作成する

https://infoyandssblog.blogspot.com/2019/01/excel100transition-graph.html


Excel。積み上げ帯横棒グラフをつくりたい。だけどどうやって、隙間を縮めるの?

積み上げ帯横棒グラフ

「積み上げ横棒グラフ」のアレンジである、『積み上げ帯横棒グラフ』を作っていきます。


<続きはこちら>

Excel。積み上げ帯横棒グラフをつくりたい。だけどどうやって、隙間を縮めるの?

https://infoyandssblog.blogspot.com/2019/01/excelhorizontal-bar-chart.html

12/24/2020

Excel。新しく追加された「LET関数」ってどういう時に使ったらいいの?【New function】

Excel。新しく追加された「LET関数」ってどういう時に使ったらいいの?

<LET関数>

Office365に新しく追加された関数に、「LET関数」というのがあります。

ただ、使い勝手がわからないというか、どこで使ったらいいのかイマイチわかりにくい関数なんですね。


Microsoftさんの説明には、「LET 関数は、計算結果に名前を割り当てます。 これにより、中間計算、値、定義名などを数式内に格納できます。」とあります。


きっと、色々な使い方があるのでしょうけど、簡単に言ってしまえば、一度別のセルに計算結果を算出して、その算出結果を使って、回答を求めるような2段階なことはしなくてもいいということなんだと思います。


LET関数がもっている引数はというと、

LET(名前1,名前1の値,計算または名前2…)

です。


とりあえず、動きを確認してみましょう。

次の表を用意しました。


やりたいことは、H列に、C列・E列・G列の合算値が200点以上ならば、「Good!」と表示したいわけです。


早速、H2にLET関数をつかった数式を作っていきます。


=LET(W,C2,L,E2,H,G2,IF(SUM(W,L,H)>=200,"Good!",""))


C2には、Writingの「W」。

E2には、Listeningの「L」。

G2には、Hearingの「H」と名前を設定して、その名前を使って、IF関数。

WLHの合算値が200以上だったら「Good!」と表示する数式です。

オートフィルで数式をコピーしてみましょう。


ご覧のように、200点以上のものに、「Good!」と表示することができました。


普通ならば、C列とE列とG列の合算値を算出する列を用意して、算出された合算値をつかって、IF関数をつかった判定を行うことが多いと思いますが、合算値を算出する作業である、中間計算を合わせて、行っています。


しかし、よく考え見ると、別にIF+SUM関数のネストでも同じように結果を算出することができます。


=IF(SUM(C2,E2,G2)>=200,"Good!","")


まぁ、たしかに、SUM関数の引数が「,(カンマ)」で選択するのは大変面倒なのと、対象件数が増えてしまうと、わかりにくくなる傾向からミスを誘発しかねないことを考えれば、LET関数を使う方がいいのかもしれませんね。

とくに今回のように、途中途中に、日付の列があったりすると、次の数式のように


=IF(SUM(C2:F2)>=200,"Good!","")


とSUM(C2:F2)のように範囲選択してしまうと、日付はシリアル値であるために、合算対象になってしまうので、結果が200を超過してしまうために、すべてが「Good!」と表示されてしまいます。


新しく登場したLET関数。

新しく追加された理由があるはずなので、Excel VBAや、スピル機能との連動や新しく追加された関数などと、ネストしたり組み合わせて使ったりすることで、きっと効果を発揮するのではないかなぁ~思っています。

12/23/2020

Excel Technique_BLOG Categoryに追加しました。2020/12/23【Technique】

Excel Technique_BLOG Categoryに追加しました。

<目次サイト>

このBLOGの記事を、カテゴリー分けにした【Excel Technique_BLOG Category】に追加しました。

Excel。ピボットテーブルを使うと集計表が簡単に作れる

ピボットテーブルを使って、クロス集計。つまり、集計表を作ってみたいと思います。

<続きはこちら>

Excel。ピボットテーブルを使うと集計表が簡単に作れる

https://infoyandssblog.blogspot.com/2015/09/excelpivot-table.html


Excel。ピボットテーブルで値に三桁区切りカンマと平均を求めてみたい

三桁区切りのカンマが設定されていなかったり、合計じゃなくて、平均を知りたいって場合はどうしたらいいのかを説明していきます。


<続きはこちら>

Excel。ピボットテーブルで値に三桁区切りカンマと平均を求めてみたい

https://infoyandssblog.blogspot.com/2015/09/excelpivot-table_24.html


Excel。ピボットテーブルを使うと瞬間芸で構成比を算出出来ちゃいます。

構成比も瞬間芸?というぐらい簡単に算出することが出来てしまう。

<続きはこちら>
Excel。ピボットテーブルを使うと瞬間芸で構成比を算出出来ちゃいます。


Excel。ピボットテーブル。構成比だけじゃなかった、順位も瞬間芸で算出しちゃいます。
Excelで順位を算出しようとしたら、【RANK.EQ関数】を使うわけですが、このRANK.EQ関数を作るのが苦手な方も多くて、それに参照を絶対参照にしておかないと、参照範囲がずれてしまってうまく算出できない。なんてこともあります。

<続きはこちら>
Excel。ピボットテーブル。構成比だけじゃなかった、順位も瞬間芸で算出しちゃいます。

12/21/2020

Access。Excelだと余りを算出するのにMOD関数をつかうけど、Accessではどうやるの?【division】

Access。Excelだと余りを算出するのにMOD関数をつかうけど、Accessではどうやるの?

<算術演算子:Mod>

在庫管理などダースで管理している場合、ダースからはみ出したもの、余りの在庫を算出するには、Excelだと、MOD関数をつかうことで、何本余りが出るのか、比較的簡単に算出することができますが、Accessには、MOD関数はありません。


では、どのようにしたら、同じようなことができるのでしょうか?


次のテーブルを用意しました。


在庫数をダースで管理しているとした場合、何ダースと余りがでるのか算出するクエリを作っていきます。


作成タブのクエリデザインを使ってクエリをつくります。

クエリデザインをクリックしたら、「T在庫管理」テーブルを選択します。


最初の演算フィールドは、ダースから算出します。


ダース: [在庫数]/12

という演算フィールドを作るわけですが、すべて入力すると直接入力の「:(コロン)」を全角で入力してしまったりするので、


在庫数/12

と入力すると、演算フィールドは、

式1: [在庫数]/12

と表示が変わりますので、式1を演算フィールド名に変更すると楽だと思われます。

特に、小さい字が見えにくい場合は、この方法をおススメします。


しかし、実行してみると、希望のように算出出来ていません。


割り切れなかった場合、整数になっていないわけですね。

そこで、整数化するためにInt関数をつかった演算フィールドに変更する必要があります。


ダース: Int([在庫数]/12)

と修正しましたので、実行して確認してみましょう。


何ダースなのかは、算出することができましたので、次は、余り(残り)を算出していきます。


Excelだったら、MOD関数をつかうことで、余りを算出することも出来ますが、Accessにはないので、

余り:[在庫数]-[ダース]*12

という演算フィールドでも、余りを算出するという方法もあります。


ただ、Accessには、MOD関数はないものの、算術演算子として、「Mod」というのが用意されています。


四則演算の、「+」「-」と同じようにつかうことができます。

それでは、余りを算出する演算フィールドを作っていきます。

余り: [在庫数] Mod 12

と演算フィールドを作りました。


それでは、実行して、データシートビューで確認してみましょう。


ご覧のように、商であるダースとその余りも算出することができました。


Accessには、余りを算出するためのModという算術演算子が用意されていることがわかりました。


逆に、Excelには、Modというような余りを算出する演算子は用意されておりませんので、MOD関数をつかって算出することになります。

12/20/2020

今週のFacebookページの投稿 2020/12/14-2020/12/20【Facebook】

今週のFacebookページの投稿 2020/12/14-2020/12/20

<Facebookページ>

Facebookページで【書いてみた】ワンポイントです。

12月14日

Excel。ROUNDDOWN関数。

読み方は、ラウンドダウンで、指定桁数で切り捨てる


12月15日

Excel。ROUNDUP関数。

読み方は、ラウンドアップで、指定桁数で切り上げる


12月16日

Excel。ROW関数。

読み方は、ロウで、セルの行番号を算出します。


12月17日

Excel。ROWS関数。

読み方は、ロウズで、セル範囲の行数を算出します。


12月18日

Excel。RRI関数。

読み方は、アールアールアイ:レリバント・レート・オブ・インタレストで、将来の価値から利率を算出する


12月19日

Excel。RSQ関数。

読み方は、アールエスキューで、回帰直線の決定係数を算出します。


12月20日

Excel。RTD関数。

読み方は、アールティーディー:リアルタイムデーターサーバーで、RTDサーバーからデータを取得する

12/18/2020

Excel。VLOOKUP関数。範囲のデータが空だと「0(ゼロ)」と表示されるので空白にしたい。【Change zero to blank】

Excel。VLOOKUP関数。範囲のデータが空だと「0(ゼロ)」と表示されるので空白にしたい。

<VLOOKUP関数>

VLOOKUP関数。

アチラコチラで使われています。

よくあるトラブルは、「#N/A」というエラー。

これは、検索値が範囲にない場合に、発生します。


C2の数式は、

=VLOOKUP(B2,$E$2:$F$7,2,FALSE)

「#N/A」は、IF+VLOOKUP関数とか、IFERROR+VLOOKUP関数で対応することで、エラー防げます。


C2の数式は、

=IFERROR(VLOOKUP(B2,$E$2:$F$7,2,FALSE),"")

今回は、IFERROR関数で対応しました。


さて、問題はここから、検索値はあるのですが、検索した結果が空白だと、結果は「0」と表示されてしまいます。


C2の計算式は、先程のまま、

=IFERROR(VLOOKUP(B2,$E$2:$F$7,2,FALSE),"")

「#N/A」エラーは防ぐことができても、商品名が「0」の対応はできません。


この「0」表示ではなくて、「空白」にしたいとしたら、どのようにしたらいいのでしょうか?


0だったら、空白。

という判断をさせるのならば、IF関数をつかうといいように思えます。


しかし、この考え方を踏まえて、数式を修正すると、かなり長い数式になってしまいます。

=IF(IFERROR(VLOOKUP(B2,$E$2:$F$7,2,FALSE),"")=0,"",IFERROR(VLOOKUP(B2,$E$2:$F$7,2,FALSE),""))

0ならば、空白。

そうでなければ、VLOOKUP関数。たしかに空白に対応することができました。


しかしながら、こんなに長い数式にしたにもかかわらず、問題を解決し切れていません。


それは、検索結果が空白ならばいいのですが、検索結果そのものが、「0」だった場合、「0」を表示しなければいけないのに、C2は空白になってしまいます。


ということで、せっかくの長い数式も使えないわけです。

では、対応することができないのでしょうか?


実は、とても簡単に数式を加筆修正するだけで対応することができるのです。


次のように、C2の数式を修正してみます。

=IFERROR(VLOOKUP(B2,$E$2:$F$7,2,FALSE),"")&""


するとどうでしょう。


数式の後ろに、「&""」をつけたら、結果が「0」ではなくて、「空白」になりましたね。意外かもしれませんが、簡単に空白にすることができます。


VLOOKUP関数で、「0」を表示するのではなく、「空白」で表示したい場合には、色々と数式を考えるのではなく、「&""」をつける解決できると覚えておくと、意外と便利かもしれませんね。

12/17/2020

Excel関数辞典 VOL.40。IMSQRT関数~INDIRECT関数【dictionary】

Excel関数辞典 VOL.40。IMSQRT関数~INDIRECT関数

<Excel関数>

今回は、IMSQRT関数~INDIRECT関数までをご紹介しております。

IMSQRT関数

アイエムスクエアルート

複素数の平方根を算出する

IMSQRT(複素数)


IMSUB関数

アイエムサブ

複素数の差を算出する

IMSUB(複素数1,複素数2)


IMSUM関数

アイエムサム

複素数の和を算出する

IMSUM(複素数1[,複素数2])


IMTAN関数

アイエムタンジェント

複素数のタンジェントを算出する

IMTAN(複素数)


INDEX関数

インデックス

セル範囲から縦横座標で値を抽出

INDEX(配列,行番号,[列番号])

INDEX(参照,行番号,[列番号],[領域番号])


INDIRECT関数

インダイレクト

文字列で参照されるセルの値を算出

INDIRECT(参照文字列,[参照形式])

12/15/2020

Excel。二次関数のグラフを描くにはどうしたらいいの?【Graphing quadratics】

Excel。二次関数のグラフを描くにはどうしたらいいの?

<散布図:二次関数グラフ>

Excelのグラフは、アイディアで色々なグラフを描くことができます。

例えば、学生時代に学んだことがある「二次関数」。

その二次関数グラフを描くということも、簡単に描くことができます。


ということで、今回は、次のような二次関数グラフを作っていきます。

放物線のグラフですが、このようなグラフを描くためには、通常の折れ線グラフでは描くことができません。

「散布図」を使うことで、二次関数グラフなどを描くことが出来るようになっています。

二次関数グラフ

今回は、「y=x^2+2x+3」という二次関数をグラフ化します。

グラフなので、当然ですが、表がないと描くことができません。

最初は、表を作っていきます。

二次関数は、「y=ax^2+bx+c」ですから、「y=x^2+2x+3」のグラフを作りたいので、a・b・cに対応した数値を入力しているのが、A5:C5です。


頂点のX座標を算出していきます。

Xの頂点座標を算出する公式は、「-b/2a」ですから、B7の数式は、

=-B5/(2*A5)


同じように、頂点のY座標も算出します。

Yの頂点座標を算出する公式は「-(b^2-4ac)/4a」です。

これに合わせた数式を、B8に設定します。


B8の数式は、

=-(B5^2-4*A5*C5)/(4*A5)


次に、二次関数グラフを描くために「X」と「Y」を数式で算出していきます。

F7の数式は、

=$B$7+E7

先程算出した、頂点座標のXが「-1」なので、左右に5個ずつプロットするとした場合、-5の時は、-6と算出されます。

G7の数式は、

=$A$5*F7^2+$B$5*F7+$C$5

これは、解の公式をつかってY値を算出します。

「y=x^2+2x+3」に沿って作った数式というわけですね。


あとは、オートフィルで数式をコピーします。


これで、グラフを作るための表が完成しました。


ここからは、散布図をつかって、二次関数グラフを作っていきます。

F6:G17を範囲選択して、挿入タブの散布図から「散布図(平滑線)」で散布図を描きます。


 

散布図が挿入されました。


ちなみに、「マーカー」が付いたグラフにしたい時は、「散布図(平滑線とマーカー)」を選ぶことで、描くことができます。


綺麗な放物線の二次関数グラフができました。

あとは、線を太くしたり、プロットエリアを塗りつぶしたりして、見やすいようにアレンジすれば完成ですね。


ポイントは、どんなグラフでも共通ですが、グラフを作るための「表」をどうやって、作るのかということです。


きちんと、設定しておけば、例えば、「y=-x^2+2x+3」とa値を「-1」にするだけで、二次関数グラフもマイナス側で表示できます。


二次関数グラフは、学生さんや学校の先生向けのグラフなのかもしれませんが、機会があれば作ってみるとなかなか面白いですよ。

12/14/2020

今週のFacebookページの投稿 2020/12/7-2020/12/13【Facebook】

今週のFacebookページの投稿 2020/12/7-2020/12/13

<Facebookページ>

Facebookページで【書いてみた】ワンポイントです。

12月7日

Excel。REPLACE関数。

読み方は、リプレイスで、指定した文字数の文字列を置換する


12月8日

Excel。REPLACEB関数。

読み方は、リプレイズビーで、指定した位置からバイト数分の文字列を置換する


12月9日

Excel。REPT関数。

読み方は、リピートで、文字列を指定回数だけ繰り返して表示する


12月10日

Excel。RIGHT関数。

読み方は、ライトで、文字列の右端から文字を取り出す


12月11日

Excel。RIGHTB関数。

読み方は、ライトビーで、文字列の右端から指定のバイト数を返す


12月12日

Excel。ROMAN関数。]

読み方は、ローマンで、アラビア数字をローマ数字に変換します。


12月13日

Excel。ROUND関数。

読み方は、ラウンドで、指定桁数で四捨五入します。

12/12/2020

Excel。一行おきの数値の合計を簡単に算出したいけどどうしたらいいの?【Total every other line】

Excel。一行おきの数値の合計を簡単に算出したいけどどうしたらいいの?

<MOD&ROW関数とSUMIF関数>

やりたいことは簡単でも、実際に算出するとなると、どうしたらいいの?と思うことって結構あります。


例えば次のような表。


1行目には販売数が2行目には金額が入力されている表。

算出したいのは、それぞれの合算値です。


今回は、わかりやすいように少ないデータにしましたが、データの件数が増えたら、一行おきに範囲選択するのは、とても面倒ですし、ミスが発生する確率も当然高くなります。


できれば、販売数の列、金額の列というように、列ごとに管理してくれていれば、困ることはなかったのですが、今から作り直すのも面倒。

Excel VBAでマクロを作成するというのもいいのですが、もっと簡単に算出する方法はどのようにしたらいいのでしょうか?


今回のポイントは、奇数行なのか?偶数行なのか?ということです。


販売数は奇数行ですから、奇数行ごとに合算すれば、販売数の数値を算出することが出来ますし、偶数行ならば、金額の合算値を求めることができます。


奇数かどうかを判断する、ISODD関数や偶数かどうかを判断するISEVEN関数などもありますが、そんな珍しくない関数でも算出することができます。


その関数は、MOD関数とROW関数。


MOD関数は、除算した結果の「あまり」を算出することができる関数です。

ROW関数は行番号を算出することができる関数です。

つまり、行番号を2で除算してあまりのあるなしで、販売数と金額とをわけて結果を算出することができます。


D列に奇数行なのか偶数行なのか、判断させる数式を作ります。

D1をクリックして、次の数式を作ります。

=MOD(ROW(),2)

算出したら、オートフィルで数式をコピーします。


この数式。

どこかで見たことがある人もいるかもしれませんね。

条件付き書式で一行おきにセルに塗りつぶしを設定するのと同じですね。


この数式の意味ですが、

ROW関数は、行番号を算出します。


MOD関数で、その行番号を、「2」で除算した結果の余りを算出します。

余りが0ならば偶数ですし、1ならば奇数というのがわかります。

最後に、それぞれの合計値を算出します。ここで登場するのはSUMIF関数。


C9にSUMIF関数の数式をつくっていきます。


範囲は、$D$1:$D$8。MOD&ROW関数で算出したところが範囲になります。

検索条件は、1。

合計範囲は、$C$1:$C$8。


範囲や合計範囲で絶対参照を設定しているのは、オートフィルで金額も算出するためです。


C9の販売数の合計値の数式は、

=SUMIF($D$1:$D$8,1,$C$1:$C$8)


C10の金額の合計値の数式は、

=SUMIF($D$1:$D$8,0,$C$1:$C$8)


これで、一行おきの値を使った、合計値を算出することができました。


現場では、関数をつかうといいのか、それとも他の方法がいいのか、アレコレ考えてみると意外な方法を見つけることが出来るかもしれませんね。