動的配列1-動的配列の基本

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

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

解説

動的配列の基本構造について説明しています

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

11393 : 桜井さんのコメント (2019-05-07 21:20:52)

小川慶一さん:

はい、きっと下記の業務は配列ではないかもしれないのですが、どうにかこれまでやったことのなかった配列VBAを使ってみたいというチャレンジをそれでなしえた、と言ったところになります。今日は会社で「Dictionaryを使ってデータから取引先をListにしSumを出力」を応用することに成功しました!Sampleコーディングで色んなものを用意していただいて助かっております。自分のやりたいものに近いSampleをみつけて、コードのイメージ作りのヒントにさせていただいています。






> Sakuさん:
>
> 成果につながるとよいですね。
>
> ところで、コメント読む限りだと、配列は関係ないんじゃないか?と感じられます。
>
> VLookUP関数を置き換えるというだけでしたら、以下の動画に示した方法で対処できそうです。
>
> ○複数の表の間でのマッチング。VLookUp関数がやっていることをマクロで書くと?
> https://online.pc5bai.com/movie/index/27/153/
>
> これに並べ替えが加わるなら、導入編でも発展編1の伝票作成マクロでも解説したとおり、処理の前に表を並べ替えします。
>
> そこのところ、どうでしょうか。
>
> > しかし、情報のインプットにくらべ仕事へのアウトプットがなんと困難なことか、、まだ腹落ちしていないため質問だにできないものがごろごろありますが、お教えいただいた配列の昇順での並べ替えも今後の作業で試させていただきます。
>
> 「腹落ちしていない」とおっしゃるより前の講座にも、必要な情報ゴロゴロ転がっているものと思いますよ!


11391 : 小川慶一の回答 (2019-05-07 17:31:52)

Sakuさん:

成果につながるとよいですね。

ところで、コメント読む限りだと、配列は関係ないんじゃないか?と感じられます。

VLookUP関数を置き換えるというだけでしたら、以下の動画に示した方法で対処できそうです。

○複数の表の間でのマッチング。VLookUp関数がやっていることをマクロで書くと?
https://online.pc5bai.com/movie/index/27/153/

これに並べ替えが加わるなら、導入編でも発展編1の伝票作成マクロでも解説したとおり、処理の前に表を並べ替えします。

そこのところ、どうでしょうか。

> しかし、情報のインプットにくらべ仕事へのアウトプットがなんと困難なことか、、まだ腹落ちしていないため質問だにできないものがごろごろありますが、お教えいただいた配列の昇順での並べ替えも今後の作業で試させていただきます。

「腹落ちしていない」とおっしゃるより前の講座にも、必要な情報ゴロゴロ転がっているものと思いますよ!


11390 : 桜井さんのコメント (2019-05-06 23:47:03)

小川慶一さん:
田中宏明さん

ご教示ありがとうございます。
会社から持ち帰った予算作成ファイルに習った配列を是が非でも組み込みたく、他の内容で(祝日の名前を入れるコードを応用し、2つの会計システムの勘定科目を隣に付す作業)今朝方マスターし、配列の一歩になりました。配列を使っていない今はVLOOKUPです。使いこなせば式を壊してしまうことがなくなりますね。

しかし、情報のインプットにくらべ仕事へのアウトプットがなんと困難なことか、、まだ腹落ちしていないため質問だにできないものがごろごろありますが、お教えいただいた配列の昇順での並べ替えも今後の作業で試させていただきます。




> Sakuさん、田中 宏明さん:
>
> VBのショボいところのひとつは、配列や配列内の要素を扱うためのメソッドが貧弱なことです。
>
> シート上で並べ替えするにしても、たとえば以下のコードのような感じです。
>

Sub hoge()
>     '[1]事前準備
>     Range("A1").Value = 17
>     Range("A2").Value = 5
>     Range("A3").Value = 3
>     Range("A4").Value = 11
>     Range("A5").Value = 13
>     Range("A6").Value = 2
>     Range("A7").Value = 7
>     
>     '[2]配列に値を格納
>     Dim w As Worksheet
>     Dim a1() As Variant
>     Set w = ActiveSheet
>     a1 = Range("A1").CurrentRegion
>     
>     '[3]並べ替え用シート作成→並べ替え→並べ替え用シート削除
>     Worksheets.Add
>     Range("A1:A" & UBound(a1)).Value = a1
>     Range("A1").CurrentRegion.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlNo
>         
>     a1 = Range("A1").CurrentRegion
>     Application.DisplayAlerts = False
>     ActiveSheet.Delete
>     Application.DisplayAlerts = True
>     
>     '[4]並べ替え済の値を出力
>     w.Activate
>     Range("C1:C" & UBound(a1)).Value = a1
> End Sub

>
> 別言語だと、たとえば、pythonならこんな感じ↓です。
>
nums = [17, 5, 3, 11, 13, 2, 7]
> 
> nums.sort()
> print(nums) # [2, 3, 5, 7, 11, 13, 17]
> 
> nums.sort(reverse=True)
> print(nums) # [17, 13, 11, 7, 5, 3, 2]

>


11389 : 小川慶一の回答 (2019-05-06 11:09:07)

Sakuさん、田中 宏明さん:

VBのショボいところのひとつは、配列や配列内の要素を扱うためのメソッドが貧弱なことです。

シート上で並べ替えするにしても、たとえば以下のコードのような感じです。

Sub hoge()
    '[1]事前準備
    Range("A1").Value = 17
    Range("A2").Value = 5
    Range("A3").Value = 3
    Range("A4").Value = 11
    Range("A5").Value = 13
    Range("A6").Value = 2
    Range("A7").Value = 7
    
    '[2]配列に値を格納
    Dim w As Worksheet
    Dim a1() As Variant
    Set w = ActiveSheet
    a1 = Range("A1").CurrentRegion
    
    '[3]並べ替え用シート作成→並べ替え→並べ替え用シート削除
    Worksheets.Add
    Range("A1:A" & UBound(a1)).Value = a1
    Range("A1").CurrentRegion.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlNo
        
    a1 = Range("A1").CurrentRegion
    Application.DisplayAlerts = False
    ActiveSheet.Delete
    Application.DisplayAlerts = True
    
    '[4]並べ替え済の値を出力
    w.Activate
    Range("C1:C" & UBound(a1)).Value = a1
End Sub


別言語だと、たとえば、pythonならこんな感じ↓です。
nums = [17, 5, 3, 11, 13, 2, 7]

nums.sort()
print(nums) # [2, 3, 5, 7, 11, 13, 17]

nums.sort(reverse=True)
print(nums) # [17, 13, 11, 7, 5, 3, 2]


11387 : 田中 宏明さんのコメント (2019-05-05 10:47:40)

Sakuさん:

こんにちは。
私もこの動画で動的配列を知ったとき、大変感激しました。

配列の並べ替えは、小川先生が回答された「配列の値をエクセルシートに出力し、出力した値を並べ替える」がVBAの正攻法です。

せっかくなので、いろいろ調べてみたら、配列の値が全て数値という条件付でVBAからエクセル自体の関数Smallを呼び出し、配列を昇順に並べ替える方法が見つかりました。

以下にサンプルコードを示しますので、参考にしてみてください。
(配列に数値でないものが含まれる場合、エラーとなります。)

Sub ArryNumberSort1()
    Dim c As Long
    
    'Variant型配列に適当な並び順の数値を入れる
    Dim lArry1() As Variant
    lArry1 = Array(2, 1, 5, 7, 9, 8, 4, 6, 3)
    Debug.Print "元の配列は: " & UBound(lArry1) + 1 & " 件です"
    For c = LBound(lArry1) To UBound(lArry1)
        Debug.Print lArry1(c);
    Next
    Debug.Print vbNewLine
    
    'Long型配列にVariant型配列の数値を昇順で入れ直す
    Dim lArry2() As Long
    For c = LBound(lArry1) To UBound(lArry1)
        ReDim Preserve lArry2(c)
        lArry2(c) = Application.WorksheetFunction.Small(lArry1, c + 1)
    Next
    Debug.Print "昇順配列は: " & UBound(lArry2) + 1 & " 件です"
    For c = LBound(lArry2) To UBound(lArry2)
        Debug.Print lArry2(c);
    Next
    Debug.Print vbNewLine
End Sub


> 配列に格納したデータをシートに記入する際、
> 格納したデータの値の小さいものから順に行いたいというのは可能でしょうか。それとも記入したあとセル範囲内をソートすべきでしょうか。


11385 : 小川慶一の回答 (2019-05-04 23:41:23)

Sakuさん:

こんにちは。

配列は、理解できないうちはハテ何のことやら?という感じですが、使いこなせるようになると強力ですね。

> 配列に格納したデータをシートに記入する際、
> 格納したデータの値の小さいものから順に行いたいというのは可能でしょうか。それとも記入したあとセル範囲内をソートすべきでしょうか。

VBAでは、「配列の中身を並べ替える」といった機能のプログラムは、特に用意されていません。

「配列の値をエクセルシートに出力し、出力した値を並べ替える」というのが、単純かつ高速です。



> 小川先生
>
> GWに巣ごもりでオンライン講座受講、配列をマスターしたら業務の汎用性が高く実務落とし込みに気合を入れております。
>
> 配列に格納したデータをシートに記入する際、
> 格納したデータの値の小さいものから順に行いたいというのは可能でしょうか。それとも記入したあとセル範囲内をソートすべきでしょうか。
>
> 宜しくお願いいたします。


11382 : 桜井さんのコメント (2019-05-02 17:19:36)

小川先生

GWに巣ごもりでオンライン講座受講、配列をマスターしたら業務の汎用性が高く実務落とし込みに気合を入れております。

配列に格納したデータをシートに記入する際、
格納したデータの値の小さいものから順に行いたいというのは可能でしょうか。それとも記入したあとセル範囲内をソートすべきでしょうか。

宜しくお願いいたします。


11099 : 小川慶一の回答 (2019-02-09 23:18:30)

受講生 さん:

> 講座を再度見直して理解を深めようとしています。
>見直すと「あっ!忘れかけてた」と思わせる内容が時々出てきます。
>復習しやすいオンライン講座の魅力だと感じています。

復習、大切ですね。
慣れないことほど、最初の段階では聞き落としている情報が多くあるものです。

> 講義の内容からかなり脱線したことなのですが発展編2動的配列を復習中に感じたことです。
>塾長は受講者の質問を聞くとき集中して聞き取っているように感じます。
>自分は人の話を違う形で受け取ってしまうことや、何を言わんとしているか感じ取って先走って言葉を返してしまうこと多々あります。
>ダメなことだと思っているがやってしまいます…。
>塾長は人の話を聞く際、意識していることはありますか?
> 講座の内容とずれた質問なのでご教授いただければで…。

>>自分は人の話を違う形で受け取ってしまうことや、何を言わんとしているか感じ取って先走って言葉を返してしまうこと多々あります。
>>ダメなことだと思っているがやってしまいます…。

僕も、やってしまいます。なので、いちばん注意したいと思っていることです。それでも形を変え、相手を変え、やってしまうことがあります。
自分にそういう衝動が起きていることに気づくこと、そして、そういう衝動に飲み込まれないような選択をできるようになることが大切かと思います。

以下の講座で言っている、「気づき」と「選択」の力ですね。

○イヤでも身体から力が抜けて仕事が楽になるワークショップ
https://www.exvba.com/winxls_at.php

衝動の奥に潜む理由に気づくことができれば、選択の自由はだいぶ広がります。


11090 : 受講生さんのコメント (2019-02-09 17:34:26)

講座を再度見直して理解を深めようとしています。見直すと「あっ!忘れかけてた」と思わせる内容が時々出てきます。復習しやすいオンライン講座の魅力だと感じています。

講義の内容からかなり脱線したことなのですが発展編2動的配列を復習中に感じたことです。塾長は受講者の質問を聞くとき集中して聞き取っているように感じます。自分は人の話を違う形で受け取ってしまうことや、何を言わんとしているか感じ取って先走って言葉を返してしまうこと多々あります。ダメなことだと思っているがやってしまいます…。塾長は人の話を聞く際、意識していることはありますか?
講座の内容とずれた質問なのでご教授いただければで…。


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行のコードでセルのデータを配列に投入する 未習得

塾長 小川慶一

メニュー

コメント紹介

もっと見る

ページの先頭へ