- ホーム
- 講座一覧
- 講座「エクセルマクロ・VBA発展編1」
- 教材「発展1講座第4章 - For Each構文 セルのコレクション」
発展1講座第4章 - For Each構文 セルのコレクション
解説
この範囲のセルをひとつずつ取ってきて、調べ、「値が40以上」という条件を満たせば処理を実行していきます。
この教材についての過去の質問・感想
12304 : 小川慶一の回答 (2020-07-24 08:05:50)
さざなみさん:
おはようございます。
良い成果につながるとよいですね。
>未処理のデータだけにしたいみたいです。
それがしたいということが目的なら、前後の処理も含めて改善できるところがありそうですね。
まるっと提案して実装できるレベルになれればすばらしいかと。そういう意味でも、基礎編演習を徹底マスターされるのがよいです。あとは、「DPR」ですね。
https://online.pc5bai.com/package/index/35
12302 : さざなみさんのコメント (2020-07-23 23:42:53)
小川慶一さん:
動画を2つとも見ました。特に上のリンクの動画の内容でうまくいきそうな気がします。明日トライします。
詳しくは言えませんが、一回のデータ出力時に処理済みと未処理のデータが混在してしまうので、わざと前回処理済みのデータとダブらせて削除し、未処理のデータだけにしたいみたいです。
> さざなみさん:
>
> > 担当者によくよく話を聞いたら、重複した行はすべて削除したいそうです。_| ̄|○ 一件は残すかと思ってました。並べ替えたところでどうするか?もう少し考えてみます。
>
> だとしても、やることはたいして変わりませんね。
> にしても、不思議な業務ですね。
12295 : 小川慶一の回答 (2020-07-23 12:46:56)
さざなみさん:
> 担当者によくよく話を聞いたら、重複した行はすべて削除したいそうです。_| ̄|○ 一件は残すかと思ってました。並べ替えたところでどうするか?もう少し考えてみます。
だとしても、やることはたいして変わりませんね。
にしても、不思議な業務ですね。
12293 : さざなみさんのコメント (2020-07-22 19:00:43)
小川慶一さん:
担当者によくよく話を聞いたら、重複した行はすべて削除したいそうです。_| ̄|○ 一件は残すかと思ってました。並べ替えたところでどうするか?もう少し考えてみます。
> 受講生 さん:
>
> トライしてみてどうだったか教えてください。
>
> > 小川慶一さん:
> > ありがとうございます。動画を見てみます。
> > > さざなみさん:
> > >
> > > こんにちは。
> > >
> > > 重複しないリストを作りたいということですね。
> > > 調査対象の列の値で並べ替えられた表を取り扱うとすれば、以下の動画前半で示した流れです。
> > > https://online.pc5bai.com/movie/index/27/158/
> > >
> > > 調査対象の列の値で並べ替えられていない表を取り扱う場合のいちばん簡単なやり方は、並べ替えをして、前述の方法でリストを作り、再び並べ替えて表を元の状態にすることです。
> > > 以下の動画前半で示した流れです。
> > > https://online.pc5bai.com/movie/index/10/24/
> > >
> > >
> > >
12290 : 小川慶一の回答 (2020-07-22 18:00:19)
受講生 さん:
トライしてみてどうだったか教えてください。
> 小川慶一さん:
> ありがとうございます。動画を見てみます。
> > さざなみさん:
> >
> > こんにちは。
> >
> > 重複しないリストを作りたいということですね。
> > 調査対象の列の値で並べ替えられた表を取り扱うとすれば、以下の動画前半で示した流れです。
> > https://online.pc5bai.com/movie/index/27/158/
> >
> > 調査対象の列の値で並べ替えられていない表を取り扱う場合のいちばん簡単なやり方は、並べ替えをして、前述の方法でリストを作り、再び並べ替えて表を元の状態にすることです。
> > 以下の動画前半で示した流れです。
> > https://online.pc5bai.com/movie/index/10/24/
> >
> >
> >
12286 : 受講生さんのコメント (2020-07-20 16:22:03)
小川慶一さん:
ありがとうございます。動画を見てみます。
> さざなみさん:
>
> こんにちは。
>
> 重複しないリストを作りたいということですね。
> 調査対象の列の値で並べ替えられた表を取り扱うとすれば、以下の動画前半で示した流れです。
> https://online.pc5bai.com/movie/index/27/158/
>
> 調査対象の列の値で並べ替えられていない表を取り扱う場合のいちばん簡単なやり方は、並べ替えをして、前述の方法でリストを作り、再び並べ替えて表を元の状態にすることです。
> 以下の動画前半で示した流れです。
> https://online.pc5bai.com/movie/index/10/24/
>
>
>
12285 : 小川慶一の回答 (2020-07-20 12:50:52)
さざなみさん:
こんにちは。
重複しないリストを作りたいということですね。
調査対象の列の値で並べ替えられた表を取り扱うとすれば、以下の動画前半で示した流れです。
https://online.pc5bai.com/movie/index/27/158/
調査対象の列の値で並べ替えられていない表を取り扱う場合のいちばん簡単なやり方は、並べ替えをして、前述の方法でリストを作り、再び並べ替えて表を元の状態にすることです。
以下の動画前半で示した流れです。
https://online.pc5bai.com/movie/index/10/24/
12284 : さざなみさんのコメント (2020-07-20 07:25:56)
ここでたずねるべきかもわかりませんが。重複しているデータの削除をしたいです。キーとなる列でダブりを探して記号に変換し、それ以外を別シートに移そうと思います。列には10 桁以上の英数があります。一番上のセルと同じ値が次のセルから最後まで検索していくのを考えていますがうまくいきません。Countifも考えましたが。どうしたらいいでしょうか?
11205 : 小川慶一の回答 (2019-02-25 09:48:27)
受講生 さん:
マクロだけ見てもコメントできません。ファイルを送ってください。
公開添削しますので、公開されても構わないよう加工済のものを。
よろしくお願いします。
> こんにちわ。
>
> 行の項目(費用)と列の項目(拠点)がクロスするセルを累計シートに転記し12か月分集計したいのですが、複数シートをfor each 〜nextで作ろうとすると、うまくできません。1か月分の転記は下記でできましたので、それを12か月分集計したいです。for each 構文はいわゆる複数シートの串刺しには向いていないのでしょうか。またfor each だと各セルごとに12回繰り返し、また次のセルを12回というようにスピードが遅い気がしますので、1カ月分を集計して、次の1カ月の項目を順に集計するというような法方はありますか。
>
> Sub rui()
> Dim retu
> Dim gyo
> For retu = 6 To 100
> For gyo = 7 To 25
> If Worksheets("rui").Cells(1, retu).Value = Worksheets("PL1月").Cells(1, retu).Value Then
>
> If Worksheets("rui").Cells(gyo, 1).Value = Worksheets("PL1月").Cells(gyo, 1).Value Then
> Worksheets("rui").Cells(gyo, retu).Value = Worksheets("PL1月").Cells(gyo, retu).Value
> End If
> End If
> Next
> Next
>
>
> End Sub
11201 : 受講生さんのコメント (2019-02-23 16:15:17)
こんにちわ。
行の項目(費用)と列の項目(拠点)がクロスするセルを累計シートに転記し12か月分集計したいのですが、複数シートをfor each 〜nextで作ろうとすると、うまくできません。1か月分の転記は下記でできましたので、それを12か月分集計したいです。for each 構文はいわゆる複数シートの串刺しには向いていないのでしょうか。またfor each だと各セルごとに12回繰り返し、また次のセルを12回というようにスピードが遅い気がしますので、1カ月分を集計して、次の1カ月の項目を順に集計するというような法方はありますか。
Sub rui()
Dim retu
Dim gyo
For retu = 6 To 100
For gyo = 7 To 25
If Worksheets("rui").Cells(1, retu).Value = Worksheets("PL1月").Cells(1, retu).Value Then
If Worksheets("rui").Cells(gyo, 1).Value = Worksheets("PL1月").Cells(gyo, 1).Value Then
Worksheets("rui").Cells(gyo, retu).Value = Worksheets("PL1月").Cells(gyo, retu).Value
End If
End If
Next
Next
End Sub
10440 : 小川慶一の回答 (2018-08-17 11:17:01)
受講生 さん:
抽象度が高まるので、慣れるまで少し大変かもしれません。
> For Each構文 セルのコレクション。
> 指定する範囲での処理ができ画期的ですね。
>
> こんなことがしたかったです。
>
> 変数の宣言や、セルをRangeで表すなど
> 今更ですが、復習にもなりました。
10433 : 受講生さんのコメント (2018-08-17 06:48:03)
9109 : 小川慶一の回答 (2017-11-05 19:21:20)
柴田 邦彦さん:
こんばんは。
先に結論を書きます。
For Each構文で個別のオブジェクトへの参照用に用意した変数に対しては、For Each構文がはじまる前に何らかの参照設定を施す必要はありません。
また、ここの2回の柴田さんからの投稿に出てくる用語の使われ方、論理構成を見る限り、第1章、第4章についての理解が不足しているように思います。
まずは、箇条書きにして要点を整理します。以下の[a]-[c]です。
たぶん、これで十分ではないか、と思いますが...。
もし、これを読んで、第1章、第4章を復習しても、まだ不明なことが出てきたようでしたら、どれがどう理解できないか?をお知らせください。
[a] オブジェクト型変数の宣言は以下の構文で行う。
Dim [[変数名]] As [[データ型]]
[b] オブジェクト型変数の初期値は Nothing である。
[c] オブジェクト型変数に対してオブジェクトへの参照設定をする方法は、以下の2つがある。
[c-1] 以下の構文で明示的に設定する
Set [[変数名]] = [[オブジェクト]]
[c-2] 以下のように、For Each構文内で暗示的に指定させる(コレクションの要素ひとつひとつを順に参照する)
For Each メリーちゃん In 牧場の羊の群れ メリーちゃん.連行してくる メリーちゃん.毛を刈る メリーちゃん.処理済の羊達用の柵に放り込む Next
9104 : 柴田 邦彦さんのコメント (2017-11-01 17:54:51)
小川慶一さん:
柴田です。
どう思われますか?との問いに対して回答いたします。
Set rg = Range("C2:H29")の一行を入れても入れなくてもマクロにエラーは出ません。
ただ、発展1講座第1章 - 総称オブジェクト型で習った内容を律儀に実行するのであれば、As Rangeでオブジェクト型の変数宣言をしていますので、変数reにオブジェクトを格納するためには、Setで割り当てる必要があると考えます
> 柴田 邦彦さん:
>
> こんにちは。
>
> > のようにオブジェクト型の変数を宣言する場合は、
> > [[snip]]
> > For Each rg In Range("C2:H29")
> > のようにSetで変数を割り当てなくても良いのでしょうか?
>
> 柴田さんご自身は、どう思われますか?
> そう思われる理由も添えて投稿ください。よろしくお願いいたします。
>
9094 : 小川慶一の回答 (2017-10-29 13:47:05)
柴田 邦彦さん:
こんにちは。
> のようにオブジェクト型の変数を宣言する場合は、
> [[snip]]
> For Each rg In Range("C2:H29")
> のようにSetで変数を割り当てなくても良いのでしょうか?
柴田さんご自身は、どう思われますか?
そう思われる理由も添えて投稿ください。よろしくお願いいたします。
9092 : 柴田 邦彦さんのコメント (2017-10-29 09:20:55)
【動画45】 発展1講座第4章 - For Each構文 セルのコレクション での質問です。
Sub ForEach_Range()
Dim rg As Range
For Each rg In Range("C2:H29")
If rg.Value >= 40 Then
rg.Interior.ColorIndex = 46
rg.Font.ColorIndex = 2
rg.Font.Bold = True
End If
Next
End Sub
のようにオブジェクト型の変数を宣言する場合は、
Sub ForEach_Range()
Dim rg As Range
Set rg = Range("C2:H29")
For Each rg In Range("C2:H29")
のようにSetで変数を割り当てなくても良いのでしょうか?
7254 : 小川慶一の回答 (2016-11-04 11:07:28)
7253 : 受講生さんのコメント (2016-11-03 18:08:26)
小川先生
For Each構文 の動画を拝見し、以下に記載するテストデータで
「F列に合計と記入されている行を削除する」
マクロが作れるか試してみました。
結果は、合計と記入されている行が複数残りました。
以下のようなテストデータの場合、For Each構文を使わずに
For Next構文等でマクロを組んだ方がよいのでしょうか?
よろしくお願いいたします。
【書いたコード】
Sub GoukeiSakujyo() Dim rng As Range Dim rngs As Range Set rngs = Range("F1:F20") For Each rng In rngs Debug.Print rng.Address If rng.Value = "合計" Then Range(rng.Address).EntireRow.Delete End If Next MsgBox "処理が完了しました" End Sub
【テストデータ】
|B列 |C列 |D列 |E列 |F列 |G列 |H列 |
---------------------------------------------------
1 行目 |○ |○ |○ |○ |○ |○ |○ |
---------------------------------------------------
2 行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
3 行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
4 行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
5 行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
6 行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
7 行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
8 行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
9 行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
10 行目|○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
11行目 |○ |○ |○ |○ |○ |○ |○ |
---------------------------------------------------
12行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
13行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
14行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
15行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
16行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
17行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
18行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
19行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
20行目 |○ |○ |○ |○ |合計 |○ |○ |
---------------------------------------------------
by domino
7183 : 小川慶一の回答 (2016-10-08 18:02:49)
7181 : 受講生さんのコメント (2016-10-08 15:11:41)
4305 : 山田 将之さんのコメント (2015-05-18 20:38:58)

本講座の動画一覧
-
【動画1】 発展1講座イントロダクション - 使用するファイル、PDFの確認
-
【動画2】 発展1講座イントロダクション - デバッグ イミディエイトウィンド
-
【動画3】 発展1講座第1章 - オープニング 第1章1
-
【動画4】 発展1講座第1章 - オープニング 第1章2
-
【動画5】 発展1講座第1章 - データの「型」1
-
【動画6】 発展1講座第1章 - データの「型」2
-
【動画7】 発展1講座第1章 - 変数の初期値
-
【動画8】 発展1講座第1章 - ハンガリアン記法
-
【動画9】 発展1講座第1章 - 変数宣言の強制1
-
【動画10】 発展1講座第1章 - 変数宣言の強制2
-
【動画11】 発展1講座第1章 - 総称オブジェクト型
-
【動画12】 発展1講座第1章 - 固有オブジェクト型
-
【動画13】 発展1講座第1章 - バリアント型
-
【動画14】 発展1講座第2章 - オープニング 第2章
-
【動画15】 発展1講座第2章 - コレクション
-
【動画16】 発展1講座第2章 - コレクション(インデックス)
-
【動画17】 発展1講座第2章 - コレクション(インデックス)の具体例
-
【動画18】 発展1講座第2章 - プロパティ 従属要素のオブジェクト
-
【動画19】 発展1講座第2章 - プロパティ 上位のオブジェクト
-
【動画20】 発展1講座第2章 - プロパティ 同レベルのオブジェクト
-
【動画21】 発展1講座第2章 - プロパティ 値として表現できるデータ
-
【動画22】 発展1講座第2章 - プロパティ Offset
-
【動画23】 発展1講座第2章 - プロパティ Offsetの使い方
-
【動画24】 発展1講座第2章 - End プロパティの使い方
-
【動画25】 発展1講座第2章 - メソッド1
-
【動画26】 発展1講座第2章 - メソッド2
-
【動画27】 発展1講座第3章 - マクロの自動記録 イントロダクション
-
【動画28】 発展1講座第3章 - マクロの自動記録 オートフィルタ1
-
【動画29】 発展1講座第3章 - マクロの自動記録 オートフィルタ2
-
【動画30】 発展1講座第3章 - マクロの自動記録 フォントの設定
-
【動画31】 発展1講座第3章 - マクロの自動記録 カラーインデックス
-
【動画32】 発展1講座第3章 - マクロの自動記録 アンダースコア
-
【動画33】 発展1講座第3章 - マクロの自動記録 途中改行1 入力支援機能
-
【動画34】 発展1講座第3章 - マクロの自動記録 途中改行2
-
【動画35】 発展1講座第3章 - マクロの自動記録 並べ替え
-
【動画36】 発展1講座第3章 - マクロの自動記録 個人用マクロブック
-
【動画37】 発展1講座第4章 - 論理演算子 イントロダクション
-
【動画38】 発展1講座第4章 - 論理演算子 解説
-
【動画39】 発展1講座第4章 - 構造文 イントロダクション
-
【動画40】 発展1講座第4章 - For Each構文 イントロダクション1
-
【動画41】 発展1講座第4章 - For Each構文 イントロダクション2
-
【動画42】 発展1講座第4章 - For Each構文 イントロダクション3
-
【動画43】 発展1講座第4章 - For Each構文 演習
-
【動画44】 発展1講座第4章 - For Each構文 伝票作成マクロ解説
-
【動画45】 発展1講座第4章 - For Each構文 セルのコレクション
-
【動画46】 発展1講座第4章 - For Each構文 カンニングペーパー
-
【動画47】 発展1講座第4章 - Do Loop構文 概要
-
【動画48】 発展1講座第4章 - Do Loop構文 マクロの流れ
-
【動画49】 発展1講座第4章 - Do Loop構文 4つのパターン
-
【動画50】 発展1講座第4章 - Do Loop構文 マクロの強制終了
-
【動画51】 発展1講座第4章 - Exit For、Exit Do、Exit Sub
-
【動画52】 発展1講座第4章 - Select Case 概要
-
【動画53】 発展1講座第4章 - Select Case If文との比較
-
【動画54】 発展1講座第4章 - Select Case 比較する条件の順番
-
【動画55】 発展1講座第4章 - Select Case 複数条件の並べ方
-
【動画56】 発展1講座第4章 - Select Case 条件の範囲選択
-
【動画57】 発展1講座第5章 - Sub プロシージャの分割と呼び出し
-
【動画58】 発展1講座第5章 - Sub プロシージャを分割するメリット
-
【動画59】 発展1講座第5章 - ステップアウト、ステップオーバー
-
【動画60】 発展1講座第5章 - モジュールレベル変数
-
【動画61】 発展1講座第5章 - モジュールレベル変数の操作
-
【動画62】 発展1講座第5章 - モジュールレベル変数 変数の重複
-
【動画63】 発展1講座第5章 - モジュールレベル変数 まとめ
-
【動画64】 発展1講座第5章 - モジュールレベル変数 アクセシビリティ設定
コメント紹介
もっと見る