配列操作の便利関数、オプション、その他

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

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

解説

配列を操作する際に便利な関数。Eraseステートメント、Spilit関数、Jpin関数について説明しています。

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

11645 : 小川慶一の回答 (2019-10-30 19:06:48)

受講生 さん:

よろしくお願いします。
演習をやってみたうえで動画解説を観ていただけたのであれば、かなり理解が深まるのでは?と思います。



> 小川慶一さん:
>
> 返信ありがとうございます。
> 下記の講座があることを見逃していました。
> まずはこの講座を見ながら答え合わせをしてみたいと思います。
>
> 視聴した上で、わからないことが出てきましたら改めて質問させていただきます。
>
> > ゲストさん:
> >
> > おはようございます。
> >
> > 「エクセルマクロ・VBA発展編2演習と回答」という講座があります。
> > https://online.pc5bai.com/package/index/85
> >
> > まずは、この講座と比べてみてください。
> > そのうえで解決しない件がありましたら、質問等受けつけます。
> >
> > よろしく、お願いいたします。
> >
> >
> > > 小川先生
> > >
> > > いつもお世話になっております。
> > > 発展編2のenshu1.xlsについての添削・質問はこちらで大丈夫でしょうか?
> >


11644 : 受講生さんのコメント (2019-10-29 00:16:36)

小川慶一さん:

返信ありがとうございます。
下記の講座があることを見逃していました。
まずはこの講座を見ながら答え合わせをしてみたいと思います。

視聴した上で、わからないことが出てきましたら改めて質問させていただきます。

> ゲストさん:
>
> おはようございます。
>
> 「エクセルマクロ・VBA発展編2演習と回答」という講座があります。
> https://online.pc5bai.com/package/index/85
>
> まずは、この講座と比べてみてください。
> そのうえで解決しない件がありましたら、質問等受けつけます。
>
> よろしく、お願いいたします。
>
>
> > 小川先生
> >
> > いつもお世話になっております。
> > 発展編2のenshu1.xlsについての添削・質問はこちらで大丈夫でしょうか?
>


11642 : 小川慶一の回答 (2019-10-28 10:13:45)

ゲストさん:

おはようございます。

「エクセルマクロ・VBA発展編2演習と回答」という講座があります。
https://online.pc5bai.com/package/index/85

まずは、この講座と比べてみてください。
そのうえで解決しない件がありましたら、質問等受けつけます。

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


> 小川先生
>
> いつもお世話になっております。
> 発展編2のenshu1.xlsについての添削・質問はこちらで大丈夫でしょうか?


11641 : ゲストさんのコメント (2019-10-26 17:38:26)

小川先生

いつもお世話になっております。
発展編2のenshu1.xlsについての添削・質問はこちらで大丈夫でしょうか?


10868 : ふんわりさんのコメント (2018-12-29 18:28:46)

なるほど、確かに呼び出してるのは分かります、大変勉強になりました。
ありがとうございます!


10865 : 小川慶一の回答 (2018-12-29 15:54:33)

ふんわりさん:

> すみません、配列の内容とは少しそれてしまうかもしれませんが、

ぜんぜん、よいですよ (^^

他言語では、プロシージャの呼び出しでは Call のような特別なキーワードを必要としないのが一般的です。

>ただ単に、どちらでも可能という事でしょうか?

僕は Call をつけない派です。
Call がなくて不便は感じません。 Call がなくても、見た瞬間、「他プロシージャを呼び出している」と分かりますし。


10859 : ふんわりさんのコメント (2018-12-28 21:21:18)

すみません、配列の内容とは少しそれてしまうかもしれませんが、
Chap02-61のコードですが、「Call」を付けずに他のサブプロシージャ―「Sub ExeKensaku()」を呼び出す事が出来るのは画期的でした。
それならば、「Call」を付ける時とそうでない時の違い、使い分けというのはあるのでしょうか?ただ単に、どちらでも可能という事でしょうか?


7894 : 小川慶一の回答 (2017-04-01 10:44:45)

平吹 敦史 さん:

よかったです。

行き詰まることがあれば、また、いつでもどうぞ☆


7889 : 平吹 敦史さんのコメント (2017-03-31 18:43:18)

小川慶一 さん:

なるほどです!
仕組みを勘違いしていました。

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


>平吹 敦史 さん:
>
>小川慶一 さん:
>
>これで、どうでしょうか。この図で、理解の整理、進みますかね。
>https://www.dropbox.com/s/xtmuutquwb9x4gu/redimpreserveimage.JPG?dl=0
>


7888 : 小川慶一の回答 (2017-03-31 17:25:28)

平吹 敦史 さん:

小川慶一 さん:

これで、どうでしょうか。この図で、理解の整理、進みますかね。
https://www.dropbox.com/s/xtmuutquwb9x4gu/redimpreserveimage.JPG?dl=0


7887 : 平吹 敦史さんのコメント (2017-03-31 17:09:03)

小川慶一 さん:

お世話様です。
もう少し突っ込んだ質問です。

前回投入した値の数が7つ。(事例でいうと世田谷区)
stAry(0)
stAry(1)
stAry(2)
stAry(3)
stAry(4)
stAry(5)
stAry(6)

次に投入した値が3つ。(目黒区)
stAry(0)・・・上書きされる
stAry(1)・・・上書きされる?
stAry(2)・・・上書きされる?

Erase stAryで初期化しなくとも、世田谷区の下記4つが
残らないのはなぜでしょうか?
stAry(3)
stAry(4)
stAry(5)
stAry(6)

そこの仕組みがどうしても理解できません。
私の頭の理解では、preserveなので、初期化してない限りは、
そのまま残って、書き出されてしまうはずなんですが・・・

なので、ますますEraseの意味がピンとこないのです。

面倒な質問ですいません。

>平吹 敦史 さん:
>
>何もない状態から再スタートするか、上書きするか、
>という違いがありますね。
>
>

ReDim Preserve stAry(cAry) '[1]
>stAry(cAry) = Range("F" & cFm).Value '[2]

>
>で、最初に実行するとき、[1]の段階で、 cAry = 0 です。
>そして、直後の[2]で、stAry(0) に値を格納しています。
>
>ところで、 Erase stAry で配列 stAry を初期化しないと、[1] の直後の段階では、前回投入した値が stAry(0) にまだ残っています。
>
>Erase stAry で配列 stAry を初期化したあとだと、 [1] の直後の段階では、 stAry(0) にまだ何も入っていません。
>
>ここで、「直後に上書きするんだから、値が入っててもいいじゃない」と思うか、「すべてスッキリした状態で再スタートのほうが気持ちいい!」と思うか?の違いがあります。
>
>好みの問題に聞こえるかもしれません。
>しかし、後者のほうがより安全なので、僕は、後者の方法を推したいですね。
>


7886 : 小川慶一の回答 (2017-03-31 14:04:37)

平吹 敦史 さん:

何もない状態から再スタートするか、上書きするか、
という違いがありますね。

ReDim Preserve stAry(cAry) '[1]
stAry(cAry) = Range("F" & cFm).Value '[2]


で、最初に実行するとき、[1]の段階で、 cAry = 0 です。
そして、直後の[2]で、stAry(0) に値を格納しています。

ところで、 Erase stAry で配列 stAry を初期化しないと、[1] の直後の段階では、前回投入した値が stAry(0) にまだ残っています。

Erase stAry で配列 stAry を初期化したあとだと、 [1] の直後の段階では、 stAry(0) にまだ何も入っていません。

ここで、「直後に上書きするんだから、値が入っててもいいじゃない」と思うか、「すべてスッキリした状態で再スタートのほうが気持ちいい!」と思うか?の違いがあります。

好みの問題に聞こえるかもしれません。
しかし、後者のほうがより安全なので、僕は、後者の方法を推したいですね。


7883 : 平吹 敦史さんのコメント (2017-03-31 11:15:42)

お世話様です。

テキストP41、Chap02-61のEraseステートメントの下記例題ですが、
Erase stAryの一文があってもなくても結果は一緒でした。
ステップインで追いかけましたが、いまいちわかりませんでした。

どうも、stAry(cAry)のcAry=0で例えば渋谷区の配列の中身が世田谷区の中身に上書きされた時点で、
それ以降の配列はクリアになるようでした。

なので、あえてErase stAryの一文が必要なのでしょうか?

最初は、前の配列がそのまま残っているので、クリアにしないと不要な配列が書き出されてしまうイメージでした。データ数が一緒なら上書きされて問題ないが、データ数が少ないと不要なデータが書き出されてしまうイメージです。

ですが、結果が違ったので???状態です。

ご教授願います。

Option Explicit
Dim stTgt As String '検索対象の区
Dim stAry() As String '配列
Dim cTo As Long 'データ書き出し先の行
Sub ListUpBukken()
Columns("I:J").ClearContents

cTo = 2

stTgt = "渋谷区"
ExeKensaku

stTgt = "世田谷区"
ExeKensaku

stTgt = "目黒区"
ExeKensaku

stTgt = "港区"
ExeKensaku

stTgt = "品川区"
ExeKensaku

End Sub
Sub ExeKensaku()
Dim cFm As Long '元データ表でForNext構文が使う変数
Dim cMx As Long '元データ表の最大行
Dim cAry As Long '配列のインデックス用

cMx = Range("A65536").End(xlUp).Row

cAry = 0
Erase stAry・・・・・・これをとっても結果は同じなる?
For cFm = 2 To cMx
If Range("C" & cFm).Value = stTgt Then
ReDim Preserve stAry(cAry)
stAry(cAry) = Range("F" & cFm).Value
cAry = cAry + 1
End If
Next

Range("I" & cTo).Value = stTgt & "の物件は " & UBound(stAry) + 1 & "件ヒットしました!"
cTo = cTo + 1

For cFm = LBound(stAry) To UBound(stAry)
Range("J" & cTo).Value = stAry(cFm)
cTo = cTo + 1
Next
cTo = cTo + 1

End Sub


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

本講座の動画一覧

  1. 【動画1】 式と戻り値1-データ型のおさらい
    【動画1】 式と戻り値1-データ型のおさらい 未習得
  2. 【動画2】 式と戻り値2-「式」と「戻り値」
    【動画2】 式と戻り値2-「式」と「戻り値」 未習得
  3. 【動画3】 式と戻り値3-「式」と「戻り値のデータ型」
    【動画3】  式と戻り値3-「式」と「戻り値のデータ型」 未習得
  4. 【動画4】 式と戻り値4-「式」とは(その1)
    【動画4】 式と戻り値4-「式」とは(その1) 未習得
  5. 【動画5】 式と戻り値5-「式」とは(その2)
    【動画5】 式と戻り値5-「式」とは(その2) 未習得
  6. 【動画6】 式と戻り値6-戻り値を返す式、戻り値を返さない式
    【動画6】  式と戻り値6-戻り値を返す式、戻り値を返さない式 未習得
  7. 【動画7】 コレクションとインデックス
    【動画7】  コレクションとインデックス 未習得
  8. 【動画8】 配列
    【動画8】 配列 未習得
  9. 【動画9】 静的配列
    【動画9】 静的配列 未習得
  10. 【動画10】 動的配列1-動的配列の基本
    【動画10】 動的配列1-動的配列の基本 未習得
  11. 【動画11】 動的配列2-Preserveキーワード
    【動画11】 動的配列2-Preserveキーワード 未習得
  12. 【動画12】 動的配列3-演習
    【動画12】 動的配列3-演習 未習得
  13. 【動画13】 多次元配列の基本
    【動画13】 多次元配列の基本 未習得
  14. 【動画14】 多次元動的配列
    【動画14】 多次元動的配列 未習得
  15. 【動画15】 多次元配列のサイズを調べる
    【動画15】 多次元配列のサイズを調べる 未習得
  16. 【動画16】 配列操作の便利関数、オプション、その他
    【動画16】  配列操作の便利関数、オプション、その他 未習得
  17. 【動画17】 連想配列1-Dictionaryオブジェクトの仕様
    【動画17】 連想配列1-Dictionaryオブジェクトの仕様 未習得
  18. 【動画18】 連想配列2-Dictionaryオブジェクトの使用例
    【動画18】 連想配列2-Dictionaryオブジェクトの使用例 未習得
  19. 【動画19】 連想配列3-Microsoft Scripting Runtimeのへの参照設定
    【動画19】 連想配列3-Microsoft Scripting Runtimeのへの参照設定 未習得
  20. 【動画20】 「名前付き引数」と「名前なし引数」
    【動画20】 「名前付き引数」と「名前なし引数」 未習得
  21. 【動画21】 省略可能な引数とその初期値
    【動画21】 省略可能な引数とその初期値 未習得
  22. 【動画22】 引数のデータ型
    【動画22】 引数のデータ型 未習得
  23. 【動画23】 Functionプロシージャ
    【動画23】 Functionプロシージャ 未習得
  24. 【動画24】 引数がひとつまたは複数のFunctionプロシージャ
    【動画24】 引数がひとつまたは複数のFunctionプロシージャ 未習得
  25. 【動画25】 Functionプロシージャ演習中
    【動画25】 Functionプロシージャ演習中 未習得
  26. 【動画26】 引数として配列を受け取るFunctionプロシージャ
    【動画26】 引数として配列を受け取るFunctionプロシージャ 未習得
  27. 【動画27】 引数を受け取らないSubプロシージャと引数つきSubプロシージャ
    【動画27】 引数を受け取らないSubプロシージャと引数つきSubプロシージャ 未習得
  28. 【動画28】 Subプロシージャの基本構造
    【動画28】 Subプロシージャの基本構造 未習得
  29. 【動画29】 モジュールレベル変数との使い分け
    【動画29】 モジュールレベル変数との使い分け 未習得
  30. 【動画30】 補講1-ディクショナリーオブジェクトのさらなる活用
    【動画30】 補講1-ディクショナリーオブジェクトのさらなる活用 未習得
  31. 【動画31】 補講2-ディクショナリーオブジェクトの .Count プロパティ
    【動画31】 補講2-ディクショナリーオブジェクトの .Count プロパティ 未習得
  32. 【動画32】 補講3-連想配列によるオブジェクトへの参照設定 - 新しいキーに設定する場合
    【動画32】 補講3-連想配列によるオブジェクトへの参照設定 - 新しいキーに設定する場合 未習得
  33. 【動画33】 補講4-連想配列によるオブジェクトへの参照設定 - 既存の値を上書きする場合
    【動画33】 補講4-連想配列によるオブジェクトへの参照設定 - 既存の値を上書きする場合 未習得
  34. 【動画34】 補講5-複数セルの集合を作るための便利なメソッド2つ
    【動画34】 補講5-複数セルの集合を作るための便利なメソッド2つ 未習得
  35. 【動画35】 補講6-連想配列演習-取引先ごとに取引金額の合計を算出する
    【動画35】 補講6-連想配列演習-取引先ごとに取引金額の合計を算出する 未習得
  36. 【動画36】 補講7-ウォッチ式の活用
    【動画36】 補講7-ウォッチ式の活用 未習得
  37. 【動画37】 補講8-ウォッチ式で配列の状態を確認する
    【動画37】 補講8-ウォッチ式で配列の状態を確認する 未習得
  38. 【動画38】 補講9-たった1行のコードでセルのデータを配列に投入する
    【動画38】 補講9-たった1行のコードでセルのデータを配列に投入する 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ