エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.10

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

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

解説

●演習問題テーマ
:For Each構文を使って複数セルで構成されるコレクションを順次処理する手法を学ぶ。Select Case構文の利用について学ぶ。

If構文を使って、いくつかの条件で複数の処理をしていく演習です。If、ElseIf、ElseIf、ElseIf と条件を列記し、それぞれ処理をしていきます。ただし、条件が複数あるときは、Select Case構文の方が見た目がスッキリして可読性が高くなります。また、With構文の使い方にも触れています。こちらも可読性、メンテナンス性の高いマクロを書けるようになりますので、ぜひ使いこなせるようになってください。

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

11375 : ゲストさんのコメント (2019-04-24 23:36:54)

小川慶一さん:

解説ありがとうございます。
日付を内部的に少数で扱っていることは知りませんでした。
やはりゆくゆくは、5分後、10分後、30分後を表示できるようになりたいので、この機会にDateAdd関数を勉強したいと思います。

> ゲストさん:
>
> エクセルVBAでは、日付は、内部的には小数で扱っています。
> 日付として出力するときに日付に変換しています。
>
> 以下、参考にしてください。
>
>

Sub DateValueSample()
>     Dim dt As Date
>     dt = #12:00:00 AM# '日付の初期値
>     Debug.Print CDbl(dt)
>     
>     dt = #4/23/2019# 'このコードを書いている日
>     Debug.Print CDbl(dt)
>     
>     dt = #4/23/2019 6:00:00 AM# 'このコードを書いている日の午前6時
>     Debug.Print CDbl(dt)
> 
>     dt = #4/23/2019 6:00:00 PM#  'このコードを書いている日の午後6時
>     Debug.Print CDbl(dt)
>     
>     dt = #4/23/2019# 'このコードを書いている日
>     dt = dt + 3      'このコードを書いている日の3日後
>     Debug.Print CDbl(dt)
> End Sub

>
> 出力される結果は、以下です。
> 0
> 43578
> 43578.25
> 43578.75
> 43581
>
> 上記のとおり、 + 3 とすれば元の日付から見て、ちょうど3日あとになります。
> ただし、このやり方しか使いこなせないとなると、「2時間前はどう表現するのか?」とか「35分後」といった、60進法的処理の記述に行き詰まってしまいますね。
>
> ということで、この機会に、DateAdd関数をしっかりマスターされるほうが良いかと思います。
>
>
> > 小川さん
> > いつも大変楽しく勉強させていただきております。
> >
> > ウォーミングアップ問題1についての質問です。
> > 私は以下のようなコードを書いたのですが、小川先生と同じ日付が出ました。
> > こちらの方が簡素でいいと思ったのですが、このコードでも問題はないですか?
> > Sub mondai1()
> > Worksheets("Sheet3").Range("A1").Value = Date + 3
> > End Sub
> >


11374 : 小川慶一の回答 (2019-04-23 23:03:38)

ゲストさん:

エクセルVBAでは、日付は、内部的には小数で扱っています。
日付として出力するときに日付に変換しています。

以下、参考にしてください。

Sub DateValueSample()
    Dim dt As Date
    dt = #12:00:00 AM# '日付の初期値
    Debug.Print CDbl(dt)
    
    dt = #4/23/2019# 'このコードを書いている日
    Debug.Print CDbl(dt)
    
    dt = #4/23/2019 6:00:00 AM# 'このコードを書いている日の午前6時
    Debug.Print CDbl(dt)

    dt = #4/23/2019 6:00:00 PM#  'このコードを書いている日の午後6時
    Debug.Print CDbl(dt)
    
    dt = #4/23/2019# 'このコードを書いている日
    dt = dt + 3      'このコードを書いている日の3日後
    Debug.Print CDbl(dt)
End Sub


出力される結果は、以下です。
0
43578
43578.25
43578.75
43581

上記のとおり、 + 3 とすれば元の日付から見て、ちょうど3日あとになります。
ただし、このやり方しか使いこなせないとなると、「2時間前はどう表現するのか?」とか「35分後」といった、60進法的処理の記述に行き詰まってしまいますね。

ということで、この機会に、DateAdd関数をしっかりマスターされるほうが良いかと思います。


> 小川さん
> いつも大変楽しく勉強させていただきております。
>
> ウォーミングアップ問題1についての質問です。
> 私は以下のようなコードを書いたのですが、小川先生と同じ日付が出ました。
> こちらの方が簡素でいいと思ったのですが、このコードでも問題はないですか?
> Sub mondai1()
> Worksheets("Sheet3").Range("A1").Value = Date + 3
> End Sub
>


11372 : ゲストさんのコメント (2019-04-23 21:04:10)

小川さん
いつも大変楽しく勉強させていただきております。

ウォーミングアップ問題1についての質問です。
私は以下のようなコードを書いたのですが、小川先生と同じ日付が出ました。
こちらの方が簡素でいいと思ったのですが、このコードでも問題はないですか?
Sub mondai1()
Worksheets("Sheet3").Range("A1").Value = Date + 3
End Sub


10305 : 小川慶一の回答 (2018-08-02 10:45:39)

受講生 さん:

まずは以下を読んでみてください。

「セルの値」を指定するとき、.Value は省略してよいものか? – Excelマクロ・VBA
https://www.exvba.com/2183/


> 小川さん
> お世話になります。
> 朝の体操の問題で、コード中に「.Value」を入れなくても結果は同じでした。試しに左辺だけ入れてみても動きました。先日のworksheets とsheets ではありませんが、入れる入れないで、本質的な違いがどこかで生じているのでしょうか。
> もしかすると、この件に関しても今までの講義で出てきているかもしれませんが、よろしくお願いします。


10299 : 受講生さんのコメント (2018-08-02 05:12:18)

小川さん
お世話になります。
朝の体操の問題で、コード中に「.Value」を入れなくても結果は同じでした。試しに左辺だけ入れてみても動きました。先日のworksheets とsheets ではありませんが、入れる入れないで、本質的な違いがどこかで生じているのでしょうか。
もしかすると、この件に関しても今までの講義で出てきているかもしれませんが、よろしくお願いします。


8996 : 浦山大さんのコメント (2017-10-05 00:36:54)

わあ…
自分で書ききれたので2倍速で拝見しました。
最後5分位の、
※if文、Select Case文の「同じところは極力減らす」考え方
※With文の配置場所
は、思いつかなかったです!
得るものがとっても大きかったです、ありがとうございます!
参考に致します!


7282 : 小川慶一の回答 (2016-11-15 12:13:57)

多和田 真也 さん:

>今のところ、仕事で使うときは私もRGBで作成することが多いです。

そうなんですね。

僕は基本 .colorindex です。
理由は、前回も書いたとおり、以下です。

> 代表的な(自分がよく使う) .ColorIndex の数値はたくさんマクロを書いているうちになんとなく覚えてしまうので、存外不便は感じない。いざとなったら前記サンプルコード1のようなものを作って自分で調査すればよい。

実務では時間が惜しくて色調整とかしていなので。


7279 : 多和田 真也さんのコメント (2016-11-15 10:03:54)

小川先生、返事が遅れてすみません。ありがとうございました。

今のところ、仕事で使うときは私もRGBで作成することが多いです。

私は、職場ではExcel2007、自分のパソコンではExcel2016を使っているのですが、双方で、
任意のセルで右クリック>セルの書式設定>塗りつぶし>その他の色ボタンをクリック
で、RGBでの色設定を確認できるので。




小川慶一 さん:

>多和田 真也 さん:
>
>多和田 真也 さん:
>
>いえいえ。
>エクセルのバージョン2003までと2007以降では、自動記録でできあがるコードの内容に違いがあります。
>本当はそのことについてきちんと解説するべきなのかもしれません。
>
>以下、とりいそぎ。
>
>.ColorIndex と .Color の違いは、以下のとおりです。
>
>.ColorIndex :
>予め用意された色のうちからどの色を使うか指定している。
>
>.Color :
>色を赤緑青の光の三原色のそれぞれをどのくらい明るくするか?を直接指定している
>
>- - -
>
>サンプルコード1: 以下では、 .ColorIndex何番が何色かを調べます。何番まであるかを知りたいので、あえて、実行時エラーで処理が中断するまで調査を継続するように書いてみました。
>
>

Sub DotColorIndexSample()
>    Dim c As Long
>    Do
>        Range("A" & c + 1).Interior.ColorIndex = c
>        Range("B" & c + 1).Value = c
>        c = c + 1
>    Loop
>End Sub

>
>- - -
>
>.Color での発色指定は以下の数値によって行います。
>
>赤の発色: 0-255 の 256段階 * 256 ^ 0
>緑の発色: 0-255 の 256段階 * 256 ^ 1
>青の発色: 0-255 の 256段階 * 256 ^ 2
>
>サンプルコード2: 以下では、各種の色を .Color で指定してみました。
>
>
Sub DotColorSample()
>    Dim Red As Long
>    Dim Gre As Long
>    Dim Blu As Long
>    Dim num As Long
>    
>    '黒
>    Red = 0
>    Gre = 0
>    Blu = 0
>    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
>    Range("D1").Value = num
>    Range("E1").Interior.Color = num
>
>    '赤
>    Red = 255
>    Gre = 0
>    Blu = 0
>    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
>    Range("D2").Value = num
>    Range("E2").Interior.Color = num
>
>    '緑
>    Red = 0
>    Gre = 255
>    Blu = 0
>    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
>    Range("D3").Value = num
>    Range("E3").Interior.Color = num
>
>    '青
>    Red = 0
>    Gre = 0
>    Blu = 255
>    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
>    Range("D4").Value = num
>    Range("E4").Interior.Color = num
>
>    '灰
>    Red = 128
>    Gre = 128
>    Blu = 128
>    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
>    Range("D5").Value = num
>    Range("E5").Interior.Color = num
>
>    '白
>    Red = 255
>    Gre = 255
>    Blu = 255
>    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
>    Range("D6").Value = num
>    Range("E6").Interior.Color = num
>End Sub

>
>もっとも、これでは直感的に色を指定できなくて面倒なので、きちんと色指定したいときにはRGB関数を使うのが一般的です。
>
>サンプルコード3: 以下では、各種の色を .Color で指定してみました。さらに、RGB関数を使用しています。
>
>
Sub RGBSample()
>    '黒
>    Range("G1").Value = RGB(0, 0, 0)
>    Range("H1").Interior.Color = RGB(0, 0, 0)
>
>    '赤
>    Range("G2").Value = RGB(255, 0, 0)
>    Range("H2").Interior.Color = RGB(255, 0, 0)
>
>    '緑
>    Range("G3").Value = RGB(0, 255, 0)
>    Range("H3").Interior.Color = RGB(0, 255, 0)
>
>    '青
>    Range("G4").Value = RGB(0, 0, 255)
>    Range("H4").Interior.Color = RGB(0, 0, 255)
>
>    '灰
>    Range("G5").Value = RGB(128, 128, 128)
>    Range("H5").Interior.Color = RGB(128, 128, 128)
>
>    '白
>    Range("G6").Value = RGB(255, 255, 255)
>    Range("H6").Interior.Color = RGB(255, 255, 255)
>End Sub

>
>ということで、まずはここまでいかがでしょう?
>
>で、最後に、
>
>>できれば、動画の中で扱われているように、.Interior.ColorIndex = 8
>>のような、1桁とか2桁の数字で色番号が表記されるように自動記録の設定を変更したいと思っているのですが、その方法が分かりません。
>
>に対する僕の見解を述べておきます。以下のとおりに考えています。
>
>[1] 代表的な(自分がよく使う) .ColorIndex の数値はたくさんマクロを書いているうちになんとなく覚えてしまうので、存外不便は感じない。いざとなったら前記サンプルコード1のようなものを作って自分で調査すればよい。
>[2] .ColorIndex だけで 57色あるので、これだけあれば実務で不便を感じることはないが、 .ColorIndex で自分の好みの色を見つけられなかったら、 .Color を使って色を作ればよい。
>


7241 : 小川慶一の回答 (2016-10-29 22:07:51)

多和田 真也 さん:

多和田 真也 さん:

いえいえ。
エクセルのバージョン2003までと2007以降では、自動記録でできあがるコードの内容に違いがあります。
本当はそのことについてきちんと解説するべきなのかもしれません。

以下、とりいそぎ。

.ColorIndex と .Color の違いは、以下のとおりです。

.ColorIndex :
予め用意された色のうちからどの色を使うか指定している。

.Color :
色を赤緑青の光の三原色のそれぞれをどのくらい明るくするか?を直接指定している

- - -

サンプルコード1: 以下では、 .ColorIndex何番が何色かを調べます。何番まであるかを知りたいので、あえて、実行時エラーで処理が中断するまで調査を継続するように書いてみました。

Sub DotColorIndexSample()
    Dim c As Long
    Do
        Range("A" & c + 1).Interior.ColorIndex = c
        Range("B" & c + 1).Value = c
        c = c + 1
    Loop
End Sub


- - -

.Color での発色指定は以下の数値によって行います。

赤の発色: 0-255 の 256段階 * 256 ^ 0
緑の発色: 0-255 の 256段階 * 256 ^ 1
青の発色: 0-255 の 256段階 * 256 ^ 2

サンプルコード2: 以下では、各種の色を .Color で指定してみました。

Sub DotColorSample()
    Dim Red As Long
    Dim Gre As Long
    Dim Blu As Long
    Dim num As Long
    
    '黒
    Red = 0
    Gre = 0
    Blu = 0
    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
    Range("D1").Value = num
    Range("E1").Interior.Color = num

    '赤
    Red = 255
    Gre = 0
    Blu = 0
    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
    Range("D2").Value = num
    Range("E2").Interior.Color = num

    '緑
    Red = 0
    Gre = 255
    Blu = 0
    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
    Range("D3").Value = num
    Range("E3").Interior.Color = num

    '青
    Red = 0
    Gre = 0
    Blu = 255
    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
    Range("D4").Value = num
    Range("E4").Interior.Color = num

    '灰
    Red = 128
    Gre = 128
    Blu = 128
    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
    Range("D5").Value = num
    Range("E5").Interior.Color = num

    '白
    Red = 255
    Gre = 255
    Blu = 255
    num = Red * 256 ^ 0 + Gre * 256 ^ 1 + Blu * 256 ^ 2
    Range("D6").Value = num
    Range("E6").Interior.Color = num
End Sub


もっとも、これでは直感的に色を指定できなくて面倒なので、きちんと色指定したいときにはRGB関数を使うのが一般的です。

サンプルコード3: 以下では、各種の色を .Color で指定してみました。さらに、RGB関数を使用しています。

Sub RGBSample()
    '黒
    Range("G1").Value = RGB(0, 0, 0)
    Range("H1").Interior.Color = RGB(0, 0, 0)

    '赤
    Range("G2").Value = RGB(255, 0, 0)
    Range("H2").Interior.Color = RGB(255, 0, 0)

    '緑
    Range("G3").Value = RGB(0, 255, 0)
    Range("H3").Interior.Color = RGB(0, 255, 0)

    '青
    Range("G4").Value = RGB(0, 0, 255)
    Range("H4").Interior.Color = RGB(0, 0, 255)

    '灰
    Range("G5").Value = RGB(128, 128, 128)
    Range("H5").Interior.Color = RGB(128, 128, 128)

    '白
    Range("G6").Value = RGB(255, 255, 255)
    Range("H6").Interior.Color = RGB(255, 255, 255)
End Sub


ということで、まずはここまでいかがでしょう?

で、最後に、

>できれば、動画の中で扱われているように、.Interior.ColorIndex = 8
>のような、1桁とか2桁の数字で色番号が表記されるように自動記録の設定を変更したいと思っているのですが、その方法が分かりません。

に対する僕の見解を述べておきます。以下のとおりに考えています。

[1] 代表的な(自分がよく使う) .ColorIndex の数値はたくさんマクロを書いているうちになんとなく覚えてしまうので、存外不便は感じない。いざとなったら前記サンプルコード1のようなものを作って自分で調査すればよい。
[2] .ColorIndex だけで 57色あるので、これだけあれば実務で不便を感じることはないが、 .ColorIndex で自分の好みの色を見つけられなかったら、 .Color を使って色を作ればよい。


7239 : 多和田 真也さんのコメント (2016-10-29 18:20:18)

小川先生

もしかしたら、今更な質問なのかもしれませんが、教えてください。

動画や模範解答の中では、自動記録で色を確認する際に、2桁の数字で色が指定されているようなのですが、私の利用している環境では

まったく違う指定になります。5桁の数字で表示されたり、もしくは全く違う表現で表示されたりします。

例えば、今回のミニセミナーNo.10の例では、水色の背景にする操作を自動記録すると、こんな感じで記録されます。

Sub Macro1()

With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0.599993896298105
.PatternTintAndShade = 0
End With
End Sub

できれば、動画の中で扱われているように、.Interior.ColorIndex = 8

のような、1桁とか2桁の数字で色番号が表記されるように自動記録の設定を変更したいと思っているのですが、その方法が分かりません。

どうしたらよいのでしょうか?


6648 : 受講生さんのコメント (2016-05-20 08:02:24)

小川先生

ありがとうございます。
サンプルを動かしてみました!

シリアル値の存在は知っていたのですが、
小数部分で時刻を表していることは知りませんでした。

日付と時間・・・
ずっと別物だと勘違いしていました。
切っても切り離せないものなのに・・・(;・∀・)


>受講生 さん:
>
>日付の正体は小数です。
>整数部分が起算日(1899/12/30)からの経過日数、小数部分は時刻です。
>
>↓こんなサンプル動かしてみると、学びが深まるかも。
>
>

Sub hoge1()
>    Dim d As Date
>    
>    d = 0
>    Debug.Print "sample1"
>    Debug.Print "年 " & Year(d)
>    Debug.Print "月 " & Month(d)
>    Debug.Print "日 " & Day(d)
>    Debug.Print "時 " & Hour(d)
>    Debug.Print "分 " & Minute(d)
>    Debug.Print "秒 " & Second(d)
>    Debug.Print "小数で表現すると: " & CDbl(d)
>    Debug.Print ""
>    
>    d = #1/3/1900 6:00:00 PM#
>
>    Debug.Print "sample2"
>    Debug.Print "年 " & Year(d)
>    Debug.Print "月 " & Month(d)
>    Debug.Print "日 " & Day(d)
>    Debug.Print "時 " & Hour(d)
>    Debug.Print "分 " & Minute(d)
>    Debug.Print "秒 " & Second(d)
>    Debug.Print "小数で表現すると: " & CDbl(d)
>    Debug.Print ""
>    
>    d = #5/19/2016 1:40:23 PM#
>
>    Debug.Print "sample3"
>    Debug.Print "年 " & Year(d)
>    Debug.Print "月 " & Month(d)
>    Debug.Print "日 " & Day(d)
>    Debug.Print "時 " & Hour(d)
>    Debug.Print "分 " & Minute(d)
>    Debug.Print "秒 " & Second(d)
>    Debug.Print "小数で表現すると: " & CDbl(d)
>    Debug.Print ""
>
>    d = Now
>
>    Debug.Print "sample4"
>    Debug.Print "年 " & Year(d)
>    Debug.Print "月 " & Month(d)
>    Debug.Print "日 " & Day(d)
>    Debug.Print "時 " & Hour(d)
>    Debug.Print "分 " & Minute(d)
>    Debug.Print "秒 " & Second(d)
>    Debug.Print "小数で表現すると: " & CDbl(d)
>    Debug.Print ""
>End Sub
>
>Sub hoge2()
>    Dim d As Date
>    d = 3.25 '3.25は、起算日から数えて3日後の朝6:00です。
>
>    Debug.Print "sample5"
>    Debug.Print "年 " & Year(d)
>    Debug.Print "月 " & Month(d)
>    Debug.Print "日 " & Day(d)
>    Debug.Print "時 " & Hour(d)
>    Debug.Print "分 " & Minute(d)
>    Debug.Print "秒 " & Second(d)
>    Debug.Print "小数で表現すると: " & CDbl(d)
>    Debug.Print ""
>End Sub

>
>
>>今回は盛りだくさんでした☆
>>
>>dateadd関数を知らなかったので、試しにdate+3と書いてみたらちゃんと動きました。
>>こびとちゃんにとってはdateaddの方が親切でしょうか?
>>
>>selectcaseの方がすっきり見えるので、たくさん練習してスラスラ書けるように慣れていこうと思います。
>


6644 : 小川慶一の回答 (2016-05-19 13:48:00)

受講生 さん:

日付の正体は小数です。
整数部分が起算日(1899/12/30)からの経過日数、小数部分は時刻です。

↓こんなサンプル動かしてみると、学びが深まるかも。

Sub hoge1()
    Dim d As Date
    
    d = 0
    Debug.Print "sample1"
    Debug.Print "年 " & Year(d)
    Debug.Print "月 " & Month(d)
    Debug.Print "日 " & Day(d)
    Debug.Print "時 " & Hour(d)
    Debug.Print "分 " & Minute(d)
    Debug.Print "秒 " & Second(d)
    Debug.Print "小数で表現すると: " & CDbl(d)
    Debug.Print ""
    
    d = #1/3/1900 6:00:00 PM#

    Debug.Print "sample2"
    Debug.Print "年 " & Year(d)
    Debug.Print "月 " & Month(d)
    Debug.Print "日 " & Day(d)
    Debug.Print "時 " & Hour(d)
    Debug.Print "分 " & Minute(d)
    Debug.Print "秒 " & Second(d)
    Debug.Print "小数で表現すると: " & CDbl(d)
    Debug.Print ""
    
    d = #5/19/2016 1:40:23 PM#

    Debug.Print "sample3"
    Debug.Print "年 " & Year(d)
    Debug.Print "月 " & Month(d)
    Debug.Print "日 " & Day(d)
    Debug.Print "時 " & Hour(d)
    Debug.Print "分 " & Minute(d)
    Debug.Print "秒 " & Second(d)
    Debug.Print "小数で表現すると: " & CDbl(d)
    Debug.Print ""

    d = Now

    Debug.Print "sample4"
    Debug.Print "年 " & Year(d)
    Debug.Print "月 " & Month(d)
    Debug.Print "日 " & Day(d)
    Debug.Print "時 " & Hour(d)
    Debug.Print "分 " & Minute(d)
    Debug.Print "秒 " & Second(d)
    Debug.Print "小数で表現すると: " & CDbl(d)
    Debug.Print ""
End Sub

Sub hoge2()
    Dim d As Date
    d = 3.25 '3.25は、起算日から数えて3日後の朝6:00です。

    Debug.Print "sample5"
    Debug.Print "年 " & Year(d)
    Debug.Print "月 " & Month(d)
    Debug.Print "日 " & Day(d)
    Debug.Print "時 " & Hour(d)
    Debug.Print "分 " & Minute(d)
    Debug.Print "秒 " & Second(d)
    Debug.Print "小数で表現すると: " & CDbl(d)
    Debug.Print ""
End Sub



>今回は盛りだくさんでした☆
>
>dateadd関数を知らなかったので、試しにdate+3と書いてみたらちゃんと動きました。
>こびとちゃんにとってはdateaddの方が親切でしょうか?
>
>selectcaseの方がすっきり見えるので、たくさん練習してスラスラ書けるように慣れていこうと思います。


6636 : 受講生さんのコメント (2016-05-16 14:01:48)

今回は盛りだくさんでした☆

dateadd関数を知らなかったので、試しにdate+3と書いてみたらちゃんと動きました。
こびとちゃんにとってはdateaddの方が親切でしょうか?

selectcaseの方がすっきり見えるので、たくさん練習してスラスラ書けるように慣れていこうと思います。


4333 : 山田 将之さんのコメント (2015-05-21 06:10:22)

わかりやすかったです。ありがとうございます。


3987 : 小川慶一の回答 (2015-03-18 16:18:37)

ゲスト さん:

こういうのは、経験積んでいくと、一瞬で最適なやり方見えてくるようになりますよ!

>replace関数のところ、文字列すべてを置き換えるコードを書いていましたが、"/"を"-"に変えるだけでよかったんですね。気づけなかったです。勉強になりました。
>

 Sub mondai4()
>    Worksheets("Sheet3").Range("A4").Value = Replace(Worksheets("Sheet3").Range("A3").Value, "2010-08-31", "2010/08/31")
>End Sub
>


3978 : 宮下 郁子さんのコメント (2015-03-17 11:09:51)

replace関数のところ、文字列すべてを置き換えるコードを書いていましたが、"/"を"-"に変えるだけでよかったんですね。気づけなかったです。勉強になりました。

 Sub mondai4()
    Worksheets("Sheet3").Range("A4").Value = Replace(Worksheets("Sheet3").Range("A3").Value, "2010-08-31", "2010/08/31")
End Sub


2619 : 小川慶一の回答 (2014-10-02 08:33:45)

匿名 さん:

if文、for next構文をきちんと使いこなせるようになった段階で見るとインパクトでかいですよね。

>僕も個人的には、Else ifが続くよりは、Select Caseの方が可読性が優れているような気がして好きです。

またに。
可読性、メンテナンス性、両方の意味でそうです。

お渡ししたテキストも改めて読んでみてください。
また理解を整理できるかと思います。

ひきつづきお楽しみを☆


2615 : 受講生さんのコメント (2014-10-02 07:13:56)

Select CaseとFor Each構文、両方使いこなせれば、間違いなく幅は広がりますね。
僕も個人的には、Else ifが続くよりは、Select Caseの方が可読性が優れているような気がして好きです。


1238 : 小川慶一の回答 (2014-05-15 13:34:22)

荏隈 直樹 さん:

いいですね。
自分で書いてみてからだと、「こんな関数もあったのか」という学びがあったときに記憶の定着が違いますよね。

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


1234 : 荏隈 直樹さんのコメント (2014-05-14 23:14:50)

今日は仕事後で疲れたので頭の体操だけ

Sub taisou10_1()
    Worksheets("Sheet3").Range("A1").Value = Date + 3
End Sub

Sub taisou10_2()
    Worksheets("Sheet3").Range("A2").NumberFormatLocal = "@"
    Worksheets("Sheet3").Range("A2") = "001"
End Sub

Sub taisou10_3()
    Worksheets("Sheet3").Range("A3").NumberFormatLocal = "@"
    Worksheets("Sheet3").Range("A3") = "2010-08-31"
End Sub

Sub taisou10_4()
    Dim RA3 As String
    RA3 = Worksheets("Sheet3").Range("A3").Value
    Worksheets("Sheet3").Range("A4").Value = Replace(RA3, "-", "/")
End Sub



[1]は、dateadd関数なんてものがあったのですね。
[4]のreplace関数は、いただいたテキストを元に見よう見まねで書いてみました。


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

やまださん:

おお、早いですね。これでちゃんと動いたなら、OKです。

> 「for eachならではの利点」や「for eachでないとだめ!って言う場面」が見えてないからだと思うのですが。

[1] 「コレクション」の概念についてしっかり復習
[2] 「for eachはコレクションの個々の要素に対して順番に処理をする」という概念についてしっかり復習
[3] 量をこなす(経験するとしっくりきます。量質転化)

という感じですかね。

ともあれ、原理的には、 for each 、 for next、 do loop のどれも、別のくり返し構文で(多少の力業は必要になるかもしれませんが)代用が利きます。
if文、 select case 文もそうです。

それぞれでひとつ使えれば、それでいいじゃないですか、という気も ヾ(´ー`)ノ


700 : やまださんのコメント (2013-08-26 00:01:00)

小川先生

ありがとうございます。offsetで書いてみました。これでいけたのではないかな・・・と思っています。

Sub test2_3()

Dim tate As Long
Dim yoko As Long

For tate = 1 To 28 '縦はいける
For yoko = 0 To 7 '横もいけました!

If Range("c2").Offset(tate, yoko).Value > 100 Then

Range("c2").Offset(tate, yoko).Interior.ColorIndex = 8

Range("c2").Offset(tate, yoko).Font.ColorIndex = 2

Range("c2").Offset(tate, yoko).Font.Bold = True

  End If
Next
Next

End Sub

※まだなんとなく、for nextのほうが好きです。。「for eachならではの利点」や「for eachでないとだめ!って言う場面」が見えてないからだと思うのですが。。。for each のほうがfor nextより短く書ける気がするから書けるようにはなりたいんですが、、、


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

やまださん:

offset使ってみて。


698 : やまださんのコメント (2013-08-24 00:00:00)

2を題材にして質問があります。
こういった問題をfor nextで書くことは出来ないでしょうか。
試しに以下のようなのを書いてみたのですが、挫折しました。。

Sub test2_2()

Dim tate As Long
Dim yoko As String

For tate = 2 To 29 '縦はいける
For yoko = c To I '横はいけない。いい方法はないでしょうか?


If Range(yoko & tate).Value > 100 Then

Range(yoko & tate).Interior.ColorIndex = 8

Range(yoko & tate).Font.ColorIndex = 2

    Range(yoko & tate).Font.Bold=True
End If
Next
Next

End Sub


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

> 前回の復讐も兼ねて、基礎編のテキストの48ページのdate関数、now関数のサンプルコードを実行してみました。

いいですね。より深い学びの機会にするよう心がけていると、同じコンテンツから得られるものも多くなりますよね。

> 2007でカラーを自動記録する際、細か過ぎて、逆にラベンダー色を探せなかったです。

ソース貼りつけていただければ解説しますよ。遠慮無く ヾ(´ー`)ノ


696 : 豊島 久博さんのコメント (2013-05-06 00:00:00)

頭の体操をする際、前回の復讐も兼ねて、基礎編のテキストの48ページのdate関数、now関数のサンプルコードを実行してみました。

 2007でカラーを自動記録する際、細か過ぎて、逆にラベンダー色を探せなかったです。


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

大椛さん:

With ... End With の中では、 . ではじまったら With の後で指定されたオブジェクトのメンバーを指します。

単純に、それ以上でもそれ以下でもないです。
それが分かれば、案外すっきりとらえられるかも。


694 : 大椛輝志さんのコメント (2013-02-02 00:00:00)

Select Case構文が頭によぎりながら、まずは確実にIf構文で作りました。Select Caseはしっかり復習しときます。
If構文が、Withの要素になってしまうところは、びっくりしました!


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

山根さん:

> Select CaseとIf文はの使い分けは好みでいいのでしょうか。

↑こちらは、まずはテキスト参照。


> 今回の動画で驚いたのはSlectionを.に置換えていたところです。

With ... End With を使うときの基本パターンです。


> それとIf文をSelect Caseに書き換える手際よさは目を見張るものがあります。

というか、手際がよいから、こういう手術もやる気がするわけです。

セミナー受ける前の受講生の多くが、
手際がいいことの本当の価値を知りません。
手元の早さと正確さが、豊富な練習を可能にし、思考をクリアにするわけです。

高度なプログラムを書けるかどうかの分かれ目は、実はそこだけです。


692 : 山根信行さんのコメント (2013-01-31 00:00:00)

今回の動画で驚いたのはSlectionを.に置換えていたところです。
それとIf文をSelect Caseに書き換える手際よさは目を見張るものがあります。

Select CaseとIf文はの使い分けは好みでいいのでしょうか。


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

佐藤さん:

おはようございます。いつも早いですね!

「覚えやすい度 × 覚えたときのインパクト」の値の大きい順に書くと

Select Case > For Each >>> With ~

かな。
Withは、書けなくても当面困りません。まずは、見てもびっくりしないようになれれば。


690 : 佐藤 尚子さんのコメント (2013-01-08 00:00:00)

For Each 構文、select case 構文、With~は
まだちゃんと理解できていないので、実務であまり使えていないのですが
使えるとより便利になるはず! と今回改めて感じました。
使いこなせるように練習します。


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

> 小さい部品を作って、ハナコを使って、機能を拡張していくステップは思考の基本パターンですね。頭の中で次の操作を予想して見ていると、プロとの思考の差異がわかって、よかってです。
> また、できたコードを鮮麗さを求めていきたいと思います。

[1] 基本パターンを抜き出して
[2] その理解を軸にして、予測を立てつつ観察する
[3] 自分動きにどう適用するかという新たな問いかけを持つ

まさに、理数科目を学ぶときの理想の姿。
他の多くの受講生に伝えたい言葉です。心当たりおありなあなた、ぜひ参考にしてください!


688 : 受講生さんのコメント (2012-11-01 00:00:00)

小さい部品を作って、ハナコを使って、機能を拡張していくステップは思考の基本パターンですね。頭の中で次の操作を予想して見ていると、プロとの思考の差異がわかって、よかってです。
また、できたコードを鮮麗さを求めていきたいと思います。


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

本講座の動画一覧

  1. 【動画1】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.01
    【動画1】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.01 未習得
  2. 【動画2】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.02
    【動画2】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.02 未習得
  3. 【動画3】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.03
    【動画3】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.03 未習得
  4. 【動画4】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.04
    【動画4】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.04 未習得
  5. 【動画5】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.05
    【動画5】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.05 未習得
  6. 【動画6】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.06
    【動画6】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.06 未習得
  7. 【動画7】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.07
    【動画7】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.07 未習得
  8. 【動画8】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.08
    【動画8】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.08 未習得
  9. 【動画9】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.09
    【動画9】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.09 未習得
  10. 【動画10】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.10
    【動画10】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.10 未習得
  11. 【動画11】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.11
    【動画11】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.11 未習得
  12. 【動画12】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.12
    【動画12】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.12 未習得
  13. 【動画13】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.13
    【動画13】 エクセルマクロ・VBA発展編1フォローアップミニセミナーNo.13 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ