表を解析して1行のリストを作る、1行のリストを解析して表にする(その2)

この講座は有料講座です。
講座の購入後ご覧になれます。

ログインアカウントの新規作成

解説

演習問題テーマ:表を解析して1行のリストを作る、1行のリストを解析して表にする(その2)

理解してから書くよりも、まず書いてみる。その結果をみてから考えて書きなおすという繰り返しが大事です。

並べ替え済みのリストから重複しないリストをつくる仕組みと、For Next構文の始まった直後と終わった後に特別な仕掛けをつくる仕組みをよくみて何度もマクロを書いてみてください。

この教材についての過去の質問・感想

11449 : 矢口幸平さんのコメント (2019-06-13 21:26:31)

ベーシック終わりました!次はアドバンスを頑張りたい!


11448 : 矢口幸平さんのコメント (2019-06-13 21:26:18)

ベーシック終わりました!次はアドバンスを頑張りたい!


11262 : 小川慶一の回答 (2019-03-14 14:05:55)

jinoseさん:

くり返しましょう!
すべてスラスラ解けるところまで!

> [感想]
> これは、、、難しい!初期化、変数を増やすタイミング、for next構文の最初と最後の処理、条件分岐等。。。まだ身についていないところの総復習が必要と感じた。
>
> まずはフォローアップ ベーシックを1周できました。わかりやすい講義をありがとうございました!!!


11258 : jinoseさんのコメント (2019-03-14 12:54:42)

[感想]
これは、、、難しい!初期化、変数を増やすタイミング、for next構文の最初と最後の処理、条件分岐等。。。まだ身についていないところの総復習が必要と感じた。

まずはフォローアップ ベーシックを1周できました。わかりやすい講義をありがとうございました!!!


10566 : 小川慶一の回答 (2018-09-13 08:17:52)

受講生 さん:

まずは、自力で考えて解けたということはすばらしいです☆

このやり方もパターンなので、マスターされると応用範囲広いです。

ご提示のコードだと、たとえば100万行のデータだとしたら、条件分岐が200万回生じますね。
そのロスをどう解釈するか?です。


> -------------------------

Sub XXX()
    Dim kuiki
    Dim gyosha
    gyosha = 1
    Dim gyo
    For gyo = 2 To 27
        If Range("A" & gyo - 1).Value <> Range("A" & gyo).Value Then
            gyosha = gyosha + 1
            Range("E" & gyosha).Value = Range("A" & gyo).Value
            Range("F" & gyosha).Value = Range("B" & gyo).Value
            kuiki = Range("C" & gyo).Value & "地区"
        Else
            kuiki = kuiki & "," & Range("C" & gyo).Value & "地区"
        End If
        If Range("A" & gyo).Value <> Range("A" & gyo + 1).Value Then
        Range("G" & gyosha).Value = kuiki
        End If
    Next
End Sub

> -------------------------
> 今回の2つ目の問題を↑のように解いてから動画を見ました。
> このマクロであれば最初と最後の処理を必要としないので良いような気もするのですが、なんとなく格好が悪い気もします。
> 最初と最後の処理をするマクロを自分で導くのは正直自分には難しそうと尻込みしてしまいますが、自分で導くためのプロセスを順を追って動画で紹介して下さっているので、とても勉強になりました。何回もこの動画を見直して練習したいと思います。


10564 : 受講生さんのコメント (2018-09-11 12:19:04)

-----------------------
Sub XXX()
Dim kuiki
Dim gyosha
gyosha = 1
Dim gyo
For gyo = 2 To 27
If Range("A" & gyo - 1).Value <> Range("A" & gyo).Value Then
gyosha = gyosha + 1
Range("E" & gyosha).Value = Range("A" & gyo).Value
Range("F" & gyosha).Value = Range("B" & gyo).Value
kuiki = Range("C" & gyo).Value & "地区"
Else
kuiki = kuiki & "," & Range("C" & gyo).Value & "地区"
End If
If Range("A" & gyo).Value <> Range("A" & gyo + 1).Value Then
Range("G" & gyosha).Value = kuiki
End If
Next
End Sub
-------------------------
今回の2つ目の問題を↑のように解いてから動画を見ました。
このマクロであれば最初と最後の処理を必要としないので良いような気もするのですが、なんとなく格好が悪い気もします。
最初と最後の処理をするマクロを自分で導くのは正直自分には難しそうと尻込みしてしまいますが、自分で導くためのプロセスを順を追って動画で紹介して下さっているので、とても勉強になりました。何回もこの動画を見直して練習したいと思います。


10257 : 小川慶一の回答 (2018-07-13 10:57:27)

morimotoさん:

改めまして、前半終了おめでとうございます v(^^*

時間 <<< じっくり楽しむ

という方針で取り組まれていた、ということですね。
よいようにお楽しみください。僕としては、楽しみつつ、スキルアップも実感しつつ、としていただいているのであれば、それでよいかと思います。


> やっとやっと基礎フォローアップも前半が終わりました。
> 予定より時間がかかっちゃいました。
> 別にさぼってたわけでないのですが、歴史の勉強のようにざっと一通りしてみてというのがイヤで時間がかかってもじっくりしたいので予定より大幅に遅れましたが、後半もこだわってこだわってやっていきたいです。
> 変なvbaスクールにいってた時期があり、いまさらですがほんとお金を含め無駄でした。
> はやくこのサイトを探しだせればよかったんですが。。。
> ボヤいても仕方ないのでまたつづきがんばります。


10256 : 小川慶一の回答 (2018-07-13 10:54:43)

morimotoさん:

まずはおつかれさまです v(^^*

>あまり共通なコードを変数に置き換えが苦手

いずれ、そこの考え方&手作業のパターンをしっかりできるようになっていないと太刀打ちできないより高度な問題がでてきます。
そこは「苦手だ」て言ってられませんので、しっかりマスターしてください。

ここのでの演習すべて、「共通なコードを変数に置き換える」ということを意識して再復習されることを強く推奨します。
すでにコメントいただいているとおり、ここまでの問題だけでも、実務でも相当活用できる演習をご提供しています。
ですし、より高度な課題を解けるようになるためのプロセスとしても、結果としてそのほうが近道になるかと思います。


> 何とか自分の今までの知識と浅い経験(あまり共通なコードを変数に置き換えが苦手)でたどり着きました。(tiku=,,,と置き換えするのがつい「なぜ置き換えたんだろう???そのまま長がったらしくコードかけば行けるはずだ??!!と深みに落ちてしまって)。ともあれ自分が次回似たようなケースでコードを作り上げれたらいいなってところです。何度も紙に書きました。f8で動きも見ました。道中過程ほんとにイヤになるものですが、解消したらまずはホッとするもんですね。


10253 : morimotoさんのコメント (2018-07-13 01:53:12)

やっとやっと基礎フォローアップも前半が終わりました。予定より
時間がかかっちゃいました。別にさぼってたわけでないのですが、歴史の勉強のようにざっと一通りしてみてというのがイヤで時間がかかってもじっくりしたいので予定より大幅に遅れましたが、後半もこだわってこだわってやっていきたいです。変なvbaスクールにいってた時期があり、いまさらですがほんとお金を含め無駄でした。はやくこのサイトを探しだせればよかったんですが。。。
ボヤいても仕方ないのでまたつづきがんばります。


10252 : morimotoさんのコメント (2018-07-13 01:42:40)

何とか自分の今までの知識と浅い経験(あまり共通なコードを変数に置き換えが苦手)でたどり着きました。(tiku=,,,と置き換えするのがつい「なぜ置き換えたんだろう???そのまま長がったらしくコードかけば行けるはずだ??!!と深みに落ちてしまって)。ともあれ自分が次回似たようなケースでコードを作り上げれたらいいなってところです。何度も紙に書きました。f8で動きも見ました。道中過程ほんとにイヤになるものですが、解消したらまずはホッとするもんですね。


10250 : 小川慶一の回答 (2018-07-13 00:00:13)

morimotoさん:

>でも、、、使っている知識は高級なものでなく基礎編の範囲ですからね。
>ここは地道なランニングと思いがんばります。

ですね。
ここで腕力しっかりつければ、あとはどれも似たようなものに見えるかと思いますよ。

発展編1受講生限定グループに最近参加された方のコメントを紹介します。

>はじめまして、本日グループに参加いたしました????。
>5月に基礎編を購入し、先月末に発展編1を申し込み現在学習中です。
>
>基礎編を「う~んうん????」言いながら学んだ割りに、発展編はスムーズな感じがしていて、どんなことができるようになるか楽しみです。
>どうぞよろしくお願いいたします。

↑morimotoさんも、そんなプロセスの真っ最中かもしれません。

このページのコメントNo.566, No.567をご確認ください。

↓以下は、くり返し構文の典型的なパターンの集合ですね。
・ループ冒頭での明示的な変数の初期化
・最初だけ特殊な作業(今回は、作業をスキップ)
・ループを抜けた直後に特殊な作業

↓こうとも言えるかも。

For
  If
    If ループの最初じゃなかったら
        直前までのデータ追記処理の後始末
        データ追記先変更などなど
    End If
  End If
  データ追記処理
Next
直前までのデータ追記処理の後始末


上記の視点を意識しつつ、改めてマクロを自分で書いてみたり、他のみなさんの投稿やそれらへのフィードバックも読み返したりしてみてください☆


> 2日考えましたが解決に至りませんでした。できそうでできないという感じでした。tiku="" やif migi>2 と例外が生じたとき例外処理をするという考えは大切にしたいと思います。実務ではおそらく教科書的なきれいに収まるコードになることはむしろ少ないかもしれませんので、おかしなときは例外処理と頭の隅に置きながた、他のコメント等みさせてもらい、もう一回コード書こうと思います。でも、、、使っている知識は高級なものでなく基礎編の範囲ですからね。ここは地道なランニングと思いがんばります。


10245 : morimotoさんのコメント (2018-07-11 00:09:18)

2日考えましたが解決に至りませんでした。できそうでできないという感じでした。tiku="" やif migi>2 と例外が生じたとき例外処理をするという考えは大切にしたいと思います。実務ではおそらく教科書的なきれいに収まるコードになることはむしろ少ないかもしれませんので、おかしなときは例外処理と頭の隅に置きながた、他のコメント等みさせてもらい、もう一回コード書こうと思います。でも、、、使っている知識は高級なものでなく基礎編の範囲ですからね。ここは地道なランニングと思いがんばります。


10055 : 小川慶一の回答 (2018-05-28 01:32:43)

マメコトさん:

> 重複した業者名が続くと『区域』を毎回書き直すのがカッコワルイと感じてはいますが
> 最初と最後の特殊な制御は不要になるので、メンテナンスはしやすく、これはこれでアリなのではと思っています。


デメリットをふまえたうえで、メリットもあるということですね。
とても建設的な意見かと思います。

上記デメリットが強調される局面もありえます。
[a] カッコワルイ
[b] 工数が多い(変数に値を格納する、変数の値を読み出す、より、セルに値を入れる、セルの値を読み出すことのほうが高コストです)

なので、両方のやり方をできるようになれればよりよいです。
というか、「最初と最後の特殊な制御」は、パターンなので、ここでマスターしておかないと、先々行き詰まります。ので、できればしっかりマスターしておきたいところ。

なお...。 [a] はメリットにもなりえます。
マクロ初心者に「ホラホラ!」と言いつつマクロが動作している様子を見せるときには、どんどんセルの値が更新されるほうがキャッチー なので(^^;


10054 : マメコトさんのコメント (2018-05-28 01:11:24)

今回の問題はこのように書いてから動画を見ました。

Sub mondai2()
    Dim hida
    Dim migi
    Dim Kuiki
    migi = 2
    
    For hida = 2 To 27
        If Range("A" & hida).Value <> Range("A" & hida - 1) Then
            Range("E" & migi).Value = Range("A" & hida).Value
            Range("F" & migi).Value = Range("B" & hida).Value
            Kuiki = Range("C" & hida).Value & "地区"
            Range("G" & migi).Value = Kuiki
            migi = migi + 1
        Else
            Kuiki = Kuiki & "," & Range("C" & hida) & "地区"
            Range("G" & migi - 1).Value = Kuiki
        End If
    Next

End Sub

重複した業者名が続くと『区域』を毎回書き直すのがカッコワルイと感じてはいますが、最初と最後の特殊な制御は不要になるので、メンテナンスはしやすく、これはこれでアリなのではと思っています。
一方、処理が重くなったり遅くなったりするというデメリットもあるかも知れないのですが・・・どうでしょうか。


9116 : 小川慶一の回答 (2017-11-10 07:36:11)

受講生 さん:

おはようございます。

まず...。

>動かしながらやってると、...結果的に答えにはたどりついています。


こういうことをやりきれる力は、とても重要です。実務ではそういうことのくり返しです。

そのうえで...。

> 例えば、...migi=2とするのが通常かなと思います。もう一度動画を見ると、自分のはなんだか不格好だなと思います。


ということでしたら、もう一度何も見ないでやってみましょう (^^

慣れてくると、一発で最大効率のマクロを書けるようになります。

基礎編フォローアップは、重要パターンをほぼほぼ網羅しています。
何周もくり返していただいて構いません。

以下に、「パソコン仕事5倍塾」塾生からの投稿を転載します。
マクロでの効率化により、会社に数十億円規模の売上アップに貢献した方のものです。参考にしてください。

>ポータルサイトではご無沙汰です。
>東京クラスの○○です。
>久々のサイトを覗いてみたらすごい投稿になっていますね!
>
>近況というか日々の報告ですが、workは毎日続けてます。
>会社の帰りは、電車に座れた時は基礎編フォローの問題をひたすら解いてます。
>皆さんより早く基礎編を終了した人間の感想としては、基礎編を勉強し始めて半年で感じたのは「身に付いたな~」でした。
>そして、ここ数ヶ月で感じるのは「染み付いたな~」という感覚です。
>
>△△さんも似たようなことを書いていたかな?(実際書いてなかったらごめんなさい)
>問題を見る⇒完成形が想像できる⇒コードが想像できる⇒あまり迷いが無くコードがかけるようになる
>
>そうすると、実際の業務で「あ~これ あの問題に似てるな~」と応用が利くようになりました。
>
>基礎編は本当に「重要」というより「もんげー役に立つ」ものです。
>
>私も会社でちょくちょくマクロを書いて、いわゆる「業務改善」というものをやっています。
>ちょくちょくそのマクロを報告していきたいと思います。


9115 : 受講生さんのコメント (2017-11-10 00:08:55)

一通りフォローアップを学んでみたあと、また動画1の課題から解説を見ないで取り組んでいます。

今回は「担当区域」を先に考えてやりました。以前に動画を見たときに、確か、migi=2 とか使ってたな、と思って進めていくと、途中で、自分の書き方だとmigi=1でないとうまくいかないと思ったり、あとから「業者名」「フリガナ」を入れたので、『"e" & migi』には1を足さないとダメだな、など、動かしながらやってると、特に意図もなく、1を足してみたり引いてみたりして、結果的に答えにはたどりついています。

例えば、E~G列は、2行目から始まるので、migi=2とするのが通常かなと思います。しかし、意図せず1を足したり引いたりして結果に結び付けばよいのでしょうか?自分が書いたあと、もう一度動画を見ると、自分のはなんだか不格好だなと思います。

初心者のうちは、このような形でもよいのでしょうか?

Sub ren()
Dim hida
Dim tiku
Dim migi
migi = 1
For hida = 2 To 27

If Range("a" & hida).Value <> Range("a" & hida - 1).Value Then
    Range("e" & migi + 1) = Range("a" & hida).Value
    Range("f" & migi + 1) = Range("b" & hida).Value
     tiku = Range("c" & hida) & "地区"
     migi = migi + 1
Else
   tiku = tiku & "," & Range("c" & hida).Value & "地区"
End If
Range("g" & migi).Value = tiku

Next

End Sub


9055 : 小川慶一の回答 (2017-10-15 12:10:58)

受講生 さん:

「ループの前や後に特定の処理を入れる」というのは、よくあるパターンです。

> これまでの複合技!
> ・for next 構文で気をつけることは、データのはじめと終わりに
>  自分の求める処理がされているか。
> ・失敗しながら何度もやってみる。
>  成功者ほどたくさん失敗している!byドラッカー


9044 : 受講生さんのコメント (2017-10-11 22:02:55)

これまでの複合技!
・for next 構文で気をつけることは、データのはじめと終わりに
 自分の求める処理がされているか。
・失敗しながら何度もやってみる。
 成功者ほどたくさん失敗している!byドラッカー


8506 : 小川慶一の回答 (2017-07-04 10:44:51)

受講生 さん:

ひきつづき、お楽しみください☆

> 小川先生
>
> 添削と返信ありがとうございました。
> (コメント:8489)
> インデントも気をつけたいと思います。


8505 : 受講生さんのコメント (2017-07-03 22:16:38)

小川先生

添削と返信ありがとうございました。
(コメント:8489)
インデントも気をつけたいと思います。


8490 : 小川慶一の回答 (2017-07-02 23:11:01)

受講生 さん:

当初、僕がこのページでしたコメント8430に戻ります。

「他の受講生の方のコメントもいろいろ参考になると思いますよ」ということで、過去の受講生の挑戦の記録を示しました。

マクロ上達するには、あとは、実務でガンガン書くことですね。
1月もしっかりやればかなり変わります。応援しています☆


8489 : 小川慶一の回答 (2017-07-02 23:05:22)

受講生 さん:

おもしろいですね。

見本では、発展編1で学ぶ「変数の初期化」をあえてしているというニュアンスです。
ご提案いただいたやり方だと、変数の値を""にする処理の回数が1回少ないです。

どっちが良いか微妙なところです。
それぞれニュアンス、メリットが異なります。

next の手前の以下は、もう一段右にインデントしてください。
tiku = tiku & "," & Range("C" & hida).Value & "地区"


8481 : 受講生さんのコメント (2017-06-30 15:21:04)

お世話になっております。
この度の返信をいただいた内容を、真摯に受け止めて、
努力していくことといたします。

まだまだ、掛け算の九九の域には到底達していないので、
努力が全く足りていないことを痛感いたしました。

フォーカスする点を見つけることが、できました。
どうも的確なコメント、アドバイス有難う御座いました。


8480 : 小川慶一の回答 (2017-06-30 14:40:36)

伊藤博文さん:

> 変数の宣言のところが、出来ない状態や、全く思いつかない状況のところが、あります。何に、フォーカスすればいいのか、前途多難です。
> 結局、理解できた程度だということは、わかるのですが・・・・

8430でコメントしたとおりです。

「何に、フォーカスすればいいのか」ということですので、改めて、書きますね。
フォーカスすべきことは、「手に馴染んだか」どうかだけです。
そこだけを意識して、「問題を見た瞬間、勝手に手が動いて、ほとんど頭を働かさなくても勝手に解ける」というくらいまで練習してください。

容易に暗唱できる「かけ算九九」くらいまで。

> 変数の宣言のところが、出来ない状態や、


「問題を見た瞬間、勝手に手が動いて、ほとんど頭を働かさなくても勝手に解ける」という状態にないですね。
「容易に暗唱できるかけ算九九」にはまだ遠いですね。
ですから、手を動かして、勝手に解けるようになるまで練習してください。

> 全く思いつかない状況のところが、あります。


もっと前の問題を「問題を見た瞬間、勝手に手が動いて、ほとんど頭を働かさなくても勝手に解ける」状態にしていることが大前提です。
そのうえで、解説なんども見て、何度も手を動かして実際に書いてください。

誰かに教えるつもりで自分に説明してみるというのも良いですよ。
人に説明しようしてみると、何が分からないのか、何が曖昧になったままなのか、自分でよく分かります。


8479 : 伊藤博文さんのコメント (2017-06-30 12:06:21)

お世話になります。
先生が回答くださった内容ですが、以前に舞い戻って、復習をしています。【ある問題を繰り返しても手に馴染まないならば、何かを変える必要があるでしょう】ということなのですが、立ち戻って、前の問題をやってみると、
変数の宣言のところが、出来ない状態や、全く思いつかない状況のところが、あります。何に、フォーカスすればいいのか、前途多難です。

【くり返さなくても、手に馴染んだならばOKです。
一方、手に馴染まないならば、何度繰り返しても意味はありません。手に馴染んだかどうかだけを判断基準にしてください。ある問題を繰り返しても手に馴染まないならば、何かを変える必要があるでしょう。例えば、繰り返し方を変える。あるいは、もっと基本的な問題からやりなおす(前の問題での学びを「理解できた」程度の学習でとどめていないか?の確認をする)、等々。】

結局、理解できた程度だということは、わかるのですが・・・・


8470 : 受講生さんのコメント (2017-06-30 06:06:33)

初期化(tiku = "")のタイミングですが少し早い部分に書いてみました。
問題ありませんでしょうか。
発展編で出てくるDebug.Printでtikuの中身の様子も確認済です。

 
Sub Createlist01()
    Dim hida
    Dim migi
    Dim tiku
    migi = 2
    For hida = 2 To 27
        If Range("A" & hida - 1).Value <> Range("A" & hida).Value Then
            Range("E" & migi).Value = Range("A" & hida).Value
            Range("F" & migi).Value = Range("B" & hida).Value
            If migi > 2 Then
                Range("G" & migi - 1).Value = Mid(tiku, 2)
                
                Debug.Print tiku
                tiku = "" '[※]
                Debug.Print tiku
            
            End If
            migi = migi + 1
        End If
    tiku = tiku & "," & Range("C" & hida).Value & "地区"
    Next
    Range("G" & migi - 1).Value = Mid(tiku, 2)
End Sub


8459 : 小川慶一の回答 (2017-06-28 10:26:03)

受講生 さん:

> お世話になります。
> 先生の回答で下記のことが、凄くわかりやすいのですが、

ありがとうございます。

> 先の問題が「理解できない」状況は、たいてい、前の問題での学びを「理解できた」程度の学習でとどめていることによって起こります。
> 数学でも、期末試験で間違えた問題があったとして、黒板で先生が解説したのを見て「理解した」と思っただけの人は、模試や入試で同じ問題が出た時に必ず間違えます。そのときに解けるようになっている人は、手に馴染むまで復習した人です。
>
> 現在、何度も繰り返し復習をしていますが、初期化のsumifの編でやったことも繰り返しやっています。
> この学習方法は的を得ているのでしょか?

僕が上で書いたことを箇条書きにしますね:
・「理解できた」程度の学習でとどめていては不十分です。
・手に馴染むまで復習することが大切です

受講生さんがやっていると言われていることを箇条書きにしますね:
・この問題を何度も繰り返し復習をしている
・初期化のsumifの編でやったことも繰り返し復習している

上記2つを比較すると、僕と受講生さんとは、違うことを言っているということに気づけますね。
上記を比較すると分かることは、以下のとおりです。

僕は「手に馴染むかどうか」を判断基準にしている。一方、受講生さんは、「繰り返しているかどうか」は基準になるか?と質問している。

よって、「この学習方法は的を得ているのでしょうか?」という問いへの答えは「いいえ」です。

くり返さなくても、手に馴染んだならばOKです。
一方、手に馴染まないならば、何度繰り返しても意味はありません。手に馴染んだかどうかだけを判断基準にしてください。ある問題を繰り返しても手に馴染まないならば、何かを変える必要があるでしょう。例えば、繰り返し方を変える。あるいは、もっと基本的な問題からやりなおす(前の問題での学びを「理解できた」程度の学習でとどめていないか?の確認をする)、等々。


8458 : 受講生さんのコメント (2017-06-28 10:01:40)

お世話になります。
【基礎編フォローアップ動画18の問題2で戸惑っています。
> 問題1は理解できたのですが、IF文の中のtiku=””の意味が、まったく理解できずに、マクロを書くことができません。
> 何度も間違っても、うまくいきません。】と質問をしました。
先生の回答で下記のことが、凄くわかりやすいのですが、
先の問題が「理解できない」状況は、たいてい、前の問題での学びを「理解できた」程度の学習でとどめていることによって起こります。
数学でも、期末試験で間違えた問題があったとして、黒板で先生が解説したのを見て「理解した」と思っただけの人は、模試や入試で同じ問題が出た時に必ず間違えます。そのときに解けるようになっている人は、手に馴染むまで復習した人です。

現在、何度も繰り返し復習をしていますが、初期化のsumifの編でやったことも繰り返しやっています。
この学習方法は的を得ているのでしょか?


8430 : 小川慶一の回答 (2017-06-26 10:01:31)

受講生 さん:

> 現在、基礎編フォローアップ動画18の問題2で戸惑っています。
> 問題1は理解できたのですが、IF文の中のtiku=””の意味が、まったく理解できずに、マクロを書くことができません。
> 何度も間違っても、うまくいきません。
>
4:28ごろ、上手くいかない例を示していますね。
ここまでは、どういう問題が起きているのか、理解できていますか?

以下のようになってしまっていますね。

セルG2: G2に書かれるべき値
セルG3: G2, G3に書かれるべき値 (G2に記入した分が余計)
セルG4: G2, G3, G4に書かれるべき値 (G3に記入した分が余計)
セルG5: G2, G3, G4, G5に書かれるべき値 (G4に記入した分が余計)
セルG6: G2, G3, G4, G5, G6に書かれるべき値 (G5に記入した分が余計)
...

この「書かれるべき値」を入れているのが変数tikuです。

であれば、どうすべきか?
各行での情報を記入する処理を終えたら、変数tikuの値を""にすればよいわけです。
そのタイミングで、

tiku=""

していますね。
こういう風に変数の値を自分で宣言直後の状態に戻することを、「初期化」と言います。

では、「各行での情報を記入する処理を終えたタイミング」とはいつか?というと、それは、以下の[1], [2]の処理をした直後、となります。
[1] 左の表で、前後の値が異なっていたことを検知した
[2] 最後のデータ入力を終えた

まずは、この説明でどうでしょう。

変数の初期化は、以下の問題の回答でもやっています。

以下は、スラスラ解けますか?
https://online.pc5bai.com/movie/index/27/150


あと、

> 問題1は理解できたのですが、

というのが、多少不安です。
「理解できた」だけの蓄積だといずれひっかかります。「問題を見た瞬間、勝手に手が動いて、ほとんど頭を働かさなくても勝手に解ける」というくらいまで練習してください。

先の問題が「理解できない」状況は、たいてい、前の問題での学びを「理解できた」程度の学習でとどめていることによって起こります。
数学でも、期末試験で間違えた問題があったとして、黒板で先生が解説したのを見て「理解した」と思っただけの人は、模試や入試で同じ問題が出た時に必ず間違えます。そのときに解けるようになっている人は、手に馴染むまで復習した人です。

見当違いかもしれませんが、あとあと他の方がこのやりとりを見たときに参考になるようにという意味もこめて、あえて以上書いてみました。

他の受講生の方のコメントもいろいろ参考になると思いますよ。
このページ内なら、たとえば以下:

>3858 : 佐藤 あゆむさんのコメント (2015-02-17 07:40:17)
>9回目から復習をしてきて18回目まで戻ってきました。
>それでも書くのに悩んだ12回と18回は、また復習しますヽ(*´v`*)ノ

>3827 : 小川慶一の回答 (2015-02-13 06:38:57)
>匿名 さん:
>
>For Next構文の入りにそれが初回処理かどうか判断して条件分岐するというのは常道です。
>これもパターンなので、第17回で紹介したやり方と対にして覚えます。
>
>>もう一度、最後の方の難しかったところを観てから、次の「発展編1」に進もうと思います。
>
>素晴らしいです。絶対正解です。
>
>知識に触れることをむやみに追うより、体得するプロセスを重視したほうが近道です。

>3784 : 佐藤 あゆむさんのコメント (2015-02-09 08:00:07)
>今回は2日間粘って[2]を完成させました。

>2635 : 浜口 智之さんのコメント (2014-10-04 19:13:14)
>今までの回で、書いていく中で、色々試して失敗しましたが、その失敗の方法が今回使えたりと、たくさん失敗する意義を感じる最終回でした。
>今の頭の状態で、もう一度、第一回目から、新たな発見と知識の定着のため、マクロを書いてみようと思います。

>566 : 池本利恵さんのコメント (2013-04-30 00:00:00)
>こんにちは~☆
>
>完走できました~♪
>嬉しいです~(*^^*)
>
>問題1は簡単でしたが、問題2は昨日からたくさん書いて書いて失敗しまくりました(^^;
>動画をみてからは、先生とおなじように1個ずつ動かして、自力でできるまで何回も書きまくりましたo(^^)o
>先生と同じように書いているうちにわかってきました。
>というか、書かないとわかんないし、書いたほうがはやいですね。
>
>自力でいろいろやってみて、
>問題1の2行部分のマクロ(の変数と仕掛け)を活用したほうがいいということにはなったけれど、
>
>問題1の仕掛けで上と行が違ったらどうする、という部分と、上の行と違わなくてもデータをひろって並列したいという部分をどうやって両立させるのかがわからなかったです。わからないなりに書いていると、そこは考えなくても両立してて、上の行と違わないときにデータをひろってきているらしい。でも、いらないデータもひろってくるらしい、1行とぶらしい、というところまでいきました。
>
>なので動画をみて、同じマクロをかいたら、考え方がすんなり頭に入りました(^^) 
>
>・ひろってきたいデータの重複をさけるために、
> データをいれたあとにchiku = ""
>・1行ずれるから -1
>・でも開始したい一番上の行が2ならそれが-1になってしまって、開始したい行の上まで影響するから if文で2>
>・最後たりないからfor next構文のあとにもう一回加える
>
>この4つ、かなりおもしろかったです。
>そうふうにいろいろ試すんだな~と、パターンというより考え方を学びました。

>563 : 星野智幸さんのコメント (2013-03-20 00:00:00)
>2月に受講した星野です。
>フォローアップセミナー完走できました。ホッ。
>見ないでやれるようになったら、素敵なので、二周目はじめました。
>一周目は、自分で1時間くらい考えてから解答を見て、実際やってみるというパターンでやりました。ただ、独力でできた問題は少なかったことは悔しかったです。

>559 : 山根信行さんのコメント (2013-02-08 00:00:00)
>最終回でこんな難題とは。
>2問目は解けませんでした。
>解説動画見るとおしいとこまでいってたのにそのあとさらにぐちゃぐちゃにしてしまいました。
>変数=""を入れてれば解けてたのに悔しいです。
>
>悔しいのでこのパターンを10回書いて寝ます。

>557 : 佐藤 尚子さんのコメント (2012-12-30 00:00:00)
>やっと2週目ができました!
>この№.18も何をやっているかわかって(^_^;
>ホッとしました。
>「理解してから書こうとするより、何度も書いて失敗しながら進んでいく方が早い」との話があり、その通りだと思いつつも、解らないとそこで書くのをやめてしまいそうになるので、もしまた解らないと思ったら、前に戻ってやり直しつつ進めていきたいと思いました。

>550 : 加藤美智子さんのコメント (2012-11-07 00:00:00)
>問題[2]の「担当区域」を正解になるよう色々にやって見る!(動画を見た後でしたが…(~_~;))
>やって見ると色々発見がありました。
>何度もやってみたいと思いました。

>1218 : 受講生さんのコメント (2012-09-09 17:10:00)
>基礎編の総まとめのような感じでした。
>ものづくりと同じ考え方なんだと納得した次第です。小川先生の書きながら考える姿勢を動画で見ることができたのが最高に参考になりました。


8415 : 受講生さんのコメント (2017-06-23 18:30:20)

お世話になります。
現在、エクセルマクロ・VBA基礎編フォローアップ を学習していますが、6月末でキャンペーン終了ということなので、不安すぎて、まだ基礎編フォローアップに苦戦しながらも、先走り発展編1を購入しましたが、いつになれば取り掛かれるのかわかりません。
でも、少しずつでは、ありますが毎日学習を進めていっています。
現在、基礎編フォローアップ動画18の問題2で戸惑っています。
問題1は理解できたのですが、IF文の中のtiku=””の意味が、まったく理解できずに、マクロを書くことができません。
何度も間違っても、うまくいきません。


6693 : ゲストさんのコメント (2016-06-01 20:56:33)


先刻 「音声が聞き取れないと」送信しましたが 私の不注意が原因でした。大変お騒がせして申し訳ありませんでした。


6690 : 小川慶一の回答 (2016-06-01 17:14:50)

ゲスト さん:

いま確認していますが、特に他のものと音声の大きさ違うようには感じられませんね。
お使いのPCやスマートフォンの設定、あるいは、再生画面で設定できる音量の問題かもしれません。いかがでしょう?

>動画その18の音声が小さくて聞き取れなのですが、大きくならないのでしょうか?


6689 : ゲストさんのコメント (2016-06-01 17:11:08)

動画その18の音声が小さくて聞き取れなのですが、大きくならないのでしょうか?


6287 : 小川慶一の回答 (2016-04-04 06:50:55)

受講生 さん:

お返事遅くなりました。そして、今改めてコードを読んでみるとどうでしょうか。


6205 : 受講生さんのコメント (2016-03-29 23:37:29)

動画をみて感じたのは
まさに今回私が作ったプロセスそのものだったので、こうやって試行錯誤していけば
いいんだな、ということです。
私もまず何かが目標セルに入るところから始まり、少しずつ修正していきました。
午前中あげたものも、どうしてこれならうまくいくのかよくわからないけど
結果をみるとうまくいった!みたいな感じでした。
(つまり、いろいろ分かっておりません(笑))
要求度の高い問題なので、繰り返し挑戦して、覚えていきたいと思いました。

午前中UPしたコードには無駄な行がありましたので、修正を加え、私の完成形は
以下のようになりました。
先生のと少し違うのですが、結果はうまくいっているのでいいのかな(*´∀`*)

A列が重複データでないときは、左のリストは1行下に記述され、
重複データのときは、左のリストは変数kuikiに追加格納されていく
という方法です。

Sub rensyu032904()
                    '第18問の[2]解答 K列含む
    Dim gyo         '元データ行位置
    Dim gyosya      '作成リストの行位置
    gyosya = 1
    Dim kuiki          '区域を格納する変数
    For gyo = 2 To 27
       
        If Range("A" & gyo - 1).Value = Range("A" & gyo).Value Then
            kuiki = kuiki & "," & Range("C" & gyo).Value & "地区"
            Range("G" & gyosya).Value = kuiki
           
        ElseIf Range("A" & gyo - 1).Value <> Range("A" & gyo).Value Then
            gyosya = gyosya + 1
            Range("E" & gyosya).Value = Range("A" & gyo).Value
            Range("F" & gyosya).Value = Range("B" & gyo).Value
            kuiki = Range("C" & gyo).Value & "地区"
            Range("G" & gyosya).Value = kuiki
        End If
    Next  
End Sub

by gooska


6199 : 小川慶一の回答 (2016-03-29 16:52:07)

受講生 さん:

また動画見て思うことあれば、どうぞ。
お待ちしております。

>前回のカンマ区切り形式の応用がカギですね。
試行錯誤して、なんとか目標値を得られるコードになりました。
一部上書き処理しているなど、直しどころ満載だと思いますが
K列はちゃんと出たようなので、最初のステップクリアかな(;´・ω・)
今はこれ以上直す時間がないため、夜に動画で模範解答を拝見しようと思います。

Sub rensyu032903()
                    '第18問の[2]解答 K列含む
    Dim gyo         '元データ行位置
    Dim gyosya      '作成リストの行位置
    gyosya = 2
    Dim kuiki
    For gyo = 2 To 27
        If gyo = 2 Then
            Range("E" & gyosya).Value = Range("A2").Value
            Range("F" & gyosya).Value = Range("B2").Value
            Range("G" & gyosya).Value = Range("C2").Value & "地区"    
            
        ElseIf Range("A" & gyo - 1).Value = Range("A" & gyo).Value Then
              Range("E" & gyosya).Value = Range("A" & gyo).Value
            Range("F" & gyosya).Value = Range("B" & gyo).Value
            kuiki = kuiki & "," & Range("C" & gyo).Value & "地区"
            Range("G" & gyosya).Value = kuiki
                  
        ElseIf Range("A" & gyo - 1).Value <> Range("A" & gyo).Value Then
            gyosya = gyosya + 1
            Range("E" & gyosya).Value = Range("A" & gyo).Value
            Range("F" & gyosya).Value = Range("B" & gyo).Value
              kuiki = Range("C" & gyo).Value & "地区"
            Range("G" & gyosya).Value = kuiki
        End If
    Next 
End Sub

by gooska


6187 : 受講生さんのコメント (2016-03-29 10:27:06)

前回のカンマ区切り形式の応用がカギですね。
試行錯誤して、なんとか目標値を得られるコードになりました。
一部上書き処理しているなど、直しどころ満載だと思いますが
K列はちゃんと出たようなので、最初のステップクリアかな(;´・ω・)
今はこれ以上直す時間がないため、夜に動画で模範解答を拝見しようと思います。

Sub rensyu032903()                    '第18問の[2]解答 K列含む    Dim gyo         '元データ行位置    Dim gyosya      '作成リストの行位置    gyosya = 2    Dim kuiki    For gyo = 2 To 27        If gyo = 2 Then            Range("E" & gyosya).Value = Range("A2").Value            Range("F" & gyosya).Value = Range("B2").Value            Range("G" & gyosya).Value = Range("C2").Value & "地区"                        ElseIf Range("A" & gyo - 1).Value = Range("A" & gyo).Value Then              Range("E" & gyosya).Value = Range("A" & gyo).Value            Range("F" & gyosya).Value = Range("B" & gyo).Value            kuiki = kuiki & "," & Range("C" & gyo).Value & "地区"            Range("G" & gyosya).Value = kuiki                          ElseIf Range("A" & gyo - 1).Value <> Range("A" & gyo).Value Then            gyosya = gyosya + 1            Range("E" & gyosya).Value = Range("A" & gyo).Value            Range("F" & gyosya).Value = Range("B" & gyo).Value              kuiki = Range("C" & gyo).Value & "地区"            Range("G" & gyosya).Value = kuiki        End If    Next End Sub

by gooska


6177 : 受講生さんのコメント (2016-03-29 00:47:17)

まだ動画をみておりません。とりあえずE,F列のみのマクロです。
K列は模索中です。考える訓練に、もう少し自分で考えてみます。
明日の大事な要件のため、今日はこれまでにします。
またよろしくお願い致します。

Sub rensyu0328018()                    '第18問の[2]解答,I,J列のみ    Dim gyo         '元データ行位置    Dim gyosya      '作成リストの行位置    gyosya = 2    For gyo = 2 To 27        If gyo = 2 Then            Range("E" & gyosya).Value = Range("A2").Value            Range("F" & gyosya).Value = Range("B2").Value            gyosya = gyosya + 1                    ElseIf Range("A" & gyo - 1).Value <> Range("A" & gyo).Value Then            Range("E" & gyosya).Value = Range("A" & gyo).Value            Range("F" & gyosya).Value = Range("B" & gyo).Value            gyosya = gyosya + 1        End If    NextEnd Sub

by gooska


6070 : 小川慶一の回答 (2016-03-24 12:14:12)

多和田 真也 さん:

ku = ku & "," & Range("C" & hida).Value & "地区"

の行にブレークポイントを入れて、ステップインモードでこのマクロを実行してみましょう。
G列がよく見える状態の画面レイアウトにして。

それで、僕の書いたコードもG列がよく見える状態の画面レイアウトにして動作させてみると、何か気付くかも。



>小川先生の書いたプログラムをちら見しながら、なんとか、正しい結果が出るプログラムになりました。
>しかし、なぜ出来ているのか、説明もできないです。イマイチ理解度が低いような気がします。
>[2]に関しては、こんな感じです。若干小川先生の書いたものと違う(if文が一つだけ)のですが、これでいいのでしょうか?
>
>Sub test2()
>
> Dim migi
> Dim hida
> Dim ku
> migi = 1
> For hida = 2 To 27
> If Range("A" & hida - 1).Value < Range("A" & hida).Value Then
> migi = migi + 1
> Range("E" & migi) = Range("A" & hida).Value
> Range("F" & migi) = Range("B" & hida).Value
> ku = ""
> End If
> ku = ku & "," & Range("C" & hida).Value & "地区"
> Range("G" & migi).Value = Mid(ku, 2)
> Next
>End Sub
>


6009 : 多和田 真也さんのコメント (2016-03-21 08:23:08)

小川先生の書いたプログラムをちら見しながら、なんとか、正しい結果が出るプログラムになりました。
しかし、なぜ出来ているのか、説明もできないです。イマイチ理解度が低いような気がします。
[2]に関しては、こんな感じです。若干小川先生の書いたものと違う(if文が一つだけ)のですが、これでいいのでしょうか?

Sub test2()

Dim migi
Dim hida
Dim ku
migi = 1
For hida = 2 To 27
If Range("A" & hida - 1).Value < Range("A" & hida).Value Then
migi = migi + 1
Range("E" & migi) = Range("A" & hida).Value
Range("F" & migi) = Range("B" & hida).Value
ku = ""
End If
ku = ku & "," & Range("C" & hida).Value & "地区"
Range("G" & migi).Value = Mid(ku, 2)
Next
End Sub


5714 : 小川慶一の回答 (2016-02-06 15:51:51)

受講生 さん:

>「業者名・フリガナ」と「担当区域」がずれないようにするために、3つ全てを「初回でなかったら」と処理してしまい、ループを抜けた後に3つを書き出すのもありかなと思いました。
>コードを書き、動作確認もできました。

よいんじゃないですかね (^^

>タイトルにある「1行のリストを解析して表にする」もやってみました。こちらの方が、断然楽でした(「地区」を消す際に、Replace関数を使用しました)。

こちらもよろしいかと (^


5709 : 受講生さんのコメント (2016-02-06 11:14:20)

「業者名・フリガナ」と「担当区域」がずれないようにするために、3つ全てを「初回でなかったら」と処理してしまい、ループを抜けた後に3つを書き出すのもありかなと思いました。
コードを書き、動作確認もできました。
タイトルにある「1行のリストを解析して表にする」もやってみました。こちらの方が、断然楽でした(「地区」を消す際に、Replace関数を使用しました)。


5568 : 小川慶一の回答 (2016-01-11 12:58:18)

受講生 さん:

あとは、誰にとってよいプログラムか?という問いによって最適なコードかどうかの答えが変わるレベルかと思います。

参考「[質問] 同じ機能を実現するマクロの書き方が複数ある場合、どの書き方が良いか分からなくて迷います。」
http://www.exvba.com/blog/?p=4378


>小川先生
>
>>まずは動けばOKです。
>>ですが、これだと、書き出しを実行する回数が見本より多いですね。
>とのことですので、修正してみました。
>
>

>Sub seikei()
>    Dim hida
>    Dim migi
>    Dim tiku
>    migi = 2
>    For hida = 2 To 27
>        If Range("A" & hida).Value <> Range("A" & hida - 1).Value Then
>            Range("E" & migi).Value = Range("A" & hida).Value
>            Range("F" & migi).Value = Range("B" & hida).Value
>            migi = migi + 1
>            tiku = ""
>        End If
>        tiku = tiku & "," & Range("C" & hida).Value & "地区"
>        If Range("A" & hida).Value <> Range("A" & hida + 1).Value Then  'If文を追加しました
>            Range("G" & migi - 1).Value = Mid(tiku, 2)
>        End If
>    Next
>End Sub
>


5553 : 受講生さんのコメント (2016-01-10 21:14:59)

小川先生

>まずは動けばOKです。
>ですが、これだと、書き出しを実行する回数が見本より多いですね。
とのことですので、修正してみました。

Sub seikei()
    Dim hida
    Dim migi
    Dim tiku
    migi = 2
    For hida = 2 To 27
        If Range("A" & hida).Value <> Range("A" & hida - 1).Value Then
            Range("E" & migi).Value = Range("A" & hida).Value
            Range("F" & migi).Value = Range("B" & hida).Value
            migi = migi + 1
            tiku = ""
        End If
        tiku = tiku & "," & Range("C" & hida).Value & "地区"
        If Range("A" & hida).Value <> Range("A" & hida + 1).Value Then  'If文を追加しました
            Range("G" & migi - 1).Value = Mid(tiku, 2)
        End If
    Next
End Sub


>鈴木優子 さん:
>
>まずは動けばOKです。
>ですが、これだと、書き出しを実行する回数が見本より多いですね。
>
>>G列に書きだすのは、hidaを調べていくときだなと思って、if文の中にいれませんでした。
>>書き出すタイミングが動画と違ったので、For Next構文の始まった直後と終わった後に特別な仕掛けをつくる仕組みがなくてもテストしてたら思い通りに動いていました。
>>今回はうまくいったけれど、初回処理と最後の処理を気をつけるというのは よく出てきそうなので、しっかり覚えようと思います!
>>
>>
>>Sub seikei()
>>    Dim hida
>>    Dim migi
>>    Dim tiku
>>    migi = 2
>>    For hida = 2 To 27
>>        If Range("A" & hida).Value <> Range("A" & hida - 1).Value Then
>>            Range("E" & migi).Value = Range("A" & hida).Value
>>            Range("F" & migi).Value = Range("B" & hida).Value
>>            migi = migi + 1
>>            tiku = ""
>>        End If
>>        tiku = tiku & "," & Range("C" & hida).Value & "地区"
>>        Range("G" & migi - 1).Value = Mid(tiku, 2)
>>    Next
>>End Sub
>>

>


5330 : 小川慶一の回答 (2015-11-26 14:11:04)

関口昭博 さん:

体調を崩しており、お返事遅くなってしまいました。申し訳ありません。

いただいたご質問の件。
基礎編レベルのスキルでもできないことはないですが、煩雑ですね。
発展編ならすっきり片付くかと。

でも、その前に、ピボットテーブル使えば一発では?という気も。
「元の表は、ピボットテーブルを適用できないようなぐちゃぐちゃなものだ」ということでしたら、そのぐちゃぐちゃなものをピボットテーブルを使える表に整形するマクロを作り、それを使って「四角い表」にしてから、手作業でピボットテーブルを作ります。
以下の無料講座もぜひ参考にしてください。
http://www.exvba.com/dpr.php


>小川先生
>お世話になっております。
>閲覧期間残り一月のところで、基礎編およびフォローアップ編を、閲覧、勉強しおえました。(使えるようになったかは別として)
>覚えたマクロで、自分の業務でも使い始めました。ただ、マクロを完成させるのに時間がかかって、今の時点では、これまでちまちまやっていた時間と
>さほど変わらない状況です。そのため、マクロを考えるのは、自宅でやっています。ただ完成したマクロを何度も実行してニヤニヤしています。
>そんな状況ですが、現在、壁にぶち当たっている問題があります。
>それは、野菜の品種名と出荷日のリストがあって、それを、縦に品種、横が出荷日の表に、その品種の出荷日ごとの出荷点数をうちだすというもの
>ですが、知恵が浮かびません。
>野菜は20種類ほどあって元のリストは重複しておりますし、合計300点あります。出荷日は20日間あります。
>重複しない野菜のリストは、教えていただいたマクロでできました。また、品種別の出荷点数も、ネットでみつけたマクロでとってくることができました。
>しかし、品種別、さらに出荷日別の点数を打ち出すマクロができません。
>以前、どなたかの質問で、その内容は発展編で学んでほしいという回答を見ましたので、今回の質問が基礎編を超えるようなら、仕方ありませんが
>基礎編レベルで解決できることでしたら、教えてください。
>よろしくお願いいたします。
>


5296 : 関口昭博さんのコメント (2015-11-18 05:24:20)

小川先生
お世話になっております。
閲覧期間残り一月のところで、基礎編およびフォローアップ編を、閲覧、勉強しおえました。(使えるようになったかは別として)
覚えたマクロで、自分の業務でも使い始めました。ただ、マクロを完成させるのに時間がかかって、今の時点では、これまでちまちまやっていた時間と
さほど変わらない状況です。そのため、マクロを考えるのは、自宅でやっています。ただ完成したマクロを何度も実行してニヤニヤしています。
そんな状況ですが、現在、壁にぶち当たっている問題があります。
それは、野菜の品種名と出荷日のリストがあって、それを、縦に品種、横が出荷日の表に、その品種の出荷日ごとの出荷点数をうちだすというもの
ですが、知恵が浮かびません。
野菜は20種類ほどあって元のリストは重複しておりますし、合計300点あります。出荷日は20日間あります。
重複しない野菜のリストは、教えていただいたマクロでできました。また、品種別の出荷点数も、ネットでみつけたマクロでとってくることができました。
しかし、品種別、さらに出荷日別の点数を打ち出すマクロができません。
以前、どなたかの質問で、その内容は発展編で学んでほしいという回答を見ましたので、今回の質問が基礎編を超えるようなら、仕方ありませんが
基礎編レベルで解決できることでしたら、教えてください。
よろしくお願いいたします。


5058 : 小川慶一の回答 (2015-09-17 10:52:57)

鈴木優子 さん:

まずは動けばOKです。
ですが、これだと、書き出しを実行する回数が見本より多いですね。

>G列に書きだすのは、hidaを調べていくときだなと思って、if文の中にいれませんでした。
>書き出すタイミングが動画と違ったので、For Next構文の始まった直後と終わった後に特別な仕掛けをつくる仕組みがなくてもテストしてたら思い通りに動いていました。
>今回はうまくいったけれど、初回処理と最後の処理を気をつけるというのは よく出てきそうなので、しっかり覚えようと思います!
>
>

>Sub seikei()
>    Dim hida
>    Dim migi
>    Dim tiku
>    migi = 2
>    For hida = 2 To 27
>        If Range("A" & hida).Value <> Range("A" & hida - 1).Value Then
>            Range("E" & migi).Value = Range("A" & hida).Value
>            Range("F" & migi).Value = Range("B" & hida).Value
>            migi = migi + 1
>            tiku = ""
>        End If
>        tiku = tiku & "," & Range("C" & hida).Value & "地区"
>        Range("G" & migi - 1).Value = Mid(tiku, 2)
>    Next
>End Sub
>


5041 : 鈴木優子さんのコメント (2015-09-11 23:03:41)

G列に書きだすのは、hidaを調べていくときだなと思って、if文の中にいれませんでした。
書き出すタイミングが動画と違ったので、For Next構文の始まった直後と終わった後に特別な仕掛けをつくる仕組みがなくてもテストしてたら思い通りに動いていました。
今回はうまくいったけれど、初回処理と最後の処理を気をつけるというのは よく出てきそうなので、しっかり覚えようと思います!

Sub seikei()
    Dim hida
    Dim migi
    Dim tiku
    migi = 2
    For hida = 2 To 27
        If Range("A" & hida).Value <> Range("A" & hida - 1).Value Then
            Range("E" & migi).Value = Range("A" & hida).Value
            Range("F" & migi).Value = Range("B" & hida).Value
            migi = migi + 1
            tiku = ""
        End If
        tiku = tiku & "," & Range("C" & hida).Value & "地区"
        Range("G" & migi - 1).Value = Mid(tiku, 2)
    Next
End Sub


4616 : 小川慶一の回答 (2015-06-29 12:07:33)

森 則彦 さん:

>基礎編についてはほぼ理解できたと思います。

よかったです☆
次は、「発展編1」へどうぞ。
http://www.exvba.com/hatten1.php

G列への書き出し。
以下もおもしろい書き方ですね。

基礎編のフォロー動画も、もう一度ひととおりやるとまた新しい発見があるかもしれません。
2巡目で新しい発見がありました!という方もけっこういらっしゃいます。

自分のスキルアップを実感するという意味でも楽しいので、ぜひやってみてください☆





>初めてコメントする森と申します。
>フォローアップセミナーのNO.018の最終問題_ 2は5時間ぐらいあれこれと悩みました。
>基礎編についてはほぼ理解できたと思います。
>次のステップの順序としては、どの講座を受けるのが理想でしょうか?
>
>G列に書き出すタイミングが上手く表現できず悩みました。
>以下が出来上がったプログラムソースです。
>
>
>
>code
>Sub list2()
> Dim memo, migi, gyo
> migi = 2
> For gyo = 2 To 27
> If Range("a" & gyo).Value <> Range("a" & gyo - 1).Value Then
> Range("e" & migi).Value = Range("a" & gyo).Value
> Range("f" & migi).Value = Range("b" & gyo).Value
> Range("g" & migi - 1).Value = memo & "地区"
> memo = Range("c" & gyo).Value
> migi = migi + 1
> Else
> memo = memo & "地区" & "、" & Range("c" & gyo).Value
> End If
> Next
> Range("g" & migi - 1).Value = memo & "地区"
>End Sub
>/code
>


4604 : 森 則彦さんのコメント (2015-06-29 01:03:51)

初めてコメントする森と申します。
フォローアップセミナーのNO.018の最終問題_ 2は5時間ぐらいあれこれと悩みました。
基礎編についてはほぼ理解できたと思います。
次のステップの順序としては、どの講座を受けるのが理想でしょうか?

G列に書き出すタイミングが上手く表現できず悩みました。
以下が出来上がったプログラムソースです。



code
Sub list2()
Dim memo, migi, gyo
migi = 2
For gyo = 2 To 27
If Range("a" & gyo).Value <> Range("a" & gyo - 1).Value Then
Range("e" & migi).Value = Range("a" & gyo).Value
Range("f" & migi).Value = Range("b" & gyo).Value
Range("g" & migi - 1).Value = memo & "地区"
memo = Range("c" & gyo).Value
migi = migi + 1
Else
memo = memo & "地区" & "、" & Range("c" & gyo).Value
End If
Next
Range("g" & migi - 1).Value = memo & "地区"
End Sub
/code


4440 : 小川慶一の回答 (2015-06-05 02:27:06)

門田 源一 さん:

お返事、遅くなりました。
お役に立てているようで、とてもうれしく思います。

> 基礎編だけでもかなりのことができると伺いましたので、今後はまず仕事上の懸案事項への活用をトライしてみるつもりです。

それは、本当にそうですので。
どんどんご活用ください。門田さんがどんな成果をあげられるか、とても楽しみです。


>基礎編フォローアップ動画講座、全18回、本日をもって学習を終了することができました。マクロ言語の学習は全く初めての経験でしたので全てが新鮮で大変楽しく学習することができました。学習者に寄り添い、かつ実践的な講座をご提供いただき大変ありがとうございました。基礎編だけでもかなりのことができると伺いましたので、今後はまず仕事上の懸案事項への活用をトライしてみるつもりです。将来、おそらく発展コースでの学習の必要性が出てくるものと思われますが、基礎編で学んだ成果を試して見たいと考えております。これまでのご指導に感謝いたします。ありがとうございました。


4386 : 門田 源一さんのコメント (2015-05-29 22:17:31)

基礎編フォローアップ動画講座、全18回、本日をもって学習を終了することができました。マクロ言語の学習は全く初めての経験でしたので全てが新鮮で大変楽しく学習することができました。学習者に寄り添い、かつ実践的な講座をご提供いただき大変ありがとうございました。基礎編だけでもかなりのことができると伺いましたので、今後はまず仕事上の懸案事項への活用をトライしてみるつもりです。将来、おそらく発展コースでの学習の必要性が出てくるものと思われますが、基礎編で学んだ成果を試して見たいと考えております。これまでのご指導に感謝いたします。ありがとうございました。


4014 : 小川慶一の回答 (2015-03-27 06:46:20)

きちんと動いたなら、これで良いかと思います。

この構造文のパターンは、発展編1ででてくる「伝票作成」のマクロでもそっくりそのまま登場します。
これです↓。
http://www.exvba.com/demo_denpyo.php

楽しみにしていてください。


4011 : 佐々木久さんのコメント (2015-03-26 23:16:35)

コードを書いてみました。
一応上手く処理されましたが、
どこかおかしいところや注意すべき箇所はありますでしょうか?

 
Sub test()
    Dim cGyo As Long
    Dim cHida As Long
    Dim cMigi As Long
    Dim sTiku As String
    
    cHida = 2
    cMigi = 2

    For cGyo = 2 To 27
        If Range("A" & cGyo).Value <> Range("A" & cGyo + 1).Value Then
            Range("E" & cHida) = Range("A" & cGyo).Value
            Range("F" & cHida) = Range("B" & cGyo).Value
            Range("G" & cMigi) = Mid(sTiku & "," & Range("C" & cGyo).Value & "地区", 2)
            cHida = cHida + 1
            cMigi = cMigi + 1
            sTiku = ""
        Else
            sTiku = sTiku & "," & Range("C" & cGyo).Value & "地区"
        End If
    Next
End Sub
 


3868 : 小川慶一の回答 (2015-02-19 08:39:40)

ゲスト さん:

>9回目から復習をしてきて18回目まで戻ってきました。
>それでも書くのに悩んだ12回と18回は、また復習しますヽ(*´v`*)ノ

ガンガン練習してください☆

Web連携講座は、ITリテラシーつけるにはとてもよいですよ。
いただいたコード。

Range("G" & mke - 1).Value = Left(ward, Len(ward) - 1)

の処理を26回やっています。それだとちょっとムダが多いかな。
入力先のセルごとに上記処理は1回までで済むように改変してください。

以下、極端な例で考えると分かるかと思いますので。
いまは for i = 2 to 27 ... next だからそれほどでもないけど、業者は15件しかない地区は3,000ある、とかだったら2,9000回の入力は直後に上書きされるだけのムダな記入になります。
それではまずいですよ。



>9回目から復習をしてきて18回目まで戻ってきました。
>それでも書くのに悩んだ12回と18回は、また復習しますヽ(*´v`*)ノ
>次は「Web連携」をやりつつ毎日一つはマクロを書いていきます^^/
>「Web連携」が終わった後は、マクロの苦手な部分も克服できていることに期待。
>それから発展編1に移ろうと思います^^
>
>今回書いたコード↓
>

>Sub create_ward()
>    'review: 2015/2/16
>    Dim i, mke, ward
>    mke = 2
>    For i = 2 To 27
>        If Range("A" & i - 1).Value <> Range("A" & i).Value Then
>            Range("E" & mke).Value = Range("A" & i).Value
>            Range("F" & mke).Value = Range("B" & i).Value
>            ward = Range("C" & i).Value & "地区,"
>            mke = mke + 1
>        Else
>            ward = ward & Range("C" & i).Value & "地区,"
>        End If
>        Range("G" & mke - 1).Value = Left(ward, Len(ward) - 1)
>    Next
>End Sub
>


3858 : 佐藤 あゆむさんのコメント (2015-02-17 07:40:17)

9回目から復習をしてきて18回目まで戻ってきました。
それでも書くのに悩んだ12回と18回は、また復習しますヽ(*´v`*)ノ
次は「Web連携」をやりつつ毎日一つはマクロを書いていきます^^/
「Web連携」が終わった後は、マクロの苦手な部分も克服できていることに期待。
それから発展編1に移ろうと思います^^

今回書いたコード↓

Sub create_ward()
    'review: 2015/2/16
    Dim i, mke, ward
    mke = 2
    For i = 2 To 27
        If Range("A" & i - 1).Value <> Range("A" & i).Value Then
            Range("E" & mke).Value = Range("A" & i).Value
            Range("F" & mke).Value = Range("B" & i).Value
            ward = Range("C" & i).Value & "地区,"
            mke = mke + 1
        Else
            ward = ward & Range("C" & i).Value & "地区,"
        End If
        Range("G" & mke - 1).Value = Left(ward, Len(ward) - 1)
    Next
End Sub


3827 : 小川慶一の回答 (2015-02-13 06:38:57)

匿名 さん:

For Next構文の入りにそれが初回処理かどうか判断して条件分岐するというのは常道です。
これもパターンなので、第17回で紹介したやり方と対にして覚えます。

>もう一度、最後の方の難しかったところを観てから、次の「発展編1」に進もうと思います。

素晴らしいです。絶対正解です。

知識に触れることをむやみに追うより、体得するプロセスを重視したほうが近道です。

発展編1の知識がなくても条件反射的に仕上げられる仕事は多いですし、体得できているもののレベルが高いほうが発展編1の知識も入るのが早くなります。


3814 : 小川慶一の回答 (2015-02-13 06:06:34)

ゲスト さん:

For Next構文の入りにそれが初回処理かどうか判断して条件分岐するというのは常道です。
ムダに知識を増やすより、こういう手法を知っているか、自分のケースに当てはめて自由に活用できるかということが重要です。


3812 : 受講生さんのコメント (2015-02-11 23:59:37)

17回の動画を観た後に、自分でNo.18の[2]をやってみました。

Sub list2()
Dim gyo
Dim migi
Dim kuiki

    migi = 2
    
    For gyo = 2 To 27
    
        If Range("A" & gyo - 1).Value <> Range("A" & gyo).Value Then
            Range("E" & migi).Value = Range("A" & gyo).Value
            Range("F" & migi).Value = Range("B" & gyo).Value
            migi = migi + 1
        End If
        
            If Range("B" & gyo - 1).Value <> Range("B" & gyo).Value Then
                kuiki = Range("C" & gyo).Value & "地区"
            Else
                kuiki = kuiki & "," & Range("C" & gyo).Value & "地区"
            End If
            
            Range("G" & migi - 1).Value = kuiki   'G列が1行ずれてしまったので、migi -1で調整した。
            
        Next
        
End Sub

急遽、migi-1なんてやらかしていますが…(^_^;)
それでも、何とか一通りフォローアップ動画も観終わりました。
もう一度、最後の方の難しかったところを観てから、次の「発展編1」に進もうと思います。
ありがとうございます。


3798 : 佐藤 あゆむさんのコメント (2015-02-10 22:00:05)

小川先生:

私が一番悩んだのは地区の部分をどうやって入れるかということでした。
どうしても一段後にずれるようなので、とりあえずA2の岩手化学が一つしかないのを幸いに、
岩手化学をForNextから出して先行させ、残りの地区を入れていくという算段を立てました。

小川先生は、その一段ずれる部分をIf migi>2Thenで吸収していますね。
流れを変えたい部分を大きな流れの中に組み込んで分岐させる、という発想は私にはありませんでした。
流れを変えたいから、全体としての大きな流れとはまた別の流れを作ってしのごうと考えましたから。

今後は、マクロを書く中で「この流れをかえたい」という部分を全体の流れにうまく組み込んで書けるようになりたいです(*゚▽゚)*


>ゲスト さん:
>
>そして、動画で示した見本と比べてどうでしたでしょうか?
>
>>今回は2日間粘って[2]を完成させました。
>>
>>今から仕事なので帰宅したら小川先生のマクロを検証しつつなぞろうと思います。
>>

>>Sub createlist2()
>>    Dim i, j, ward
>>    Range("E2").Value = Range("A2").Value
>>    Range("F2").Value = Range("B2").Value
>>    
>>    j = 3
>>    For i = 3 To 26
>>        If Range("A" & i - 1).Value <> Range("A" & i).Value Then
>>            Range("E" & j).Value = Range("A" & i).Value
>>            Range("F" & j).Value = Range("B" & i).Value
>>            j = j + 1
>>        End If
>>    Next
>>    
>>'作成日: 2015/02/09。↓2日考えてやっと完成
>>    j = 2
>>    Range("G2").Value = Range("C2").Value & "地区"
>>    For i = 2 To 26
>>        If Range("A" & i) <> Range("A" & i + 1) Then
>>            ward = 0
>>            j = j + 1
>>            ward = Range("C" & i + 1).Value & "地区,"
>>            Range("G" & j).Value = ward
>>        Else
>>            ward = ward & Range("C" & i + 1) & "地区,"
>>            Range("G" & j).Value = ward
>>        End If
>>    Next
>>    For i = 3 To 11
>>        Range("G" & i).Value = Left(Range("G" & i).Value, Len(Range("G" & i).Value) - 1)
>>    Next
>>    
>>End Sub
>>
>>

>


3790 : 小川慶一の回答 (2015-02-10 06:39:50)

ゲスト さん:

そして、動画で示した見本と比べてどうでしたでしょうか?

>今回は2日間粘って[2]を完成させました。
>
>今から仕事なので帰宅したら小川先生のマクロを検証しつつなぞろうと思います。
>

>Sub createlist2()
>    Dim i, j, ward
>    Range("E2").Value = Range("A2").Value
>    Range("F2").Value = Range("B2").Value
>    
>    j = 3
>    For i = 3 To 26
>        If Range("A" & i - 1).Value <> Range("A" & i).Value Then
>            Range("E" & j).Value = Range("A" & i).Value
>            Range("F" & j).Value = Range("B" & i).Value
>            j = j + 1
>        End If
>    Next
>    
>'作成日: 2015/02/09。↓2日考えてやっと完成
>    j = 2
>    Range("G2").Value = Range("C2").Value & "地区"
>    For i = 2 To 26
>        If Range("A" & i) <> Range("A" & i + 1) Then
>            ward = 0
>            j = j + 1
>            ward = Range("C" & i + 1).Value & "地区,"
>            Range("G" & j).Value = ward
>        Else
>            ward = ward & Range("C" & i + 1) & "地区,"
>            Range("G" & j).Value = ward
>        End If
>    Next
>    For i = 3 To 11
>        Range("G" & i).Value = Left(Range("G" & i).Value, Len(Range("G" & i).Value) - 1)
>    Next
>    
>End Sub
>
>


3784 : 佐藤 あゆむさんのコメント (2015-02-09 08:00:07)

今回は2日間粘って[2]を完成させました。

今から仕事なので帰宅したら小川先生のマクロを検証しつつなぞろうと思います。

Sub createlist2()
    Dim i, j, ward
    Range("E2").Value = Range("A2").Value
    Range("F2").Value = Range("B2").Value
    
    j = 3
    For i = 3 To 26
        If Range("A" & i - 1).Value <> Range("A" & i).Value Then
            Range("E" & j).Value = Range("A" & i).Value
            Range("F" & j).Value = Range("B" & i).Value
            j = j + 1
        End If
    Next
    
'作成日: 2015/02/09。↓2日考えてやっと完成
    j = 2
    Range("G2").Value = Range("C2").Value & "地区"
    For i = 2 To 26
        If Range("A" & i) <> Range("A" & i + 1) Then
            ward = 0
            j = j + 1
            ward = Range("C" & i + 1).Value & "地区,"
            Range("G" & j).Value = ward
        Else
            ward = ward & Range("C" & i + 1) & "地区,"
            Range("G" & j).Value = ward
        End If
    Next
    For i = 3 To 11
        Range("G" & i).Value = Left(Range("G" & i).Value, Len(Range("G" & i).Value) - 1)
    Next
    
End Sub


3687 : 小川慶一の回答 (2015-01-24 20:26:21)

井上 聡 さん:

以前も書きましたが、きちんと動くコードをください。
以下のものであれば、追記するのは (A) ではなく '(A) であるべきです。

以後、お気をつけください。

>質問 以下のコードの場合は、(A)が2だと最初に" . "ピリオドがつきます。3だと消えます。なぜでしょうか。

mid関数の仕様について復習。

「東京都渋谷区」という文字列があったとします。
そのとき、

mid("東京都渋谷区", 1) → "東京都渋谷区"
mid("東京都渋谷区", 2) → "京都渋谷区"
mid("東京都渋谷区", 3) → "都渋谷区"
mid("東京都渋谷区", 4) → "渋谷区"
mid("東京都渋谷区", 5) → "谷区"

ですね。ここまでは大丈夫ですか?

では問題。

(A) の段階で、 変数 tantou には何という文字列が入っていますか?
その一文字目は何?ニ文字目は何?三文字目は何?四文字目は何?五文字目は何?

以下の回答スペースをを用意します。ここに自分で【手書きで】書き込んでください。

変数 tantou の一文字目:
変数 tantou のニ文字目:
変数 tantou の三文字目:
変数 tantou の四文字目:
変数 tantou の五文字目:

そのうえで、上記の mid 関数の仕様についてもう一度復習すれば、おそらく分かるでしょう。
分かったか、分からないで挫折したか、したらまたご連絡ください。




>質問 以下のコードの場合は、(A)が2だと最初に" . "ピリオドがつきます。3だと消えます。なぜでしょうか。
>Sub risuto()
> Dim hidari
> Dim migi
> Dim tantou
> migi = 1
> For hidari = 2 To 27
> If Range("A" & hidari - 1).Value <> Range("A" & hidari).Value Then
> migi = migi + 1
> tantou = " "
> End If
> Range("E" & migi).Value = Range("A" & hidari).Value
> Range("F" & migi).Value = Range("B" & hidari).Value
> tantou = tantou & "." & Range("C" & hidari).Value & "担当"
> Range("G" & migi).Value = Mid(tantou, 2)(A)
> Next
>End Sub


3680 : 井上 聡さんのコメント (2015-01-24 10:23:32)

質問 以下のコードの場合は、(A)が2だと最初に" . "ピリオドがつきます。3だと消えます。なぜでしょうか。
Sub risuto()
Dim hidari
Dim migi
Dim tantou
migi = 1
For hidari = 2 To 27
If Range("A" & hidari - 1).Value <> Range("A" & hidari).Value Then
migi = migi + 1
tantou = " "
End If
Range("E" & migi).Value = Range("A" & hidari).Value
Range("F" & migi).Value = Range("B" & hidari).Value
tantou = tantou & "." & Range("C" & hidari).Value & "担当"
Range("G" & migi).Value = Mid(tantou, 2)(A)
Next
End Su


2646 : 小川慶一の回答 (2014-10-05 17:01:33)

浜口 智之 さん:

よかったです!ひきつづきお楽しみください☆
実務でもどんどんマクロを書いて、どんどん質問してください。

今度の発展編1でお会いできるのを楽しみにしていますね。

>途中から、どんどん楽しくなり、気がついたら最後まで一気にたどり着いてしまいました。
>ゲームをやっていて時間を忘れてしまうような、あの感じです。
>今までの回で、書いていく中で、色々試して失敗しましたが、その失敗の方法が今回使えたりと、たくさん失敗する意義を感じる最終回でした。
>今の頭の状態で、もう一度、第一回目から、新たな発見と知識の定着のため、マクロを書いてみようと思います。
>発展編でもお世話になると思いますが、よろしくお願いします。
>基礎編の分かりやすい動画解説、ありがとうございました。


2635 : 浜口 智之さんのコメント (2014-10-04 19:13:14)

途中から、どんどん楽しくなり、気がついたら最後まで一気にたどり着いてしまいました。
ゲームをやっていて時間を忘れてしまうような、あの感じです。
今までの回で、書いていく中で、色々試して失敗しましたが、その失敗の方法が今回使えたりと、たくさん失敗する意義を感じる最終回でした。
今の頭の状態で、もう一度、第一回目から、新たな発見と知識の定着のため、マクロを書いてみようと思います。
発展編でもお世話になると思いますが、よろしくお願いします。
基礎編の分かりやすい動画解説、ありがとうございました。


1966 : 小川慶一の回答 (2014-08-17 04:05:05)

角野崇雄 さん:

お楽しみいただけているようで何よりです。
ひきつづきよろしくお願いいたします☆



>小川先生
>
>お世話になっております。
>
>今やっとフォロー動画をすべて終了致しました。
>最後の方はなかなか考えさせられました。面白かったです。
>
>発展編1に移ろうと思います。
>引き続きよろしくお願い致します。
>


1955 : 角野崇雄さんのコメント (2014-08-14 14:21:31)

小川先生

お世話になっております。

今やっとフォロー動画をすべて終了致しました。
最後の方はなかなか考えさせられました。面白かったです。

発展編1に移ろうと思います。
引き続きよろしくお願い致します。


1925 : 小川慶一の回答 (2014-08-11 16:28:43)

明石 照伸 さん:

全動画踏破おめでとうございます☆

>知らないうちに非常に短期間に業務でも
>マクロを活用できるようになりましたので
>非常に投資効果の高いセミナーだったと
>いえるかと思います。

よいですね!そう言っていただけて、僕もとてもうれしいです v(^^*


>(実は、密かに、Excelマクロによる分析を
>多用する業務に移ることを目論んでおりますので(^^、)

行けますよ!数ヶ月も経ったころには、すっかり環境も変わっているかもしれません。
ひきつづき、マクロガンガン活用して楽しんでください。

フォロー期間もまだまだありますし、実務でマクロを書いているときに問題にぶつかったときにも、遠慮なく質問等してください。


1899 : 明石 照伸さんのコメント (2014-08-10 20:09:21)

お世話になります。

本日ようやく動画解説を見終わる
ことができました。

解説もありましたように最後の設問の
For~Nextの最初と最後の書き込みに
手間取ったのですが、以下のような
回答を作成していましたが、

これに冠する小川さんの解説は、また
しても(^^;自分では思いつかないような
手順というかアプローチの仕方でしたので
非常に勉強になりました。

最終問題ですので全体を総括させて
いただきますと、

知らないうちに非常に短期間に業務でも
マクロを活用できるようになりましたので
非常に投資効果の高いセミナーだったと
いえるかと思います。

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


発展編とのギャップがどのくらいあるかは
わかりませんが、何度か復習した後、できるだけ
はやく発展編も受講させていただきたいと
思っております。

(実は、密かに、Excelマクロによる分析を
多用する業務に移ることを目論んでおりますので(^^、)
もっともっと勉強していきたいと思います。

今後ともよろしくお願いいたします。


---
Sub kakikae()
Dim migi
migi = 2

Dim kuiki
kuiki = 0

Dim hida
For hida = 2 To 27
If Range("a" & hida).Value <> Range("a" & hida - 1).Value Then
Range("e" & migi).Value = Range("a" & hida).Value
Range("f" & migi).Value = Range("b" & hida).Value
kuiki = Range("c" & hida).Value & "地区"
migi = migi + 1

Else
kuiki = kuiki & "," & Range("c" & hida).Value & "地区"

End If

Range("g" & migi - 1).Value = kuiki

Next


End Sub
--


556 : ガラパゴスタディー事務局の回答 (2013-12-04 00:00:00)

佐藤さん:

おはようございます。

完走おめでとうございます! (^^

二周目は、かなり簡単に簡単に感じられることも多いと思いますよ。
ひきつづき、お楽しみください ヾ(´ー`)ノ


555 : 佐藤 尚子さんのコメント (2013-12-03 00:00:00)

動画の通りに書いて、動きました。
まずは、もう一周復習したいと思います!
指さし確認をしながら今自分が何をやっているか確認してやってみます。
ありがとうございました


569 : ガラパゴスタディー事務局の回答 (2013-09-17 00:00:00)

小俣さん:

完走おめでとうございます☆

> ・小さいことから始める。
> ・とにかく試行錯誤してたくさん行動してたくさん失敗する。
> ・ショートカットや指差喚呼など、まずは手元から。
> ・手続きを勝手にスキップしないこと。
> ・規則性を見つけること。
> ・現有戦力でいかに戦うか。
> ・楽するための努力を惜しまない。

↑よいですね。おっしゃるとおりです、、というか、ExcelVBAに固有の基礎知識が少しあれば、あとはフツーのビジネスパーソンとしてやるべきことを徹底してやるだけのことです。
それだけで、十分な成果を出せます。

ひきつづき、お楽しみを☆


568 : 小俣卓生さんのコメント (2013-09-16 00:00:00)

18回の動画フォローセミナー無事に終わりました!

約3週間の間、毎日問題を出してもらって、うまくいかない場合もすぐに解説動画でキャッチアップでき、次の日の問題でリベンジできる環境はセミナー当日と合わせてとても有意義でした。

・小さいことから始める。
・とにかく試行錯誤してたくさん行動してたくさん失敗する。
・ショートカットや指差喚呼など、まずは手元から。
・手続きを勝手にスキップしないこと。
・規則性を見つけること。
・現有戦力でいかに戦うか。
・楽するための努力を惜しまない。

などなどExcelVBAに限らずビジネスパーソンとしても大切な考え方を学ぶことができました。

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


567 : ガラパゴスタディー事務局の回答 (2013-05-03 00:00:00)

池本さん:

こんにちは~☆

完走、おめでとうございます (*^^*)


> 先生と同じように書いているうちにわかってきました。
> というか、書かないとわかんないし、書いたほうがはやいですね。

そうそう。「まなぶはまねぶ」です。


↓以下は、くり返し構文の典型的なパターンの集合ですね。
・ループ冒頭での明示的な変数の初期化
・最初だけ特殊な作業(今回は、作業をスキップ)
・ループを抜けた直後に特殊な作業

> 発展編の予告(?)までついていて、発展編がますます楽しみになりました~(*^^*)

↑伝票作成マクロも、発想は同じなので (^^


> 今は、次のことが連動する素敵なマクロに取り組んでいます☆
> 1.栄養価計算
> 2.廃棄率計算式発注表
> 3.家計簿
> 4.献立表
> 5.1日の必要量不足分の表
> 6.糖尿病食品交換表(&腎臓病食品交換表)対応計算表
> 7.年齢性別身体活動レベルごとの対応表

↑これ、すごいですね。そこそこ進んだら、ぜひ見せてください!

学んだことを身近なことからどんどん試されている姿勢、とてもすばらしいです。
ひきつづき、お楽しみを☆
この動画セミナーも、二週目ぜひやってください。また学びも深くなりますよ。


566 : 池本利恵さんのコメント (2013-04-30 00:00:00)

こんにちは~☆

完走できました~♪
嬉しいです~(*^^*)

問題1は簡単でしたが、問題2は昨日からたくさん書いて書いて失敗しまくりました(^^;
動画をみてからは、先生とおなじように1個ずつ動かして、自力でできるまで何回も書きまくりましたo(^^)o
先生と同じように書いているうちにわかってきました。
というか、書かないとわかんないし、書いたほうがはやいですね。

自力でいろいろやってみて、
問題1の2行部分のマクロ(の変数と仕掛け)を活用したほうがいいということにはなったけれど、

問題1の仕掛けで上と行が違ったらどうする、という部分と、上の行と違わなくてもデータをひろって並列したいという部分をどうやって両立させるのかがわからなかったです。わからないなりに書いていると、そこは考えなくても両立してて、上の行と違わないときにデータをひろってきているらしい。でも、いらないデータもひろってくるらしい、1行とぶらしい、というところまでいきました。

なので動画をみて、同じマクロをかいたら、考え方がすんなり頭に入りました(^^) 

・ひろってきたいデータの重複をさけるために、
 データをいれたあとにchiku = ""
・1行ずれるから -1
・でも開始したい一番上の行が2ならそれが-1になってしまって、開始したい行の上まで影響するから if文で2>
・最後たりないからfor next構文のあとにもう一回加える

この4つ、かなりおもしろかったです。
そうふうにいろいろ試すんだな~と、パターンというより考え方を学びました。

発展編の予告(?)までついていて、発展編がますます楽しみになりました~(*^^*)

今は、次のことが連動する素敵なマクロに取り組んでいます☆
1.栄養価計算
2.廃棄率計算式発注表
3.家計簿
4.献立表
5.1日の必要量不足分の表
6.糖尿病食品交換表(&腎臓病食品交換表)対応計算表
7.年齢性別身体活動レベルごとの対応表

基礎コースに参加する前は、
マクロを習ったらできるかもしれない、となんとなく思っていたことが、
この1ヶ月で、マクロで簡単にできるはず!!と思えるようになったことと、
どこからはじめたらいいかがわかってとりあえず動き出したことが
私の今の時点の成果です(*^^*)

小川先生に教わって大正解でした。とっても感謝しています。
ありがとうございました☆


565 : 栗原宏明さんのコメント (2013-04-21 00:00:00)

22日ほど掛かりましたが、1週目終了です。明日から2週目を実行して頭ではなく手が覚えている状態を目指します。


564 : ガラパゴスタディー事務局の回答 (2013-03-25 00:00:00)

星野さん、

お返事、遅れました。

2週目突入、おめでとうございます☆


> 講師から直接聞きたいところと、受講生に作業だけさせたいところとがセパレートされているため、前者の時間だけを拘束時間とすることで、集合教育の時間を最短化させていると感じたからです。

ですね。ある程度やってもらったところで、また講義があって、という具合に入れ子になるようにしています。

「基礎編講義→フォロー動画」

の組み合わせのあと、また、

「発展編講義→フォロー動画」

という感じですね。

とはいえ、法人研修の場合は個々の動機付け的になかなか難しいところもあるので、原則、講座用に確保いただいた時間の中で演習もやるようにしています。
(グループ演習中心です。詳しくは、発展編講義の最後の時間にでも)


563 : 星野智幸さんのコメント (2013-03-20 00:00:00)

2月に受講した星野です。
フォローアップセミナー完走できました。ホッ。
見ないでやれるようになったら、素敵なので、二周目はじめました。
一周目は、自分で1時間くらい考えてから解答を見て、実際やってみるというパターンでやりました。ただ、独力でできた問題は少なかったことは悔しかったです。


話はそれます。
私は会社で研修事務局をしていますが、この仕組みはとてもよいと思います。
講師から直接聞きたいところと、受講生に作業だけさせたいところとがセパレートされているため、前者の時間だけを拘束時間とすることで、集合教育の時間を最短化させていると感じたからです。
集合研修は、受講生に作業だけさせるところも強制的にやらせることができるというメリットがあります。会社の教育の場合は全部集合教育でやらせないといけないというのは仕方ないのかもしれません。あるいは受講生の動機を高めることが不足しているのかもしれません。などと思いました。

4月最終週の発展編に向けてがんばります。


562 : ガラパゴスタディー事務局の回答 (2013-03-14 00:00:00)

豊島さん:

お返事、遅れました..が、順調そうでなによりです。

> 今回の講習で、意外に役に立ったのが、変数の定義で、表の左側を"hida"として、右側を"migi"とすることですね!

ですね。変数の名前付けはとても大切です。

moto , saki とか、そういう名前もありそう。

いずれにしても、名前を見た瞬間、それが何を指しているのかが分かる名前にすることが大切です。


逆に、ダメダメ例あ挙げると:

x, y

a1, a2

とか(汗


561 : 豊島 久博さんのコメント (2013-03-11 00:00:00)

今回のマクロは模範解答とは違いますが、何となくは動きました。

Sub gyosha()
    Dim hidari
    Dim migi
    Dim tanto
     
    migi = 2
     
    For hidari = 2 To 27
        If Range("a" & hidari).Value <> Range("a" & hidari - 1).Value Then
            Range("e" & migi).Value = Range("a" & hidari).Value
            Range("f" & migi).Value = Range("b" & hidari).Value
            tanto = Range("c" & hidari).Value & "地区"
            migi = migi + 1
        Else
            tanto = tanto & "," & Range("c" & hidari).Value & "地区"
        End If
            Range("g" & migi - 1).Value = tanto
         
    Next
 
End Sub


今回の講習で、意外に役に立ったのが、変数の定義で、表の左側を"hida"として、右側を"migi"とすることですね!


560 : ガラパゴスタディー事務局の回答 (2013-02-08 00:01:00)

山根さん:

まずは、完走おめでとうございます! ヾ(´ー`)ノ

> 解説動画見るとおしいとこまでいってたのにそのあとさらにぐちゃぐちゃにしてしまいました。
> 変数=""を入れてれば解けてたのに悔しいです。

そうでしたか..おしかったですね (^^;

今日はさらさら解けますかね。

ぜひ、基礎編動画セミナーも復習してくださいね。
二週目に入ると、また学びも違うと思います。

山根さんの場合は発展編フォローアップもあるので忙しいと思いますが、
例えば、メインは発展編のほうで、たまに息抜きに基礎編のほう、という感じもありかなと思います。

ではでは。


559 : 山根信行さんのコメント (2013-02-08 00:00:00)

最終回でこんな難題とは。
2問目は解けませんでした。
解説動画見るとおしいとこまでいってたのにそのあとさらにぐちゃぐちゃにしてしまいました。
変数=""を入れてれば解けてたのに悔しいです。

悔しいのでこのパターンを10回書いて寝ます。


558 : ガラパゴスタディー事務局の回答 (2012-12-31 00:00:00)

佐藤さん:

2週目完了、おめでとうございます (^^

> ただ、本当に時間がかかるので、なるべく今後は何とか進み続けたいです~

やるたびに、早くなりますよー。
あと、やはり、実務でもマクロを書くことです。(←これについては、されていらっしゃるようなので、僕としては安心♪)

ひきつづき、お楽しみを!!


557 : 佐藤 尚子さんのコメント (2012-12-30 00:00:00)

やっと2週目ができました!
この№.18も何をやっているかわかって(^_^;
ホッとしました。
「理解してから書こうとするより、何度も書いて失敗しながら進んでいく方が早い」との話があり、その通りだと思いつつも、解らないとそこで書くのをやめてしまいそうになるので、もしまた解らないと思ったら、前に戻ってやり直しつつ進めていきたいと思いました。
ただ、本当に時間がかかるので、なるべく今後は何とか進み続けたいです~
引き続き発展編もがんばります。
ありがとうございました。


554 : ガラパゴスタディー事務局の回答 (2012-11-09 00:00:00)

竹端さん:

おー、すごい。最後のは、なかなか難問ですよ。


> でも、なぜ上手くいったのか、イマイチ分かんないですよねー??

そういうときは、またイチからやってみてください。

「?」な状態がつづくようでしたら、メール相談をお気軽に (^^


> とにかく、ご指導、ありがとうございました。発展編にむけて、基本スキルはきちんと身につけておきます!!

このくらいできれば、ぜんぜん心配ないです。発展編、楽しみにしていてください!!


553 : 竹端博希さんのコメント (2012-11-08 00:02:00)

最後はなんとか自力で解くことができました。いろいろ加えてたり、並べ替えたりしながら、試行錯誤でできました。でも、なぜ上手くいったのか、イマイチ分かんないですよねー??
とにかく、ご指導、ありがとうございました。発展編にむけて、基本スキルはきちんと身につけておきます!!


552 : ガラパゴスタディー事務局の回答 (2012-11-08 00:01:00)

追記です。

> やって見ると色々発見がありました。

そうそう。とにかく、いろいろやってみることです (^o


551 : ガラパゴスタディー事務局の回答 (2012-11-08 00:00:00)

加藤さん:

おはようございます。

この問題は、下につづくリストを元にして、右と下にリストを作るっていうことで、
その点おもしろいですし、また、慣れないと頭を使いますね。

とはいえ、こういうのも、パターンです。
ぜひ、楽しんで習得してください!!


550 : 加藤美智子さんのコメント (2012-11-07 00:00:00)

問題[2]の「担当区域」を正解になるよう色々にやって見る!(動画を見た後でしたが…(~_~;))
やって見ると色々発見がありました。
何度もやってみたいと思いました。


549 : 久武 美香さんのコメント (2012-10-30 00:00:00)

問題1は大丈夫でしたが、問題2はいろいろ試してはみたのですが、自力では無理でした。
やはり最初と最後が肝なんですね。

今回の動画では小川先生でも試行錯誤しながらマクロを書いておられるのがわかって、ちょっと安心しました。
小川先生のご好意でせっかく再受講させてもらったんだから、今度こそも頭に汗かいて身につけようと思います。再受講する機会を与えてくださって本当にありがとうございました!


548 : 大椛輝志さんのコメント (2012-10-26 00:00:00)

最終回、かなり手応えありましたが、まさに失敗しながら一歩一歩進んでいく問題でした。
for nextに入ってすぐ、終わってすぐ。気をつけていきたいと思います!!
この度は、見学のみならず、動画、しかもアドバイスまでいただき、ほんとうにありがとうございました。


547 : 有家 健司さんのコメント (2012-10-24 00:00:00)

前回の
Range("F2").Value = Mid(gyosha, 2)
Range("F3").Value = Mid(hurigana, 2)
はNextの後で良かったですね。
処理は一回で済ませたほうが確かにスマートです。

>..と書いてみましたが、f2, f3にデータを入力するタイミングが
>ベストではないですね。


> > フィードバックを受けつけました。
> >
> >
> > - - - - -
> >
> > □今回のテーマ
> > 基礎コースフォローアップNo.17 動画解説
> >
> > □お名前
> > 有家 健司
> >
> > □メールアドレス
> > xxxxxxxx
> >
> > □メールアドレス(確認)
> > xxxxxxxx
> >
> > □今回の感想
> > とても満足
> >
> > □コメント・質問等
> > 初見では頭が真っ白になりましたが、方法を暗記します。ありがとうございました。
> >
> > (問題2は自力で解けました)
> >
> >
> >
> > Sub mondai1()
> >
> > Dim gyo
> >
> > Dim gyosha
> >
> > Dim hurigana
> >
> > For gyo = 2 To 11
> >
> > gyosha = gyosha & "," & Range("A" & gyo).Value
> >
> > hurigana = hurigana & "," & Range("B" & gyo).Value
> >
> > Range("F2").Value = Mid(gyosha, 2)
> >
> > Range("F3").Value = Mid(hurigana, 2)
> >
> > Next
> >
> > End Sub

--------------------------
今回は2問とも自力で解けました。
(問題2は先生と少し違ったやり方になってしまってますが)

Sub mondai1()
Dim gyo
Dim naka
naka = 1
For gyo = 2 To 27
If Range("A" & gyo).Value <> Range("A" & gyo - 1).Value Then
naka = naka + 1
End If
Range("E" & naka).Value = Range("A" & gyo).Value
Range("F" & naka).Value = Range("B" & gyo).Value
Next

End Sub

Sub mondai2()
Dim gyo
Dim naka
naka = 1
Dim kuiki
For gyo = 2 To 27
If Range("A" & gyo).Value <> Range("A" & gyo - 1).Value Then
naka = naka + 1
kuiki = Range("C" & gyo).Value & "地区"
Else
kuiki = kuiki & "," & Range("C" & gyo).Value & "地区"
End If
Range("E" & naka).Value = Range("A" & gyo).Value
Range("F" & naka).Value = Range("B" & gyo).Value
Range("G" & naka).Value = kuiki
Next

End Su


1219 : 小川慶一の回答 (2012-09-11 10:43:00)

達人養成塾 小川です。

全18回!まずは完走おめでとうございます (^^

> ものづくりと同じ考え方なんだと納得した次第です。
> 小川先生の書きながら考える姿勢を動画で見ることができたのが最高に参考になりました。

こういう感想をいただくと、完成品からは分からないところを
いろいろ学んでいただけたことう実感できて、僕としてもうれしいですね。


いただいたマクロも、とてもよいと思いますよ。

10月7日までまだ1ヶ月近くありますが、ぜひ、その間の目標とかを決めて、
さらにステップアップしていってください。

応援シテマス☆


1218 : 受講生さんのコメント (2012-09-09 17:10:00)

基礎編の総まとめのような感じでした。



ものづくりと同じ考え方なんだと納得した次第です。小川先生の書きながら考える姿勢を動画で見ることができたのが最高に参考になりました。



具体的には、

for next構文でここまで出来るのだとわかったこと。

変数の活用のコツが少しつかめたこと。

range("A" & rows.count).end(xlup).offset(1)などしなくても、変数を活用することで、とてもシンプルにプログラムがかけることなど。



基本となる考え方が知りたくて参加したセミナーですが、まさに収穫アリです。



その上で、私がNo.18で書いたプロシージャ配下のようになりました。



発展編(10/7大阪)でもよろしくお願いいたいします。



感謝!



Sub tennki_2()

Dim i As Integer

Dim j As Integer

j = 2

For i = 2 To 27

If Range("A" & i).Value <> Range("A" & i - 1).Value Then

Range("E" & j).Value = Range("A" & i).Value

Range("F" & j).Value = Range("B" & i).Value

Range("G" & j).Value = Range("C" & i).Value & "地区"

j = j + 1

Else

Range("G" & j - 1).Value = Range("G" & j - 1).Value & "," & Range("C" & i).Value & "地区"

End If

Next i

End Sub


1240 : 小川慶一の回答 (2012-09-07 09:22:00)

達人養成塾 小川です。こんにちは。

楽しんでいただけているようで、良かったです。
ひきつづき、いろいろ発見しつつ楽しんで学んでいただければ、と思っています (^


1239 : 受講生さんのコメント (2012-09-06 11:41:00)

お世話になります。

基礎講座動画フォローアップを昨日の晩までで全てやり終えました。
全18回を受講した感想を簡単ではありますがお伝えします。

授業の際にお伝えした通り、私はVBAを独学で学んでいたためある程度は
書けるのですが、フォローアップの動画を通じて自分の頭の中で散乱していた情報
が整理され、素早く、スマートに書けるようになったと感じています。

また、動画がただ解答を作っていくというものではなく、小川先生もアドリブ?
のように試行錯誤しながら進めていくという形式だったので、見ている側は
先生の思考をなぞりながら考えることが でき、大変勉強になりました。

とりあえず、今日から2週目ということで動画の復習や、セミナーの
内容を復習して発展編に備えておきます。
知識としては既に分かっている若しくは知っている内容であっても、
小川先生のセミナーは知識以外の実践面で大切な考え方や方法を教えて
いただけるのが素晴らしいと思います。

10月の発展編の受講がますます楽しみです。

今後共よろしくお願いします。


3日がかりのその仕事、3分で終わらせる方法教えます。ガラパゴスタディーオンライン講座 ユーザー登録

本講座の動画一覧

  1. 【動画1】 If文とForNext構文を組み合わせる
    【動画1】 If文とForNext構文を組み合わせる 未習得
  2. 【動画2】 複数条件を組み合わせた条件分岐
    【動画2】 複数条件を組み合わせた条件分岐 未習得
  3. 【動画3】 ElseIfを使った条件分岐
    【動画3】 ElseIfを使った条件分岐 未習得
  4. 【動画4】 出現回数を数える。CountIf関数がやっていることをマクロで書くと?
    【動画4】 出現回数を数える。CountIf関数がやっていることをマクロで書くと? 未習得
  5. 【動画5】 条件に一致するデータを別表に転記する。AutoFilterより便利な条件抽出マクロ。
    【動画5】 条件に一致するデータを別表に転記する。AutoFilterより便利な条件抽出マクロ。 未習得
  6. 【動画6】 条件に一致するデータを別シートに転記する
    【動画6】 条件に一致するデータを別シートに転記する 未習得
  7. 【動画7】 とびとびに存在するデータを拾って加工する
    【動画7】 とびとびに存在するデータを拾って加工する 未習得
  8. 【動画8】 文字列を加工してデータ転記する(その1)
    【動画8】 文字列を加工してデータ転記する(その1) 未習得
  9. 【動画9】 文字列を加工してデータ転記する(その2)
    【動画9】 文字列を加工してデータ転記する(その2) 未習得
  10. 【動画10】 文字列を加工してデータ転記する(その3)
    【動画10】 文字列を加工してデータ転記する(その3) 未習得
  11. 【動画11】 勘定項目ごとに合計額を算出する。SumIf関数がやっていることをマクロで書くと?
    【動画11】 勘定項目ごとに合計額を算出する。SumIf関数がやっていることをマクロで書くと? 未習得
  12. 【動画12】 残業時間がいちばん多い従業員の情報を出力する。Max関数、Min関数より便利なマクロ
    【動画12】 残業時間がいちばん多い従業員の情報を出力する。Max関数、Min関数より便利なマクロ 未習得
  13. 【動画13】 複数の表の間でのマッチング。VLookUp関数がやっていることをマクロで書くと?
    【動画13】 複数の表の間でのマッチング。VLookUp関数がやっていることをマクロで書くと? 未習得
  14. 【動画14】 文字列を様々に解析して条件分岐
    【動画14】 文字列を様々に解析して条件分岐 未習得
  15. 【動画15】 複数の記号に挟まれた文字列を取り出す
    【動画15】 複数の記号に挟まれた文字列を取り出す 未習得
  16. 【動画16】 各資料ごとに1番からの番号を割り振る。AutoFill機能より便利なマクロ
    【動画16】 各資料ごとに1番からの番号を割り振る。AutoFill機能より便利なマクロ 未習得
  17. 【動画17】 表を解析して1行のリストを作る、1行のリストを解析して表にする(その1)
    【動画17】 表を解析して1行のリストを作る、1行のリストを解析して表にする(その1) 未習得
  18. 【動画18】 表を解析して1行のリストを作る、1行のリストを解析して表にする(その2)
    【動画18】 表を解析して1行のリストを作る、1行のリストを解析して表にする(その2) 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ