勘定項目ごとに合計額を算出する。SumIf関数がやっていることをマクロで書くと?

演習問題テーマ:勘定項目ごとに合計額を算出する。SumIf関数がやっていることをマクロで書くと?

項目が出現したらその回数ではなく隣の列の金額を加算する仕組みをつくります。

合計額をあらわす変数をたてること、For Next構文で調べ終わったら合計額を表示する仕組み、複数の項目がある場合に初期化してから次の項目の金額を新たに加算しはじめる仕組みは第10回と同じ。今月支払額合計を、初期化する前の各項目の合計額を利用して加算していく仕組みは、よくみると出現するたびに加算する仕組みと同じだということに気づいてください。

途中ででてくるGoukeiという変数をkobetsuに一気にかえるやり方もここで覚えてください。

この講座を含む定額コースに参加するか、この講座を購入することで、講座を利用できるようになります。
定額コースに参加すると、そのコースの利用期間中はいつでも講座を利用できます。
講座を購入すると、いつでも講座を利用できます。

この講座を含む定額コースや購入の詳細については、講座トップページの「利用方法」を御覧ください。

学習記録としてメモを残す

完全に理解できた
まあまあ理解できた
ふつう
あまり理解できてない
さっぱり分からない

※メモを残すにはこの講座の利用権限が必要です。

質問や感想を投稿する

とても満足 満足 普通 不満 とても不満

ユーザ名を使う ニックネームを使う 匿名で投稿

※投稿に必要な権限がありません。

このページへの投稿/コメント

投稿ID: 5150 受講生さんの投稿
動画内での問題[2]以降の解説についてですが、if関数の条件設定が「結婚祝い」のまま、かつ変数kazuの値を初期化していないので答えとしては間違いではないでしょうか?
投稿日時: 2021年06月30日 14時33分47秒
コメントID: 7283 小川慶一さんからのお返事
お世話になります。
こちらの動画ですが、調べてみたところ、システム移行の際に、誤った動画が割り当てられていたようです。
適切なものに差し替えましたので、改めて、最新の動画にて学んでいただけますでしょうか。

大変恐縮です。
コメント日時: 2021年07月01日 20時17分33秒
投稿ID: 4836 たかちゃんさんの投稿
【感想】
今の所ヒント無しで正解はできるのですが、回答と見比べると余計な動きだったり見づらいプログラムとなってしまいます。

今までは変数をあまり使用しなかった為、変数に纏めることを意識したら、今回は余計な変数を作りすぎていました。(苦笑)

Goukeiという変数を、何故か途中で名前変更している。
kongetsu = goukei

画面左側にある値に、migi という名前の変数をつけている。(苦笑) など。

でも、VBAの勉強初めて1週間で、ここまでかけるようになってとても嬉しいです。講義に何回か出てきた可愛らしいスライド(ハナコのステップ)で一気に理解度が上がりました。
投稿日時: 2020年08月29日 10時09分23秒
コメントID: 6783 小川慶一さんからのお返事
たかちゃんさん:

おはようございます。

プログラミングは、デッサンに似ているところがあります。
「一発で最高の線を引ける」というより、何度も書いているうちにより洗練された線を引けるようになる感じですね。

「ハナコのステップ」も、デッサンの作法のようなものです。

ひきつづき、お楽しみください☆
コメント日時: 2020年08月29日 17時16分02秒
コメントID: 6784 たかちゃんさんからのお返事
小川慶一さん:
励ましの言葉、ありがとうございます。
頭から煙が出そうな時もありますが、本当に楽しいです。

オンラインだと基本一人で学習ですが、質問以外にもこうやって声をかけて頂けると、励みになります。少し前の回で、別の方に回答していた理系科目の上達方法もとても参考になりました。

> たかちゃんさん:
>
> おはようございます。
>
> プログラミングは、デッサンに似ているところがあります。
> 「一発で最高の線を引ける」というより、何度も書いているうちにより洗練された線を引けるようになる感じですね。
>
> 「ハナコのステップ」も、デッサンの作法のようなものです。
>
> ひきつづき、お楽しみください☆
コメント日時: 2020年08月29日 19時47分43秒
コメントID: 6785 小川慶一さんからのお返事
たかちゃんさん:

楽しんでください。

大人になると、なかなか、こういう遊びをガチに楽しめません。人生の貴重な機会です。
しかも、仕事に役立つし、そこそこ上達すれば、仕事中にこの遊びをガンガンやっていても誰も文句を言ってこなくなるという...(それどころか、喜んでもらえますw)

> オンラインだと基本一人で学習ですが、質問以外にもこうやって声をかけて頂けると、励みになります。少し前の回で、別の方に回答していた理系科目の上達方法もとても参考になりました。

気軽にコメントしてください。
なお、質問・相談には早めに回答指定ます。感想系の投稿への回答は若干遅めです。
コメント日時: 2020年08月29日 21時47分23秒
投稿ID: 4674 nobashiさんの投稿
VBAのプログラミングは自分でも解説を聞く前に解答できました。操作の件で教えてほしいのですが、HOME+Shift+↓↓↓+Ctr+Xできりとり、貼り付けする場所で、TABを操作し、Ctr+Vで張り付けると、一番上の行だけしか、TABが効きません。他の行はタブが効かないのですが。。。(他の問題でも同じです。どこがいけないのでしょうか。
投稿日時: 2020年04月22日 01時41分58秒
コメントID: 6480 小川慶一さんからのお返事
nobashiさん:

>VBAのプログラミングは自分でも解説を聞く前に解答できました。

おお、さすがです。
すばらしいですね。


>HOME+Shift+↓↓↓+Ctr+Xできりとり、貼り付けする場所で、TABを操作し、Ctr+Vで張り付けると、一番上の行だけしか、TABが効きません。

講座で示している手順と異なります。

[1] [Home] + [Shift] + [↓][↓][↓]
[2] [Tab] で、[1]で選択した全体を右に移動させる
[3] [Ctrl] + [X]
[4] 貼り付け先にカーソルキー上下【のみ】で移動する
[5] [Ctrl] + [V]

「一番上の行だけしか、TABが効きません。」という文言から察するに、状況を正確に理解できていないです。

たとえば、以下の3行はすべて先頭にスペースが4つ入っていますが、この3行すべて(3行目最後の改行含む)を切り取ったとして

    1行目
    2行目
    3行目

行の先頭にカーソルがある状態で貼り付けをすると、以下のとおりになります。

    1行目
    2行目
    3行目

ところが、たとえば、行の先頭から見て右に8つ移動させたところにカーソルがある状態で貼り付けをすると、以下のとおりになります。

            1行目
    2行目
    3行目

なぜなら、クリップボードに格納されているのは、
【スペース4つ「1行目」改行スペース4つ「2行目」改行スペース4つ「3行目」改行】という文字列で、行の先頭から見て右に8つ移動させたところにカーソルからそのクリップボードの内容が書き出されただけだからです。

つまり、「一番上の行だけしか、TABが効きません。他の行はタブが効かない」のではなく、純粋に、クリップボードに格納されている文字列が、カーソルのある場所から出力されたというだけのことです。

この点理解をしっかりできれば、講座で示している操作の順序への理解もまた深まるかと思います。

よろしくお願いいたします。


> VBAのプログラミングは自分でも解説を聞く前に解答できました。操作の件で教えてほしいのですが、HOME+Shift+↓↓↓+Ctr+Xできりとり、貼り付けする場所で、TABを操作し、Ctr+Vで張り付けると、一番上の行だけしか、TABが効きません。他の行はタブが効かないのですが。。。(他の問題でも同じです。どこがいけないのでしょうか。
>
コメント日時: 2020年04月22日 02時06分17秒
コメントID: 6481 受講生さんからのお返事
小川慶一さん:
適時に詳細なコメントありがとうございました。
順序が違っていました。
[1] [Home] + [Shift] + [↓][↓][↓]
[2] [Tab] で、[1]で選択した全体を右に移動させる
[3] [Ctrl] + [X]
[4] 貼り付け先にカーソルキー上下【のみ】で移動する
[5] [Ctrl] + [V]
[2]と[3]の順序が逆でした。見やすいプログラムを作るには、この操作は必須だと思い、あえて、質問しました。ありがとうございました。
従来はマウスとキーボードを駆使して操作し、肩が凝っていたのではと思います。今回のことをきっかけに、できるだけ、キーボードだけで操作するように訓練したいと思います。
新型コロナで外出できず、家にいても、テレビをみると、気分が落ち込みます。今回のことは前向きにとらえて、VBAの習得に日々にはげみたいと思っています。


> nobashiさん:
>
> >VBAのプログラミングは自分でも解説を聞く前に解答できました。
>
> おお、さすがです。
> すばらしいですね。
>
>
> >HOME+Shift+↓↓↓+Ctr+Xできりとり、貼り付けする場所で、TABを操作し、Ctr+Vで張り付けると、一番上の行だけしか、TABが効きません。
>
> 講座で示している手順と異なります。
>
> [1] [Home] + [Shift] + [↓][↓][↓]
> [2] [Tab] で、[1]で選択した全体を右に移動させる
> [3] [Ctrl] + [X]
> [4] 貼り付け先にカーソルキー上下【のみ】で移動する
> [5] [Ctrl] + [V]
>
> 「一番上の行だけしか、TABが効きません。」という文言から察するに、状況を正確に理解できていないです。
>
> たとえば、以下の3行はすべて先頭にスペースが4つ入っていますが、この3行すべて(3行目最後の改行含む)を切り取ったとして
>

>     1行目
>     2行目
>     3行目
> 
>
> 行の先頭にカーソルがある状態で貼り付けをすると、以下のとおりになります。
>

>     1行目
>     2行目
>     3行目
> 
>
> ところが、たとえば、行の先頭から見て右に8つ移動させたところにカーソルがある状態で貼り付けをすると、以下のとおりになります。
>

>             1行目
>     2行目
>     3行目
> 
>
> なぜなら、クリップボードに格納されているのは、
> 【スペース4つ「1行目」改行スペース4つ「2行目」改行スペース4つ「3行目」改行】という文字列で、行の先頭から見て右に8つ移動させたところにカーソルからそのクリップボードの内容が書き出されただけだからです。
>
> つまり、「一番上の行だけしか、TABが効きません。他の行はタブが効かない」のではなく、純粋に、クリップボードに格納されている文字列が、カーソルのある場所から出力されたというだけのことです。
>
> この点理解をしっかりできれば、講座で示している操作の順序への理解もまた深まるかと思います。
>
> よろしくお願いいたします。
>
>
> > VBAのプログラミングは自分でも解説を聞く前に解答できました。操作の件で教えてほしいのですが、HOME+Shift+↓↓↓+Ctr+Xできりとり、貼り付けする場所で、TABを操作し、Ctr+Vで張り付けると、一番上の行だけしか、TABが効きません。他の行はタブが効かないのですが。。。(他の問題でも同じです。どこがいけないのでしょうか。
> >
コメント日時: 2020年04月22日 02時36分42秒
コメントID: 6482 小川慶一さんからのお返事
受講生 さん:

お返事ありがとうございます。

手順についての理解が進んだようなら何よりです。
ひきつづき講座と演習をお楽しみください。


> 小川慶一さん:
> 適時に詳細なコメントありがとうございました。
> 順序が違っていました。
> [1] [Home] + [Shift] + [↓][↓][↓]
> [2] [Tab] で、[1]で選択した全体を右に移動させる
> [3] [Ctrl] + [X]
> [4] 貼り付け先にカーソルキー上下【のみ】で移動する
> [5] [Ctrl] + [V]
> [2]と[3]の順序が逆でした。見やすいプログラムを作るには、この操作は必須だと思い、あえて、質問しました。ありがとうございました。
> 従来はマウスとキーボードを駆使して操作し、肩が凝っていたのではと思います。今回のことをきっかけに、できるだけ、キーボードだけで操作するように訓練したいと思います。
> 新型コロナで外出できず、家にいても、テレビをみると、気分が落ち込みます。今回のことは前向きにとらえて、VBAの習得に日々にはげみたいと思っています。
コメント日時: 2020年04月22日 04時08分06秒
投稿ID: 4280 受講生さんの投稿
sumif関数の方法は理解できました。sumifs関数もマクロで実現可能ですか?
投稿日時: 2018年12月29日 23時45分20秒
コメントID: 5864 小川慶一さんからのお返事
受講生 さん:

こんにちは。

> sumifs関数もマクロで実現可能ですか?

受講生さんは、どう思われますか。
・実現可能だと思う
・実現不可能だと思う

上記どちらかを選択のうえ、「そう思った理由」もお知らせください。
コメント日時: 2018年12月30日 01時04分54秒
投稿ID: 3970 garuruさんの投稿
ご返信ありがとうございます。

>演習には、パターンをしっかり学ぶということを意識して取り組んでください。
⇒上記アドバイス、ありがとうございます。フォローアップはアウトプットのみのイメージでいたのですが、「パターンを覚える」というインプットの要素もあることを意識します。
今後ともよろしくお願いします。
投稿日時: 2018年06月24日 09時07分36秒
コメントID: 5521 小川慶一さんからのお返事
garuruさん:

そうですね。
数学でも、公式を習ったあと、計算問題、文章題を解いて、ひととおりのパターンを学んで完成です。
エクセルマクロも同様です。基本文法を習って、書きたいことを書けるような練習をして、それから実践演習です。

> ご返信ありがとうございます。
>
> >演習には、パターンをしっかり学ぶということを意識して取り組んでください。
> ⇒上記アドバイス、ありがとうございます。フォローアップはアウトプットのみのイメージでいたのですが、「パターンを覚える」というインプットの要素もあることを意識します。
> 今後ともよろしくお願いします。
コメント日時: 2018年06月24日 18時21分08秒
投稿ID: 3969 garuruさんの投稿
初投稿となります。よろしくお願いします。問2で、下記の様なプログラムを書いてしましまた。一応やりたいことはできたのですが、「項目の分だけ変数を作ってelseifで処理する」という考えが真っ先に思いつき、しそ巻き無料の問題でも同じ構文でかいていました。

先生の正解に近づくにはロジカルシンキングの様なものが欠如しちるように思えるのですが、何かアドバイス頂けないでしょうか?

 Sub enari()
Dim kek
Dim omi
Dim syu
Dim gre
Dim omihuku

Dim gyo

kek = 0
omi = 0
syu = 0
gre = 0
omihuku = 0

For gyo = 4 To 10
    If Range("I" & gyo).Value = "?????j??" Then
    kek = kek + Range("J" & gyo).Value
    
    ElseIf Range("I" & gyo).Value = "??????????" Then
    omihuku = omihuku + Range("J" & gyo).Value
    
    ElseIf Range("I" & gyo).Value = "?o?Y?j??" Then
    syu = syu + Range("J" & gyo).Value
    
    ElseIf Range("I" & gyo).Value = "???O" Then
    gre = gre + Range("J" & gyo).Value
    
    ElseIf Range("I" & gyo).Value = "????????" Then
    omi = omi + Range("J" & gyo).Value
    
    End If
Next

Range("D4").Value = kek
Range("D5").Value = syu
Range("D6").Value = Range("C6").Value
Range("D7").Value = gre
Range("D8").Value = omi
Range("D9").Value = omihuku

Range("E4").Value = Range("C4").Value + kek
Range("E5").Value = Range("C5").Value + syu
Range("E6").Value = Range("C6").Value
Range("E7").Value = Range("C7").Value + gre
Range("E8").Value = Range("C8").Value + omi
Range("E9").Value = Range("C9").Value + omihuku

End Sub
投稿日時: 2018年06月23日 10時56分50秒
コメントID: 5520 小川慶一さんからのお返事
garuruさん:

「自分で考え抜いて、思いついた方法でとにかく書き上げられた」ということが、まずは、とてもすばらしいと思います。
そういうことをやりきれる力は、「ロジカルシンキング」とか、「ロジカルに表現しきる」ということの力そのものです。

ということなので、

>先生の正解に近づくにはロジカルシンキングの様なものが欠如しちるように思えるのですが、

「シンキング」の力は十分にあると思いますよ。
考え方の「パターンのストック」みたいなのがまだ少し足りないだけかな、と思います。

ということなので、演習には、パターンをしっかり学ぶということを意識して取り組んでください。
思いつかなかったやり方が出てきたとしても、「あ、これはこういうパターンなんだな」くらいに思って (^_^ )☆

演習ひととおりやってからこの問題を再度解き直せば、そのときには、僕がここで書いたことの意味がよりはっきり分かるかもしれません。
コメント日時: 2018年06月23日 22時01分03秒
投稿ID: 3957 morimotoさんの投稿
for nextが2段階あることでわかんなくなるんですが、紙に書けば
ほんとわかりました。2つのfor nextを頭の中で同時に動かすから
混乱するようです。1つのfor nextを止めてもう1つのfor nextを動か
していけば見通しがたちました。あとはカウンターをどこで0に
リセットするかですよね。現場の第一線のプログラマーもやはり
紙に書きだしたりすることあるのでしょうか?
投稿日時: 2018年06月17日 10時53分17秒
コメントID: 5509 小川慶一さんからのお返事
morimotoさん:

「ハナコのステップ」を徹底してください。

> 現場の第一線のプログラマーもやはり紙に書きだしたりすることあるのでしょうか?

あなたはどう思われますか?


> for nextが2段階あることでわかんなくなるんですが、紙に書けばほんとわかりました。
> 2つのfor nextを頭の中で同時に動かすから混乱するようです。
> 1つのfor nextを止めてもう1つのfor nextを動かしていけば見通しがたちました。
> あとはカウンターをどこで0にリセットするかですよね。
> 現場の第一線のプログラマーもやはり紙に書きだしたりすることあるのでしょうか?
コメント日時: 2018年06月19日 22時43分53秒
投稿ID: 3956 morimotoさんの投稿
Sumifで余裕、、、まさかマクロ塾ではそんなシンプルでは終わら
ないと思いきやその通りでした。しそ巻き問題といいこの問題と
いいほんととっつきにくいものでした。が画面ばかり見ても仕方
ないのでいつもあるように「紙に書いて」みればよく流れが見えました。わからないときこと紙に書き出せば見えるものですね。
投稿日時: 2018年06月17日 10時46分51秒
コメントID: 5508 小川慶一さんからのお返事
morimotoさん:

紙に書くのとても良いことです。


発展編1に進むともっと簡単な方法を学べます。
基礎編はマクロを書ききるのに必要な腕力と体力をつけることを重視しているので、便利な道具にはあまり頼らず、少ない道具で、ベタな方法ででも解決できるような方法を紹介しています。

> Sumifで余裕、、、まさかマクロ塾ではそんなシンプルでは終わらないと思いきやその通りでした。
>しそ巻き問題といいこの問題といいほんととっつきにくいものでした。
>が画面ばかり見ても仕方ないのでいつもあるように「紙に書いて」みればよく流れが見えました。
>わからないときこと紙に書き出せば見えるものですね。
コメント日時: 2018年06月19日 22時42分32秒
投稿ID: 3688 近藤さんの投稿
右のリストの変数・左のリストの変数よくわかりました。
練習してみて気づいたのが、
例えば(実務で使っているデータ)、
右のリスト(元となる表データ)の変数
左のリスト(合計の算出先)の変数をつくり、
動画と同じようにハナコでくくってもなぜかうまく動かないなと悪戦苦闘していたところ、
右のリスト(元となる表データ)の箱を先につくり、
左のリスト(合計の算出先)でくくらないとうまくいかないのですね。
順番を逆にしていたのでうまくいかず、うんうん唸っていました笑
うまくいったときはとてつもない快感でした!
投稿日時: 2018年02月28日 08時06分39秒
コメントID: 5202 小川慶一さんからのお返事
ゲストさん:

おはようございます。

> 練習してみて気づいたのが、
> [中略]
> 順番を逆にしていたのでうまくいかず、うんうん唸っていました笑
> うまくいったときはとてつもない快感でした!

失敗の経験も大切ですね。
ひきつづきよろしくお願いいたします (^^*
コメント日時: 2018年03月01日 17時53分22秒
投稿ID: 3595 ガラパゴスタディー吉川さんの投稿
実務ではsumif関数を使っていたので、マクロにするとどうなるか興味深く学習いたしました。
実務だととにかく動けばよいという感じだったので、マクロにしようと思っていなかったというのもあります・・・
内容的には以前の講座の応用でしたが、変数を0に戻すか戻さないかがどう影響するのかを復習できました。
引き続き学習を進めていきますので、よろしくお願いいたします。
投稿日時: 2017年12月22日 01時22分17秒
コメントID: 5084 小川慶一さんからのお返事
吉川 裕子さん:

CountIf関数の代わりなら
kazu = kazu + 1

SumIf関数の代わりなら
gokei = gokei + [[セルの値]]

という感じですね。パターンは同じです。
あとは、初期化。


「出現回数を数える。CountIf関数がやっていることをマクロで書くと?」でも、複数の項目それぞれに対して合計数を数えるとき、初期化をしています。
今見ると、改めて気づくことかあるかも。

出現回数を数える。CountIf関数がやっていることをマクロで書くと?
https://forum.pc5bai.com/lesson/page/150



> 実務ではsumif関数を使っていたので、マクロにするとどうなるか興味深く学習いたしました。
> 実務だととにかく動けばよいという感じだったので、マクロにしようと思っていなかったというのもあります・・・
> 内容的には以前の講座の応用でしたが、変数を0に戻すか戻さないかがどう影響するのかを復習できました。
> 引き続き学習を進めていきますので、よろしくお願いいたします。
コメント日時: 2017年12月22日 16時03分14秒
投稿ID: 3431 受講生さんの投稿
動画4を基礎にして出現回数を金額に置き換える。
合計は、累計にならないようにループの初めに0をする。
投稿日時: 2017年09月17日 17時26分04秒
コメントID: 4901 小川慶一さんからのお返事
受講生 さん:

よくあるパターンです (^^

> 動画4を基礎にして出現回数を金額に置き換える。
> 合計は、累計にならないようにループの初めに0をする。
コメント日時: 2017年09月17日 20時59分30秒
投稿ID: 3368 浦山大さんの投稿
あら、↓のプログラムの…

for gyo = 4 to 9
以下のgoukei=0が一タブ多かったです。
自分で修正しておきます…。
投稿日時: 2017年08月23日 21時18分58秒
投稿ID: 3367 浦山大さんの投稿
久しぶりにコメントを記載します。

動画は18番まで閲覧致しました。
動画は止めながら一緒にマクロを作っています。
発想が貧困?
なので先に教えてもらって動きを掴む方が早いかなと思い、
フォームを教えてもらうつもりで拝見してから作業というステップにしています。

作業は11まで進めました。
動画時点で「そうなんだ」で全然動きが伴っていないので、
毎日1からやれる範囲まで通しで問題を解き続けています。
問題10までなら5回くらいずつ書いたと思います。

書く度に変化を感じています:
※必ず1行なんでもいいので書く→次に考えるが癖になった
※F8でテストしながら書く→1ステップずつ修正しながら拡大の意味が体得できた
※テストしている時に上手く動かないと感じたら何をしたいのかを紙に書いて、
自分が動かしたいことを文や図に起こすようになった(案外、出来ない時って図示や文にしようとしている自分自身があいまいなんですね)

途中経過でした。
9月半ばまでには25番くらいまでは書けるようになりたいと思います。

以下は一時間くらいかかって完成させた回答です。
まだ残り24個も成長する材料があると思うと、
自分がどこまで行ってしまうのか?楽しみです。
仕事で使えそうな問題も出てきました。引き続き宜しくお願いします。


Sub iwai()
    Dim goukei
    Dim soukei
    Dim gyo
    Dim migi
    For gyo = 4 To 9
            goukei = 0
        For migi = 4 To 10
            If Range("B" & gyo).Value = Range("I" & migi).Value Then
                goukei = goukei + Range("j" & migi).Value
            End If
        Next
        soukei = soukei + goukei
        Range("D" & gyo).Value = goukei
        Range("E" & gyo).Value = Range("c" & gyo).Value + goukei
    Next
    Range("D10").Value = soukei
    Range("E10").Value = Range("C10") + soukei
End Sub
投稿日時: 2017年08月23日 21時14分50秒
コメントID: 4827 小川慶一さんからのお返事
浦山大さん:

まったくもって、順調ですね。
ただただ、楽しんでください☆
コメント日時: 2017年08月25日 08時32分20秒
投稿ID: 3176 受講生さんの投稿
お世話になります。
下記の記載したprogramと回答のプログラムが、違うことによって不都合が生じることになるのでしょうか?
下記に記載したプロフラムはループの後に出力先を記載せずに、IF文後に
記載しています。実行した場合、回答と同じ値が導いていますが、回答のように、ループ後の出力先を記載することが、いいのでしょうか。
記載したprogramのgoukei の場合は、最終のループ後に記載しています。
そのあたりのことについて、わかりませんでしたので、宜しくお願いします。


[code]Sub rensyu1()
Dim goukei
Dim gyo
Dim migi
Dim hida
Dim syoukei
For gyo = 4 To 9
syoukei = 0
For migi = 4 To 10
If Range("I" & migi).Value = Range("B" & gyo).Value Then
syoukei = syoukei + Range("J" & migi).Value
goukei = goukei + Range("J" & migi).Value
End If
Range("D" & gyo).Value = syoukei
Range("E" & gyo).Value = Range("C" & gyo).Value + syoukei
Next
Next
Range("D10").Value = goukei
Range("E10").Value = Range("C10").Value + goukei
End Sub[/code]
投稿日時: 2017年06月14日 06時45分01秒
コメントID: 4624 小川慶一さんからのお返事
受講生 さん:

以下の件にポイントを絞って回答します。

> 記載しています。実行した場合、回答と同じ値が導いていますが、回答のように、ループ後の出力先を記載することが、いいのでしょうか。

こびとちゃんになったつもりで手作業してみてください。
どっちのほうがこびとちゃんにとって面倒くさいか(=よりプログラムの実行に負荷がかかるか)、痛感できると思います。

> 記載したprogramのgoukei の場合は、最終のループ後に記載しています。

↑これは、何を言いたいのか、いただいたご質問からは理解できませんでした。改めてご質問いただけますか。

よろしく、お願いいたします。
コメント日時: 2017年06月14日 18時31分32秒
投稿ID: 3055 受講生さんの投稿
[3]
[2]で作ったマクロを改変し、さらに、セルD10、セルE10に各列の合計額を記入するマクロとしなさい についてセルD10 にD4からD9の合計額を表示するというマクロを作る場合にはどのような式で書くことができますか?
[1][2]については以下のようなマクロで問題なく動いたのですが、D列の値をそれぞれの項目について値を入れていくというマクロ(累積値ではなく)になったので、合計のマクロが作れませんでした。Range("D10").value=Sum(”D4:D9”).valueというのも試しましたが、15100という値のみ入りました。アドバイスいただければ幸いです。

Sub test()
 Dim harai
 For harai = 4 To 9
 Dim koumoku
 koumoku = Range("B" & harai).Value
 Dim iwai
 iwai = Range("D" & harai).Value
 Dim retsu
 For retsu = 4 To 10
    If Range("I" & retsu).Value = koumoku Then
    iwai = iwai + Range("J" & retsu).Value
    End If
  Next
  Range("D" & harai).Value = iwai
  Range("E" & harai).Value = Range("D" & harai).Value + Range("C" & harai).Value
  Next
  
End Sub
投稿日時: 2017年05月14日 17時41分52秒
コメントID: 4514 小川慶一さんからのお返事
受講生 さん:

> [3]
> [2]で作ったマクロを改変し、さらに、セルD10、セルE10に各列の合計額を記入するマクロとしなさい についてセルD10 にD4からD9の合計額を表示するというマクロを作る場合にはどのような式で書くことができますか?
> [1][2]については以下のようなマクロで問題なく動いたのですが、D列の値をそれぞれの項目について値を入れていくというマクロ(累積値ではなく)になったので、合計のマクロが作れませんでした。

やってみましょう。
まずは、いただいたコードをまずは以下のように編集しました。

[a] 変数はループより前に宣言
[b] インデントを整理。for next構文、if文内のコードはしっかり→にズラす

Sub test_ogawa()
  Dim harai
  Dim koumoku
  Dim iwai
  Dim retsu
  For harai = 4 To 9
    koumoku = Range("B" & harai).Value
    iwai = Range("D" & harai).Value
    For retsu = 4 To 10
      If Range("I" & retsu).Value = koumoku Then
        iwai = iwai + Range("J" & retsu).Value
      End If
    Next
    Range("D" & harai).Value = iwai
    Range("E" & harai).Value = Range("D" & harai).Value + Range("C" & harai).Value
  Next
End Sub

↑自力で改めてここまで到達してください。[a], [b]ともに大切です。

さてさて。
総計を含めるなら、以下の[p], [q], [r], [s]を含める感じですね。

Sub test_ogawa_soukei()
    Dim harai
    Dim koumoku
    Dim iwai
    Dim retsu
    Dim soukei '[p]
    
    For harai = 4 To 9
        koumoku = Range("B" & harai).Value
        iwai = Range("D" & harai).Value
        For retsu = 4 To 10
            If Range("I" & retsu).Value = koumoku Then
                iwai = iwai + Range("J" & retsu).Value
                soukei = soukei + Range("J" & retsu).Value '[q]
            End If
        Next
        Range("D" & harai).Value = iwai
        Range("E" & harai).Value = Range("D" & harai).Value + Range("C" & harai).Value
    Next
    Range("D10").Value = soukei '[r]
    Range("E10").Value = Range("C10").Value + Range("D10").Value '[s]
End Sub

> Range("D10").value=Sum(”D4:D9”).valueというのも試しましたが

↑これは、文法的にはないです。。
発展編1で扱いますが、以下ならばあり。

Range("D10").Value = Worksheetfunction.Sum(Range("D4:D9"))

なお、お題では、課題解決のために[1]→[2]と作ってきたマクロをさらに改変して[3]を作る、としていますが、ロジックの理解が難しければ、複数のForNext構文を作り、それぞれで個別に仕事をさせる、というのもありです。

例えば、以下。

Sub waketeshukei_1()
    Dim goukei
    Dim migi
    Dim hida
    For hida = 4 To 9
        goukei = 0
        For migi = 4 To 10
            If Range("I" & migi).Value = Range("B" & hida).Value Then
                goukei = goukei + Range("J" & migi).Value
            End If
        Next
        Range("D" & hida).Value = goukei
        Range("E" & hida).Value = Range("C" & hida).Value + goukei
    Next
    
    Dim soukei
    For hida = 4 To 9
        soukei = soukei + Range("D" & hida).Value
    Next
    Range("D10").Value = soukei
    Range("E10").Value = Range("C10").Value + soukei
End Sub

さらに言えば、E列に値を入れる部分も、別のForNext構文を作り、そこで実施してもいいかも。以下。

Sub waketeshukei_2()
    Dim goukei
    Dim migi
    Dim hida
    For hida = 4 To 9
        goukei = 0
        For migi = 4 To 10
            If Range("I" & migi).Value = Range("B" & hida).Value Then
                goukei = goukei + Range("J" & migi).Value
            End If
        Next
        Range("D" & hida).Value = goukei
    Next
    
    Dim soukei
    For hida = 4 To 9
        soukei = soukei + Range("D" & hida).Value
    Next
    Range("D10").Value = soukei
    
    For hida = 4 To 9
        Range("E" & hida).Value = Range("C" & hida).Value + Range("D" & hida).Value
    Next
    Range("E10").Value = Range("C10").Value + soukei
End Sub

↑だいぶ、ロジックがすっきりしますね。

Dim soukei 以下の部分をひとつにまとめなおしてみます。

Sub waketeshukei_3()
    Dim goukei
    Dim migi
    Dim hida
    For hida = 4 To 9
        goukei = 0
        For migi = 4 To 10
            If Range("I" & migi).Value = Range("B" & hida).Value Then
                goukei = goukei + Range("J" & migi).Value
            End If
        Next
        Range("D" & hida).Value = goukei
    Next
    
    Dim soukei '[x1]
    For hida = 4 To 9
        soukei = soukei + Range("D" & hida).Value '[x2]
        Range("E" & hida).Value = Range("C" & hida).Value + Range("D" & hida).Value '[x3]
    Next

    Range("D10").Value = soukei
    Range("E10").Value = Range("C10").Value + soukei
End Sub

↑waketeshukei_1 と同じ形に戻りました。

さらに、「For hida = 4 To 9」の2つのFor Next構文をひとつにまとめてみます。
すると、以下。

Sub waketeshukei_4()
    Dim goukei
    Dim migi
    Dim hida
    Dim soukei '[x1]
    For hida = 4 To 9
        goukei = 0
        For migi = 4 To 10
            If Range("I" & migi).Value = Range("B" & hida).Value Then
                goukei = goukei + Range("J" & migi).Value
            End If
        Next
        Range("D" & hida).Value = goukei
        soukei = soukei + Range("D" & hida).Value '[x2]
        Range("E" & hida).Value = Range("C" & hida).Value + Range("D" & hida).Value '[x3]
    Next
    
    Range("D10").Value = soukei
    Range("E10").Value = Range("C10").Value + soukei
End Sub

僕が動画の中で示した回答例は、↑これの souke = soukei + ... の処理をするタイミングを For migi = 4 To 10 ... Next の中にしただけです。
以下。

Sub waketeshukei_5()
    Dim goukei
    Dim migi
    Dim hida
    Dim soukei '[x1]
    For hida = 4 To 9
        goukei = 0
        For migi = 4 To 10
            If Range("I" & migi).Value = Range("B" & hida).Value Then
                goukei = goukei + Range("J" & migi).Value
                soukei = soukei + Range("J" & migi).Value '[x2-改]
            End If
        Next
        Range("D" & hida).Value = goukei
'        soukei = soukei + Range("D" & hida).Value '[x2-旧]
        Range("E" & hida).Value = Range("C" & hida).Value + Range("D" & hida).Value '[x3]
    Next
    
    Range("D10").Value = soukei
    Range("E10").Value = Range("C10").Value + soukei
End Sub

最後のは、ちょっと難しかっだかな。。
ともあれ、いろいろ書いてみました。今回提供したサンプルコードを動かしてみたり自分で書いてみたりとして、遊んでみてください。
コメント日時: 2017年05月14日 19時14分53秒
投稿ID: 2984 斉藤 隆仁さんの投稿
お世話になっております。

今回の動画の表の見方につきまして
根本的なところを教えて下さい。

右の表から"結婚祝い"の合計金額15,000円を
左の表に転記するのは間違っていないと思うのですが、
次の行の"出産祝い"の合計金額を右の表から取ってくるならば
I列に2回出現するので金額は10,000円になるのではないかと思っています。

そうすると左の表においては
"出産祝い"の行の今月の支払額の値は30,000ではなく
10,000が入ると思うのですが、私が見方を間違えておりますでしょうか?

ご教授頂ければ幸いです。
宜しくお願い致します。

投稿日時: 2017年04月15日 23時49分02秒
投稿ID: 2741 受講生さんの投稿
投稿文中の[code] ... [/code]の数や位置関係が合いません。
以下の投稿では、コードのハイライト表示はされません。

お世話になっています。一つ聞きたいことがあります。
下記のように、 Range("D" & hida).Value = goukeiをfor next (migi)の構文内で実行すると、今月支払いのない成人祝いの欄は「空白」で表示されます。
構文外にこの式を置くと「0」と表示されるのですが、構文内に置くとなぜ「空白」になってしまうのでしょうか。
[code]Sub rensyu3()
Dim goukei
Dim migi
Dim hida
For hida = 4 To 9
goukei = 0
For migi = 4 To 10

If Range("I" & migi).Value = Range("B" & hida).Value Then
goukei = goukei + Range("J" & migi).Value
Range("D" & hida).Value = goukei
End If
Next
Next
End Sub[/code
投稿日時: 2016年12月15日 20時11分20秒
コメントID: 4172 ゲストさんからのお返事
受講生 さん:

比較できるように、まずは、両方の例を並べて投稿いただけますか。


>お世話になっています。一つ聞きたいことがあります。
>下記のように、 Range("D" & hida).Value = goukeiをfor next (migi)の構文内で実行すると、今月支払いのない成人祝いの欄は「空白」で表示されます。
>構文外にこの式を置くと「0」と表示されるのですが、構文内に置くとなぜ「空白」になってしまうのでしょうか。
>
Sub rensyu3()
>    Dim goukei
>    Dim migi
>    Dim hida
>    For hida = 4 To 9
>        goukei = 0
>        For migi = 4 To 10
>            
>            If Range("I" & migi).Value = Range("B" & hida).Value Then
>                goukei = goukei + Range("J" & migi).Value
>                Range("D" & hida).Value = goukei
>            End If
>        Next
>    Next
>End Sub
コメント日時: 2016年12月15日 20時21分53秒
コメントID: 4173 受講生さんからのお返事
受講生 さん:

上のコードは「空白」になり、下のコードは「0」になります。
ご確認宜しくお願い致します。

>お世話になっています。一つ聞きたいことがあります。
>下記のように、 Range("D" & hida).Value = goukeiをfor next (migi)の構文内で実行すると、今月支払いのない成人祝いの欄は「空白」で表示されます。
>構文外にこの式を置くと「0」と表示されるのですが、構文内に置くとなぜ「空白」になってしまうのでしょうか。
>
Sub rensyu3()
>    Dim goukei
>    Dim migi
>    Dim hida
>    For hida = 4 To 9
>        goukei = 0
>        For migi = 4 To 10
>            
>            If Range("I" & migi).Value = Range("B" & hida).Value Then
>                goukei = goukei + Range("J" & migi).Value
>                Range("D" & hida).Value = goukei
>            End If
>        Next
>    Next
>End Sub

>
Sub rensyu3()
>    Dim goukei
>    Dim migi
>    Dim hida
>    For hida = 4 To 9
>        goukei = 0
>        For migi = 4 To 10
>      
>            If Range("I" & migi).Value = Range("B" & hida).Value Then
>                goukei = goukei + Range("J" & migi).Value
>            End If
>        Next
          Range("D" & hida).Value = goukei
>    Next
>End Sub
コメント日時: 2016年12月16日 02時04分52秒
コメントID: 4175 ゲストさんからのお返事
受講生 さん:

結論を書くと、以下のとおりです。

・上のマクロでは、 hida = 6 のとき、一度も Range("D" & hida).Value = goukei が実行される
・下のマクロでは、 hida の値に関わらず、 Range("D" & hida).Value = goukei は必ず一度実行される

まずはそのくらいで。
ピンとこないようでしたら、じっくり動作確認を。上のマクロで、 hida = 6 のときの動きを、ステップインモードで慎重にレビューしてください。([F8] で実行)



>受講生 さん:
>
>上のコードは「空白」になり、下のコードは「0」になります。
>ご確認宜しくお願い致します。
>
>>お世話になっています。一つ聞きたいことがあります。
>>下記のように、 Range("D" & hida).Value = goukeiをfor next (migi)の構文内で実行すると、今月支払いのない成人祝いの欄は「空白」で表示されます。
>>構文外にこの式を置くと「0」と表示されるのですが、構文内に置くとなぜ「空白」になってしまうのでしょうか。
>>
Sub rensyu3()
>>    Dim goukei
>>    Dim migi
>>    Dim hida
>>    For hida = 4 To 9
>>        goukei = 0
>>        For migi = 4 To 10
>>            
>>            If Range("I" & migi).Value = Range("B" & hida).Value Then
>>                goukei = goukei + Range("J" & migi).Value
>>                Range("D" & hida).Value = goukei
>>            End If
>>        Next
>>    Next
>>End Sub
>
>>
Sub rensyu3()
>>    Dim goukei
>>    Dim migi
>>    Dim hida
>>    For hida = 4 To 9
>>        goukei = 0
>>        For migi = 4 To 10
>>      
>>            If Range("I" & migi).Value = Range("B" & hida).Value Then
>>                goukei = goukei + Range("J" & migi).Value
>>            End If
>>        Next
>          Range("D" & hida).Value = goukei
>>    Next
>>End Sub
>
コメント日時: 2016年12月16日 02時18分05秒
投稿ID: 2658 受講生さんの投稿
小川先生
お世話になっております。
単純ですが、シートにある勘定科目毎に伝票を集計し、合計を別シートのP/Lに書き出すマクロです。
1万行以上と金額が億単位だったので、マクロを動かしたら、ものすごくPCのスピードが落ちたので、
何10分まったら終わるのかとおもい途中でやめました。こういう場合はSUMIF関数の方がよいのでしょうか。
ちなみにPCのスペックは問題ありません。宜しくお願いします。
 Option Explicit
Sub hoge()
    Dim gyo As Long
    Dim goukei As Currency
    Dim kubun As Long
    For kubun = 12 To 226
        goukei = 0
        For gyo = 2 To 11419
            If Worksheets("4月 (2)").Range("C" & kubun).Value = Worksheets("Sheet1 (2)").Range("K" & gyo).Value Then
                goukei = goukei + Worksheets("Sheet1 (2)").Range("AE" & gyo).Value
            End If
                Worksheets("4月 (2)").Range("E" & kubun).Value = goukei
        Next
    Next
    
End Sub
投稿日時: 2016年11月06日 21時02分44秒
コメントID: 4110 ゲストさんからのお返事
受講生 さん:

こんばんは。

これは計算量が多いですね。。なんとかしたくなるのも分かります (^_^;
とはいえ、基礎編レベルの知識ではこれが限界です。

受講生さんも受講済の発展編1で、 WorksheetFunction というオブジェクトを扱っています。
名前のとおり、エクセルのワークシート関数を呼び出してVBAで利用できるというものです。
使いこなせるようになると、同様の計算をするエクセルワークシート関数をご存知でしたら、自分で計算アルゴリズムを編み出さないでも1行で計算をしてくれて便利です。
古典的かつ代表的なワークシート関数でしたらほぼほぼVBAから利用可能です。

以下に、Sum関数、Count関数、CountIf関数を活用する場合のサンプルを示します。試してみてください。

Sub wsfsample()
    Range("N2").Value = WorksheetFunction.Sum(Range("M2:M51"))
    Range("N3").Value = WorksheetFunction.Count(Range("M2:M51"))
    Range("N4").Value = WorksheetFunction.CountIf(Range("F2:F51"), "=渋谷区")
End Sub

上に示したサンプルコードからも分かるとおり、引数でセルを指定する際は、セル番地でなく、セルをオブジェクトとして指定する必要があります。
あと、エクセルのバージョンによっては、 WorksheetFunction の前に Application. をつけなくてはならないかも。
そこだけ注意。

それから、エクセルで開いているファイルのどれかに計算量の多いワークシート関数が大量に含まれている場合も処理が遅くなる傾向があります。
セルの編集がある都度、すべてのワークシート関数が再計算をするからです。
VLookUp関数とかIsError関数とか、そういうたぐいのがぐちゃぐちゃと入れ子になっているセルが大量にあるとかの場合ですね。

その場合、マクロでの処理開始の前に、ワークシート関数の再計算機能を停止させ、処理後に自動で再計算するように再設定します。
以下の要領。

Sub calcsample()
    Application.Calculation = xlCalculationManual
    Range("N2").Value = WorksheetFunction.Sum(Range("M2:M51"))
    Range("N3").Value = WorksheetFunction.Count(Range("M2:M51"))
    Range("N4").Value = WorksheetFunction.CountIf(Range("F2:F51"), "=渋谷区")
    Application.Calculation = xlCalculationAutomatic '[*]
End Sub

[*]について補足すると、エクセルで設定画面から再計算を自分で止めている人も(滅多にないですが)いるかもしれないので、以下のほうがより親切。

Sub calcvsample()
    Dim c As Long
    c = Application.Calculation '[+]
    Application.Calculation = xlCalculationManual
    Range("N2").Value = WorksheetFunction.Sum(Range("M2:M51"))
    Range("N3").Value = WorksheetFunction.Count(Range("M2:M51"))
    Range("N4").Value = WorksheetFunction.CountIf(Range("F2:F51"), "=渋谷区")
    Application.Calculation = c '[*]
End Sub

なぜ変数を Long 型にしたのか?とか [+] でなにをしているのか?とかいったことについては、基礎編レベルを大きく超えるのでここでは説明割愛します。
受講生さんは発展編1受講済のようですので、まずは上記についてテキストにて再学習のうえ、さらにご質問あるようでしたら、発展編1講座のどこかでまたご質問いただければと。
コメント日時: 2016年11月07日 07時07分09秒
投稿ID: 2239 受講生さんの投稿
お世話になります。
先程の列のループの質問の続きです。
retuを変数にしてとりあえずL列M列 二つの条件を満たした合計がだせました。
2列くらいならいいですが 10列超えると下記では辛いです^^;
もっと簡素な構文もあるかと思いましたが
出来たところまでです。
値は思った通りの数が出ましたが 構文として どうなんでしょうか?
Sub syuukei3()
Dim goukei
Dim retu
Dim hida
Dim migi
For migi = 3 To 9
retu = "L"
goukei = 0
For hida = 3 To 13
If Range("E" & hida).Value = Range("K" & migi).Value And Range("H" & hida).Value = Range("L2").Value Then
goukei = goukei + Range("F" & hida).Value
End If
Range(retu & migi).Value = goukei
Next
Next

For MIGI = 3 To 9
retu = "M"
goukei = 0
For hida = 3 To 13
If Range("E" & hida).Value = Range("K" & migi).Value And Range("H" & hida).Value = Range("M2").Value Then
goukei = goukei + Range("F" & hida).Value
End If
Range(retu & migi).Value = goukei
Next
Next
End Sub
投稿日時: 2016年04月04日 11時26分52秒
コメントID: 3641 ゲストさんからのお返事
受講生 さん:

条件文の可読性を高めるためなら、発展編1で扱っている途中改行のノウハウを。
あと、発展編1レベルの方法で解決するのでしたら、モジュールレベル変数を使えばもっとキレイにいくかな。
発展編2で Function プロシージャを学べばさらに華麗に決まります。いずれにしても、まずは発展編1の復習を。




>お世話になります。
>先程の列のループの質問の続きです。
>retuを変数にしてとりあえずL列M列 二つの条件を満たした合計がだせました。
>2列くらいならいいですが 10列超えると下記では辛いです^^;
>もっと簡素な構文もあるかと思いましたが
>出来たところまでです。
>値は思った通りの数が出ましたが 構文として どうなんでしょうか?
>Sub syuukei3()
> Dim goukei
> Dim retu
> Dim hida
> Dim migi
> For migi = 3 To 9
> retu = "L"
> goukei = 0
> For hida = 3 To 13
> If Range("E" & hida).Value = Range("K" & migi).Value And Range("H" & hida).Value = Range("L2").Value Then
> goukei = goukei + Range("F" & hida).Value
> End If
> Range(retu & migi).Value = goukei
> Next
> Next
>
> For MIGI = 3 To 9
> retu = "M"
> goukei = 0
> For hida = 3 To 13
> If Range("E" & hida).Value = Range("K" & migi).Value And Range("H" & hida).Value = Range("M2").Value Then
> goukei = goukei + Range("F" & hida).Value
> End If
> Range(retu & migi).Value = goukei
> Next
> Next
>End Sub
>
コメント日時: 2016年04月04日 16時50分34秒
投稿ID: 2234 受講生さんの投稿
お世話になります。
現場では SUMIFS関数を使用する機会が多く 
動画のSUMIF関数をマクロで・・を参考にもう一つの条件をANDで追加してみました。
しかし、ANDで指定している”L2”ひとつの時は下記のマクロでOKですが
L2~CX2 まであると どうしていいのかわかりません。
列を行(hida) みたいに 変数にできないでしょうか。Coulmns指定??・・基礎マクロ範囲であれば教えてください。

表(hida)データ表
↓が集計表(migi)となり 品名と各列(F-1.F-2・・)二つの条件が合致するもののみ goukeiする。

K列  L列 M列 N列・・・CX列
1 (1行目空白)
2 品名 F-1 F-2 F-3.・・・
3 AA/1 500
4 AA/2 200
5 BB/1  0
6 CC/1 500

Sub syuukei()  ’”品名”AND”L2”の2つの条件を満たしている時だけ goukei する
Dim goukeI
Dim hida
Dim migi
For migi= 3 To 6 ’現場では 30行くらいある
goukei = 0
For hida = 3 To 13
If Range("E" & hida).Value = Range("K" & migi).Value And Range("H" & hida).Value = Range("L2").Value Then
goukei = goukei + Range("F" & hida).Value
End If
Range("L" & migi).Value = goukei
Next
Next
End Sub

SUMIFS関数式を埋め込むと以下になりますが
これもL~CXまで書くのは少しナンセンスかと・・

Sub keisan()
Dim gyo
For gyo = 3 To 6
'実際は50列位あるのでこの書き方は面倒
Range("L" & gyo).FormulaR1C1 = "=SUMIFS(C6,C5,RC11,C8,R2C)"
Range("M" & gyo).FormulaR1C1 = "=SUMIFS(C6,C5,RC11,C8,R2C)"
Range("N" & gyo).FormulaR1C1 = "=SUMIFS(C6,C5,RC11,C8,R2C)"
Range("O" & gyo).FormulaR1C1 = "=SUMIFS(C6,C5,RC11,C8,R2C)"
Range("P" & gyo).FormulaR1C1 = "=SUMIFS(C6,C5,RC11,C8,R2C)"
Range("Q" & gyo).FormulaR1C1 = "=SUMIFS(C6,C5,RC11,C8,R2C)"
Range("R" & gyo).FormulaR1C1 = "=SUMIFS(C6,C5,RC11,C8,R2C)"
Range("S" & gyo).FormulaR1C1 = "=SUMIFS(C6,C5,RC11,C8,R2C)"
Range("T" & gyo).FormulaR1C1 = "=SUMIFS(C6,C5,RC11,C8,R2C)"
Next

End Sub
投稿日時: 2016年04月03日 23時56分04秒
コメントID: 3638 ゲストさんからのお返事
受講生 さん:

>列を行(hida) みたいに 変数にできないでしょうか。Coulmns指定??・・基礎マクロ範囲であれば教えてください。

↑発展編1で扱っている Offset ですね。
コメント日時: 2016年04月04日 16時44分04秒
投稿ID: 2150 受講生さんの投稿
このパターンの練習不足を感じましたので、手持ちのサンプルデータで補習してみました。
顧客名が混在する日付順の販売データから特定顧客データを抜き出し、別シートにある請求書雛形に転記するという目標です。

Sub rensyhu032602()
         '販売データから指定顧客データを抜き出し請求書シートに転記する
    Dim gyo
    Dim kokyaku
    kokyaku = 12
    For gyo = 4 To 32
        If Worksheets("販売").Range("B" & gyo).Value = Worksheets("請求書雛形").Range("A6").Value Then
            Worksheets("請求書雛形").Range("A" & kokyaku).Value = Worksheets("販売").Range("A" & gyo).Value '日付
            Worksheets("請求書雛形").Range("B" & kokyaku).Value = Worksheets("販売").Range("C" & gyo).Value '商品
            Worksheets("請求書雛形").Range("C" & kokyaku).Value = Worksheets("販売").Range("D" & gyo).Value '単価
            Worksheets("請求書雛形").Range("D" & kokyaku).Value = Worksheets("販売").Range("E" & gyo).Value '数量
            Worksheets("請求書雛形").Range("E" & kokyaku).Value = Worksheets("販売").Range("F" & gyo).Value '金額
            kokyaku = kokyaku + 1   
        End If
    Next
End Sub
変数=変数+1は、 こんな使い方でokでしょうか。
販売データから顧客ごとの販売合計にもチェレンジ。
自前のマクロ請求書データと検証して、合計額が一致したときは嬉しくなりました!
数週間前、参考書のサンプルのとおりに独学で作ろうとしたときは、半分以上記録マクロでしたから、
今回一から自分で書けたことにびっくりしました。

実は、1顧客分だけ数字が合わなかったんです。
全部でなく1顧客というのはどうもおかしい。何度も検証を繰り返した結果判明したこと。
同じシートでいろいろな顧客の請求書をテストし、データをクリアせずに実行していたので
行数の多い顧客データが1行、次の顧客データを処理する時上書きされず、残っていたのです。
ワークシート関数ですと必ず範囲指定があるので、こういうミスは起こりませんが、
マクロの場合はきちんと指示しないかぎり、忠実な小人ちゃんは前のデータを消してくれませんから
カウント変数の初期化に限らず、何かの処理を繰り返す際のリセットを忘れてはならないと
学びました。
たくさん失敗から学ばなくてはなりません・・・・(笑)
by gooska
投稿日時: 2016年03月26日 22時31分21秒
コメントID: 3534 ゲストさんからのお返事
受講生 さん:

すんばらしいですw
もう、言葉が見つかりません。何もかもすばらしいです☆


>このパターンの練習不足を感じましたので、手持ちのサンプルデータで補習してみました。
>顧客名が混在する日付順の販売データから特定顧客データを抜き出し、別シートにある請求書雛形に転記するという目標です。

Sub rensyhu032602()
         '販売データから指定顧客データを抜き出し請求書シートに転記する
    Dim gyo
    Dim kokyaku
    kokyaku = 12
    For gyo = 4 To 32
        If Worksheets("販売").Range("B" & gyo).Value = Worksheets("請求書雛形").Range("A6").Value Then
            Worksheets("請求書雛形").Range("A" & kokyaku).Value = Worksheets("販売").Range("A" & gyo).Value '日付
            Worksheets("請求書雛形").Range("B" & kokyaku).Value = Worksheets("販売").Range("C" & gyo).Value '商品
            Worksheets("請求書雛形").Range("C" & kokyaku).Value = Worksheets("販売").Range("D" & gyo).Value '単価
            Worksheets("請求書雛形").Range("D" & kokyaku).Value = Worksheets("販売").Range("E" & gyo).Value '数量
            Worksheets("請求書雛形").Range("E" & kokyaku).Value = Worksheets("販売").Range("F" & gyo).Value '金額
            kokyaku = kokyaku + 1   
        End If
    Next
End Sub
>変数=変数+1は、 こんな使い方でokでしょうか。
>販売データから顧客ごとの販売合計にもチェレンジ。
>自前のマクロ請求書データと検証して、合計額が一致したときは嬉しくなりました!
>数週間前、参考書のサンプルのとおりに独学で作ろうとしたときは、半分以上記録マクロでしたから、
>今回一から自分で書けたことにびっくりしました。
>
>実は、1顧客分だけ数字が合わなかったんです。
>全部でなく1顧客というのはどうもおかしい。何度も検証を繰り返した結果判明したこと。
>同じシートでいろいろな顧客の請求書をテストし、データをクリアせずに実行していたので
>行数の多い顧客データが1行、次の顧客データを処理する時上書きされず、残っていたのです。
>ワークシート関数ですと必ず範囲指定があるので、こういうミスは起こりませんが、
>マクロの場合はきちんと指示しないかぎり、忠実な小人ちゃんは前のデータを消してくれませんから
>カウント変数の初期化に限らず、何かの処理を繰り返す際のリセットを忘れてはならないと
>学びました。
>たくさん失敗から学ばなくてはなりません・・・・(笑)
>by gooska
コメント日時: 2016年03月26日 22時48分50秒
投稿ID: 2146 受講生さんの投稿
動画をみて、同時にD列総計を求める方法を学びましたので、
自分でもやってみたのですが・・・結果がどうしても200になってしまうので原因を探していたら
sokei=sokei+Range("D"&hidari).value
とするべきところを、
sokei=gokei+Range("D"&hidari).value
としていました(笑)
gokei は1項目の集計が終わったらリセットされるから、
これだと最終項目お見舞い袋の集計結果100に、もう一度gokeiを足しただけですね。
まだまだでした(笑)
by gooska
投稿日時: 2016年03月26日 05時09分46秒
コメントID: 3531 ゲストさんからのお返事
受講生 さん:

そういう問題を自力で見つけて解決できればもう心配いらないです。
素質あると思いますよ。
コメント日時: 2016年03月26日 22時41分49秒
投稿ID: 2145 受講生さんの投稿
しそ巻き無料のカウントマクロを使えばできるという説明で
いったん動画を止めて、問題に取り組みましたが、・・・
最初思うようにできませんでした。
変数の値が加算されず、常に最新値のみが表示されてしまったり(笑)

しそ巻き無料の動画を見直し、もう一度理解してから再挑戦すると、
カウントを加算に変更するだけなので、今度はうまくいきました。
ただしC,D,E列それぞれの単体マクロしか書けませんが(笑)

ポイントは3つですね。
1変数=変数+指定セルの値 という式の理解
2計算が終わった変数をワークシートに吐き出す式をどこに入れるか
3カウンタの初期化をどこにいれるか

自分はまだまだですが、やはりF8を押して1行ずつマクロを動かし、
変数の値がどのように変わっていくかと、NEXTやEND IFの後、
どの行に戻るのかをきちんと確認していく作業が大事だと感じました。

マウスオンで、変数の値が確認できるのは素晴らしいです!
最近キーボードだけでそれができたらいいのになと思います、
ようやくキーボード操作でVBEウィンドウとワークシートの切り替えが
できるようになったので。
by gooska
投稿日時: 2016年03月26日 03時38分00秒
コメントID: 3530 ゲストさんからのお返事
受講生 さん:

まーしかし、やっていることホント同じですよ。
数を数えるときは「+1」している。合計を求めるときは、「+値」している、そんだけです。

>自分はまだまだですが、やはりF8を押して1行ずつマクロを動かし、
>変数の値がどのように変わっていくかと、NEXTやEND IFの後、
>どの行に戻るのかをきちんと確認していく作業が大事だと感じました。
>
>マウスオンで、変数の値が確認できるのは素晴らしいです!

こういう地味な機能の活用がスラスラできるかどうかがポイント!ですね。
身体が作業を覚えこんでしまえば、頭は作業のことではなくてアルゴリズムだけに集中できるので。

ひきつづきお楽しみを☆
コメント日時: 2016年03月26日 22時40分52秒
投稿ID: 1869 受講生さんの投稿
変数soukeiの位置をIf文の中から移動し、一部修正しました。


Sub kekkoniwaigoukei()
    Dim soukei
    Dim goukei
    Dim migi
    Dim hida
    For hida = 4 To 9
        goukei = 0
        For migi = 4 To 10
            If Range("I" & migi).Value = Range("B" & hida).Value Then
                goukei = goukei + Range("J" & migi).Value
            End If
        Next
        soukei = soukei + goukei    'ここを修正
        Range("D" & hida).Value = goukei
        Range("E" & hida).Value = Range("C" & hida).Value + goukei
    Next
    Range("D10").Value = soukei
    Range("E10").Value = Range("C10").Value + soukei
End Sub
投稿日時: 2016年01月06日 07時11分36秒
コメントID: 3225 ゲストさんからのお返事
受講生 さん:

見本と比較し、両者のメリットデメリットについて論じてください。


>変数soukeiの位置をIf文の中から移動し、一部修正しました。
>
>

>Sub kekkoniwaigoukei()
>    Dim soukei
>    Dim goukei
>    Dim migi
>    Dim hida
>    For hida = 4 To 9
>        goukei = 0
>        For migi = 4 To 10
>            If Range("I" & migi).Value = Range("B" & hida).Value Then
>                goukei = goukei + Range("J" & migi).Value
>            End If
>        Next
>        soukei = soukei + goukei    'ここを修正
>        Range("D" & hida).Value = goukei
>        Range("E" & hida).Value = Range("C" & hida).Value + goukei
>    Next
>    Range("D10").Value = soukei
>    Range("E10").Value = Range("C10").Value + soukei
>End Sub
>
>
コメント日時: 2016年01月06日 19時03分16秒
コメントID: 3228 受講生さんからのお返事
小川先生:
別に議論するつもりは全くないのですが、コメントを頂いたので回答します。
何かおかしな点がありましたら、ご指摘ください。

メリット
・変数soukeiへの代入が左の表の項目数に対して1回で済む。
 (右の表のデータ量の影響を受けないので、無駄が省ける)
・変数soukeiへの代入時に、セルの値を代入するより、変数を代入した方がセルへのアクセスが減り、
 内部では効率的(速度的にも有利)に思えた。
デメリット
・「変数=変数+セル」という考え方からすると、見本の方が理解しやすいかもしれない。

>受講生 さん:
>
>見本と比較し、両者のメリットデメリットについて論じてください。
>
>
>>変数soukeiの位置をIf文の中から移動し、一部修正しました。
>>
>>

>>Sub kekkoniwaigoukei()
>>    Dim soukei
>>    Dim goukei
>>    Dim migi
>>    Dim hida
>>    For hida = 4 To 9
>>        goukei = 0
>>        For migi = 4 To 10
>>            If Range("I" & migi).Value = Range("B" & hida).Value Then
>>                goukei = goukei + Range("J" & migi).Value
>>            End If
>>        Next
>>        soukei = soukei + goukei    'ここを修正
>>        Range("D" & hida).Value = goukei
>>        Range("E" & hida).Value = Range("C" & hida).Value + goukei
>>    Next
>>    Range("D10").Value = soukei
>>    Range("E10").Value = Range("C10").Value + soukei
>>End Sub
>>
>>
>
コメント日時: 2016年01月07日 08時19分15秒
コメントID: 3230 ゲストさんからのお返事
受講生 さん:

ご指摘のメリット、すばらしいと思いますよ。
デメリットはデメリットといえるようなものではないです。

よって、いただいたサンプルのほうが僕が動画で示したものよりよいですね ヾ(´ー`)ノ


>小川先生:
>別に議論するつもりは全くないのですが、コメントを頂いたので回答します。
>何かおかしな点がありましたら、ご指摘ください。
>
>メリット
>・変数soukeiへの代入が左の表の項目数に対して1回で済む。
> (右の表のデータ量の影響を受けないので、無駄が省ける)
>・変数soukeiへの代入時に、セルの値を代入するより、変数を代入した方がセルへのアクセスが減り、
> 内部では効率的(速度的にも有利)に思えた。
>デメリット
>・「変数=変数+セル」という考え方からすると、見本の方が理解しやすいかもしれない。
>
>>受講生 さん:
>>
>>見本と比較し、両者のメリットデメリットについて論じてください。
>>
>>
>>>変数soukeiの位置をIf文の中から移動し、一部修正しました。
>>>
>>>

>>>Sub kekkoniwaigoukei()
>>>    Dim soukei
>>>    Dim goukei
>>>    Dim migi
>>>    Dim hida
>>>    For hida = 4 To 9
>>>        goukei = 0
>>>        For migi = 4 To 10
>>>            If Range("I" & migi).Value = Range("B" & hida).Value Then
>>>                goukei = goukei + Range("J" & migi).Value
>>>            End If
>>>        Next
>>>        soukei = soukei + goukei    'ここを修正
>>>        Range("D" & hida).Value = goukei
>>>        Range("E" & hida).Value = Range("C" & hida).Value + goukei
>>>    Next
>>>    Range("D10").Value = soukei
>>>    Range("E10").Value = Range("C10").Value + soukei
>>>End Sub
>>>
>>>
>>
>
コメント日時: 2016年01月08日 23時22分53秒
投稿ID: 1740 受講生さんの投稿
基礎編フォローアップ動画第11回 の解説おかしくないですか?I4からI10の詳細に書かれている内容を、B4~B9に分類して、その分類ごとの合計を計算するんでしょう?
”結婚祝い”しか反映されていないですよね?まぁ、やり方はわかるので、イイっちゃいいのですが・・・
投稿日時: 2015年11月01日 00時13分00秒
投稿ID: 1735 金親 幸加さんの投稿
VBA基礎フォローアップの第11回目の講座をオンラインで受けさせて頂きました。
早速質問なのですが、小川先生のコーディングのやり方を真似して実際に打ってみましたが、
動画の結果より全体的に数が5000少なくなってしまいます。この場合どうすればいいでしょうか?
投稿日時: 2015年10月26日 19時34分22秒
投稿ID: 1191 井上 聡さんの投稿
動画再収録解説の問題点
1、sub Kazoeru プログラム上から9行目”結婚祝い”のままです。
2、一度リセットするプログラムがありません。
画像は依然より良くなっています。頑張ってください。
投稿日時: 2015年03月16日 14時59分24秒
投稿ID: 1014 井上 聡さんの投稿
Sub siharairisuto()
Dim migi
Dim goukei
Dim hidari
Dim konrui
Dim sourui
For hidari = 4 To 9
goukei = 0
For migi = 4 To 10
If Range("I" & migi).Value = Range("B" & hidari).Value Then
goukei = goukei + Range("J" & migi).Value
'End If 'これが正解(A)
'Next 'これが正解(B)
Range("D" & hidari).Value = goukei
Range("E" & hidari).Value = Range("C" & hidari).Value + goukei
End If '条件が合致していると、End Ifは関係なくfor Next内を進む。(C)
'条件が合致していないとEnd If外に進む。
konrui = konrui + goukei
sourui = sourui + Range("E" & hidari).Value
Next(D)
Next
Range("D10").Value = konrui
Range("E10").Value = sourui
End Sub
すいません、コピーを張り付けることができるなら今後そうします。質問の意味が自分でも不明です。
End ifが(C)の位置だとてっきりIfにもどるものと思って言いました。
If then end ifは条件が一致すると常にそのまま進むものであるのでしょうか。
If thenだけでend if を使用しない構文(多分?)の場合とはどのように使い分けるのでしょうか。
投稿日時: 2015年01月12日 03時59分36秒
コメントID: 2158 ゲストさんからのお返事
井上 聡 さん:

まだおかしいね。

Next(D)

のところが構文エラーです。

ということで、

> If then end ifは条件が一致すると常にそのまま進むものであるのでしょうか。
> If thenだけでend if を使用しない構文(多分?)の場合とはどのように使い分けるのでしょうか。

上記の質問にお答えできるところまで到達できません。

こんなやりとりしてても時間のムダですので、次回は動作確認済みのマクロ送ってください。
念のために書きますが、「動くかどうか」だけじゃなくて、質問したい点についても自分の想定どおりに動作するマクロかどうか確認してから送ってください。

動作確認するときは、特に知りたいところは [F8] でステップイン実行しながらしっかり確認しつつ。
[F5], [F8], [F9] の使い分けについて解説した動画を見直し、僕がこの動画で動作テストをしているときにそれらをどう活用しているかを確認して。

質問の内容からも感じますが、全体にもう少し自分で検証する習慣をつけたほうがよいかと思います。

もしもそれを面倒に感じるようでしたら、タイピングスキルとショートカットキー活用の練習不足です。
タイピングスキルについては以下の動画で。
https://online.pc5bai.com/movie/index/24

ショートカットキー操作については、以下。
https://forum.pc5bai.com/lesson/page/121
https://forum.pc5bai.com/lesson/page/122

突き放しているように読めるかもしれませんが、自分で問題解決できる力をつけるのがいちばんです。
それがあればそもそもしないで済みそうな質問にも感じます。


ひきつづきよろしくお願いいたします。




Sub siharairisuto()
    Dim migi
    Dim goukei
    Dim hidari
    Dim konrui
    Dim sourui
    For hidari = 4 To 9
    goukei = 0
        For migi = 4 To 10
            If Range("I" & migi).Value = Range("B" & hidari).Value Then
                goukei = goukei + Range("J" & migi).Value
            'End If 'これが正解(A)
        'Next 'これが正解(B)
                Range("D" & hidari).Value = goukei
                Range("E" & hidari).Value = Range("C" & hidari).Value + goukei
            End If '条件が合致していると、End Ifは関係なくfor Next内を進む。(C)
                 '条件が合致していないとEnd If外に進む。
                konrui = konrui + goukei
                sourui = sourui + Range("E" & hidari).Value
        Next(D)
    Next
                Range("D10").Value = konrui
                Range("E10").Value = sourui
End Sub

>すいません、コピーを張り付けることができるなら今後そうします。質問の意味が自分でも不明です。
>End ifが(C)の位置だとてっきりIfにもどるものと思って言いました。
>If then end ifは条件が一致すると常にそのまま進むものであるのでしょうか。
>If thenだけでend if を使用しない構文(多分?)の場合とはどのように使い分けるのでしょうか。
>
コメント日時: 2015年01月12日 07時19分30秒
投稿ID: 1009 井上 聡さんの投稿

動画11のend ifの位置について質問です。以下のプログラムは先生通りです。
(A)の位置が正解ですが、条件が一致した場合、(B)の位置の場合end ifに関係なく次の行に進みます。end if までで一区切りになって ifにもどりません。なぜでしょうか。?
sub countkobetu()
dim kobetu()
dim migi
dim hida
dim konrui
dim sourui
for hida =4 to 9
kobetu=0
for migi=4 to 10
if range("I" & migi).value=range("B"& hida).value then
kobetsu=kobetu+range("J"&migi).value
end if (A)
next
range("D" & hida).value=kobetsu
range("E"& hida).value=range("C"&hida).value+kobetu
(B)
konrui=kobetu+konrui
sourui=range("E"&hida).value+sourui
next
range("D10").value=konrui
range("E10").value=sourui
end sub

投稿日時: 2015年01月10日 22時20分53秒
コメントID: 2152 井上 聡さんからのお返事
再送Nextの位置も移動しています。動画11のend ifの位置について質問です。以下のプログラムは先生通りです。
(A)の位置が正解ですが、条件が一致した場合、(B)の位置の場合end ifに関係なく次の行に進みます。end if までで一区切りになって ifにもどりません。なぜでしょうか。?for next内なら進むことができるのでしょうか。
但し、nextの位置も(C)から(D)に移動する条件です。
sub countkobetu()
dim kobetu()
dim migi
dim hida
dim konrui
dim sourui
for hida =4 to 9
kobetu=0
for migi=4 to 10
if range("I" & migi).value=range("B"& hida).value then
kobetsu=kobetu+range("J"&migi).value
end if (A)
next(C)
range("D" & hida).value=kobetsu
range("E"& hida).value=range("C"&hida).value+kobetu
(B)
konrui=kobetu+konrui
sourui=range("E"&hida).value+sourui
(D)
next
range("D10").value=konrui
range("E10").value=sourui
end sub
コメント日時: 2015年01月10日 22時40分33秒
コメントID: 2153 ゲストさんからのお返事
井上さん、

dim kobetu()

というのがあるのですが、ここでエラーがでます。
(A)-(D)の注釈もその前にコメント記号がないため、それらがある行全体が構文エラーになります。

動作確認済のプログラムを再度お送りください。
よろしくお願いいたします。
コメント日時: 2015年01月11日 09時15分18秒
投稿ID: 443 明石 照伸さんの投稿
お世話になります。

問題をここまでやらせていただいて
ようやくFor~Nextがわかってきた
ようです。

まず最初考えた回答が、以下のような
ベタベタのコードでした。

---回答(1)ここから---------------------------------------------
Sub shiharai()

Dim kekkon
kekkon = 0

Dim shussan
shussan = 0

Dim seijin
seijin = 0

Dim reizen
reizen = 0

Dim mimai
mimai = 0

Dim jimu
jimu = 0

Dim gyo
For gyo = 4 To 9
If Range("i" & gyo).Value = "結婚祝い" Then
kekkon = kekkon + Range("j" & gyo).Value

ElseIf Range("i" & gyo).Value = "出産祝い" Then
shussan = shussan + Range("j" & gyo).Value

ElseIf Range("i" & gyo).Value = "成人祝い" Then
seijin = seijin + Range("j" & gyo).Value

ElseIf Range("i" & gyo).Value = "御霊前" Then
reizen = reizen + Range("j" & gyo).Value

ElseIf Range("i" & gyo).Value = "お見舞い" Then
mimai = mimai + Range("j" & gyo).Value

Else
jimu = jimu + Range("j" & gyo).Value

End If
Next



Range("d4").Value = kekkon
Range("e4").Value = kekkon + Range("c4").Value

Range("d5").Value = shussan
Range("e5").Value = shussan + Range("c5").Value

Range("d6").Value = seijin
Range("e6").Value = seijin + Range("c6").Value

Range("d7").Value = reizen
Range("e7").Value = reizen + Range("c7").Value

Range("d8").Value = mimai
Range("e8").Value = mimai + Range("c8").Value

Range("d9").Value = jimu
Range("e9").Value = jimu + Range("c9").Value


Dim kongetu
kongetsu = 0

Dim ruikei
ruikei = 0

For gyo = 4 To 9
kongetsu = kongetsu + Range("d" & gyo).Value
ruikei = ruikei + Range("e" & gyo).Value
Next

Range("d10").Value = kongetsu
Range("e10").Value = ruikei


End Sub
---回答(1)ここまで------------------------------------------------

この回答を書いた後で、もっとすっきりまとめられることに
気づき書いたのが以下になります。

---回答(2)ここから------------------------------------------------

Sub shiwake2()
Dim keihi
Dim gyo_hidari
Dim gyo_migi

For gyo_hidari = 4 To 9
keihi = 0

For gyo_migi = 4 To 9

If Range("i" & gyo_migi).Value = Range("b" & gyo_hidari).Value Then
keihi = keihi + Range("j" & gyo_migi).Value

ElseIf Range("h" & gyo_migi).Value = Range("b" & gyo_hidari).Value Then
keihi = keihi + Range("j" & gyo_migi).Value

End If

Next

Range("d" & gyo_hidari).Value = keihi
Range("e" & gyo_hidari).Value = Range("c" & gyo_hidari).Value + Range("d" & gyo_hidari).Value
Range("d10").Value = Range("d10").Value + Range("d" & gyo_hidari).Value
Range("e10").Value = Range("e10").Value + Range("e" & gyo_hidari).Value
Next



End Sub
---回答(2)ここまで------------------------------------------------

この考え方になじんでからは、実務で新旧の表を比較して差分を抽出したり、
といった、今までVLOOKUP関数で行っていたような複数の表にまたがる処理が
マクロでできるようになりました。

一回限りの書き捨てのマクロでデータ整合性チェックをしたり
ができるので相当作業時間を短縮できていると思います。なれると関数より楽に、
かつ、もっと複雑な処理ができますね。もっとマクロを学ぶことで仕事自体が
劇的に変わっていく予感がしています。(^^
投稿日時: 2014年08月06日 08時11分39秒
コメントID: 1253 小川慶一さんからのお返事
> なれると関数より楽に、かつ、もっと複雑な処理ができますね。
> もっとマクロを学ぶことで仕事自体が劇的に変わっていく予感がしています。(^^

そうですよー。じゃなきゃ、こんな手間書けてマクロ教えません。
それだけインパクトのデカい技術です。ぜひ、ますますしっかりとモノにしてください!!
コメント日時: 2014年08月07日 08時20分53秒