SlideShare ist ein Scribd-Unternehmen logo
1 von 13
Downloaden Sie, um offline zu lesen
VBAにおける配列の
データ構造と行列
2017-02-04
森下功啓
1
変数
• 変数は値を格納するための箱のようなものです。
• VBAはメモリを節約しつつ高速に計算するために変数に「型」
が有ります。箱には格納できる型が決まっています。
• 箱には名前をつけて区別します。この名前が「変数名」です。
https://www.bestcarton.c
om/item/0093-1.jpg
2.3533 数値を格納した箱
型はDouble型である。
foo = 2.3533
foo
変数名
2
普通の配列
• 配列は、連続した箱である。
• 「Dim a(2) as Double」の様に宣言して使う。
• ↑の丸括弧()の中の数字は最大要素番号である。
• 箱には同じ型の変数しか入れられない。
• 配列の中に格納する一つ一つの値のことを要素と呼ぶ。
• 「a(1)」の様にして要素にアクセスできる。
• アクセスに使うカッコ()内の数字を添え字という。
Dim a(2) as Double
a(0) a(1) a(2)a
変数名
3
ちなみに、これは要素数0の配列である。
Dim a() as Double
4
2次元配列
• 配列は多次元に拡張できる。
• 例えば2次元であれば「 Dim a(2,3) as Double 」の様に宣言する。
• この例では、1次元目の最大要素番号が2で、2次元目の最大要素番
号が3だ。
Dim a(2,3) as Double
a(0,0) a(0,1) a(0,2) a(0,3)
a(1,0) a(1,1) a(1,2) a(1,3)
a(2,0) a(2,1) a(2,2) a(2,3)
a
変数名
5
UBound()は引数の最大要素番号を返す関数である。
変数aが1次元配列の場合、UBound(a)はaの最大要素番号である。
ところで、aが2次元配列の場合はUBound()の使い方が変わる。
例えば、Dim a(2,3) as Double という2次元配列がある場合、UBound(a, 1)はaの1次元
目の最大要素番号の2を返す。
C#などでもオーバーロード機能を使って引数によって関数の挙動を変える機能があるが、
この使い方は本当にわかりにくい。MicrosoftとExcel VBAの信奉者に文句を言いたい。
6
2次元配列と行列
• 行列をVBAで計算する場合、2次元配列に行列の値を格納する。
• 大抵の場合は以下のように扱う。
a(0,0) a(0,1) a(0,2)
a(1,0) a(1,1) a(1,2)
a(2,0) a(2,1) a(2,2)
11 12 13
21 22 23
31 32 33
• すなわち、第1次元目の要素番号を行番号とし、第2次元目の要
素番号を列番号とみなす。1だけずれているが。
• つまり、a(1,2)は行列の2行3列目に相当する。
7
Array型
• ところで、VBAにはArray型が用意されている。
• Arrayを関数の返り値に指定できない、Variant変数にしか格納
できないなどから厳密には型とは言いづらいけども。
• これも配列として利用できる。
Dim a as Variant
a = Array(2,3,4)
a(0) a(1) a(2)a
変数名
Dim a as Variant
a = Array()
Redim a(2)
or
宣言の方法は2通りある。
Arrayのサイズと初期化を行う
要素には2と3と4が順に
格納される。
Arrayのサイズを変更しながら宣言
8
Arrayの入れ子
• Arrayはその要素にArrayを入れることができる。マトリョーシ
カのような構造をネスト(入れ子)構造といいます。
• また、この様に配列の中の配列を持つ構造をジャグ配列という。
a(0) a(1) a(2)
row0(0) row0(1) row0(2) row1(0) row1(1) row1(2) row2(0) row2(1) row2(2)
row0 = Array(11, 12, 13)
row1 = Array(21, 22, 23)
row2 = Array(31, 32, 33)
a = Array(row0, row1, row2)
a(0)(0) a(2)(2)a(2)(0)a(1)(1)a(0)(2) 9
a(0) a(1) a(2)
row0(0) row0(1) row0(2) row1(0) row1(1) row1(2) row2(0) row2(1) row2(2)
UBound()は引数の最大要素番号を返す関数である。
UBound(a)はaの最大要素番号である。下の例では、大枠の箱の数-1となる。
UBound(a(0))はaの第1要素の最大要素番号である。下の例では、a(0)の箱の数-1となる。
10
Arrayの入れ子と行列
• VBAでは、Arrayの入れ子に行列の値を格納することもできる。
• この場合、大抵の場合は以下のように扱う。
11 12 13
21 22 23
31 32 33
a(0) a(0)(0) a(0)(1) a(0)(2)
a(1)(0) a(1)(1) a(1)(2)
a(2)(0) a(2)(1) a(2)(2)
a(1)
a(2)
• すなわち、第1要素番号を行番号とし、第2要素番号を列番号と
みなす。1だけずれているが。
• つまり、a(1)(2)は行列の2行3列目に相当する。
11
2次元配列とArrayの入れ子の違い
2次元配列 Arrayの入れ子
a(i, j)でアクセス a(i)(j)でアクセス
特定の行だけ取り出すことはできない
行ベクトルの取り出しが簡単
例:row = a(1)
Range()関数を使ってcellに貼り付け
られる
例:Range(”A1:C3”) = a
Range関数を使ってcellに貼り付けら
れない
←文法的に関数に代入しているようで
そもそも気持ち悪いのだが。
行数は以下で得られる。
UBound(a, 1) + 1
列数は、UBound(a, 2) + 1
行数は以下で得られる。
UBound(a) + 1
列数は、UBound(a(0)) + 1
12
13
VBAが分かりやすいとか言い出したのは誰だ・・・

Weitere ähnliche Inhalte

Was ist angesagt?

Ontology Mapping
Ontology MappingOntology Mapping
Ontology Mapping
butest
 
Weh Teleport List
Weh Teleport ListWeh Teleport List
Weh Teleport List
guestde590
 
パターン認識 05 ロジスティック回帰
パターン認識 05 ロジスティック回帰パターン認識 05 ロジスティック回帰
パターン認識 05 ロジスティック回帰
sleipnir002
 

Was ist angesagt? (20)

ETL and its impact on Business Intelligence
ETL and its impact on Business IntelligenceETL and its impact on Business Intelligence
ETL and its impact on Business Intelligence
 
2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル2 6.ゼロ切断・過剰モデル
2 6.ゼロ切断・過剰モデル
 
Ontology Mapping
Ontology MappingOntology Mapping
Ontology Mapping
 
1 5.パラメトリックブートストラップ検定と確率分布
1 5.パラメトリックブートストラップ検定と確率分布1 5.パラメトリックブートストラップ検定と確率分布
1 5.パラメトリックブートストラップ検定と確率分布
 
xtsパッケージで時系列解析
xtsパッケージで時系列解析xtsパッケージで時系列解析
xtsパッケージで時系列解析
 
Web ontology language (owl)
Web ontology language (owl)Web ontology language (owl)
Web ontology language (owl)
 
Entities and attributes
Entities and attributesEntities and attributes
Entities and attributes
 
Big data Analytics
Big data AnalyticsBig data Analytics
Big data Analytics
 
Boolean,vector space retrieval Models
Boolean,vector space retrieval Models Boolean,vector space retrieval Models
Boolean,vector space retrieval Models
 
Weh Teleport List
Weh Teleport ListWeh Teleport List
Weh Teleport List
 
Power BI: Introduction with a use case and solution
Power BI: Introduction with a use case and solutionPower BI: Introduction with a use case and solution
Power BI: Introduction with a use case and solution
 
Unit i big data introduction
Unit  i big data introductionUnit  i big data introduction
Unit i big data introduction
 
080827 abramson inmon vs kimball
080827 abramson   inmon vs kimball080827 abramson   inmon vs kimball
080827 abramson inmon vs kimball
 
パターン認識 05 ロジスティック回帰
パターン認識 05 ロジスティック回帰パターン認識 05 ロジスティック回帰
パターン認識 05 ロジスティック回帰
 
Appunti di big data
Appunti di big dataAppunti di big data
Appunti di big data
 
FEPチュートリアル2021 講義3 「潜在変数が連続値、生成モデルが正規分布の場合」の改良版
FEPチュートリアル2021 講義3 「潜在変数が連続値、生成モデルが正規分布の場合」の改良版FEPチュートリアル2021 講義3 「潜在変数が連続値、生成モデルが正規分布の場合」の改良版
FEPチュートリアル2021 講義3 「潜在変数が連続値、生成モデルが正規分布の場合」の改良版
 
Big data architecture
Big data architectureBig data architecture
Big data architecture
 
Data-Persistency
Data-PersistencyData-Persistency
Data-Persistency
 
Advanced database protocols
Advanced database protocolsAdvanced database protocols
Advanced database protocols
 
Data Stewardship - Retour d'expérience de Sarenza sur la façon de piloter un ...
Data Stewardship - Retour d'expérience de Sarenza sur la façon de piloter un ...Data Stewardship - Retour d'expérience de Sarenza sur la façon de piloter un ...
Data Stewardship - Retour d'expérience de Sarenza sur la façon de piloter un ...
 

Andere mochten auch

Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版
Katsuhiro Morishita
 
Nhk高専ロボットコンテスト2014のルールを読んで考えたこと
Nhk高専ロボットコンテスト2014のルールを読んで考えたことNhk高専ロボットコンテスト2014のルールを読んで考えたこと
Nhk高専ロボットコンテスト2014のルールを読んで考えたこと
Katsuhiro Morishita
 

Andere mochten auch (20)

Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版Pythonの環境導入 2014年春季版
Pythonの環境導入 2014年春季版
 
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
 
タイピング練習のすゝめ
タイピング練習のすゝめタイピング練習のすゝめ
タイピング練習のすゝめ
 
Calc Method of Distance on The Earth (地球上での距離の計算)
Calc Method of Distance on The Earth (地球上での距離の計算)Calc Method of Distance on The Earth (地球上での距離の計算)
Calc Method of Distance on The Earth (地球上での距離の計算)
 
第1回熊本IoT研究会での森下のLT資料
第1回熊本IoT研究会での森下のLT資料第1回熊本IoT研究会での森下のLT資料
第1回熊本IoT研究会での森下のLT資料
 
プログラムの流れを図で表す 方法その1:フローチャート/アクティビティ図
プログラムの流れを図で表す方法その1:フローチャート/アクティビティ図プログラムの流れを図で表す方法その1:フローチャート/アクティビティ図
プログラムの流れを図で表す 方法その1:フローチャート/アクティビティ図
 
初めての機械学習
初めての機械学習初めての機械学習
初めての機械学習
 
VBAとPythonで始める数値計算教育
VBAとPythonで始める数値計算教育VBAとPythonで始める数値計算教育
VBAとPythonで始める数値計算教育
 
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
 
中心極限定理
中心極限定理中心極限定理
中心極限定理
 
海洋調査用ブイの水深制御のためのPID制御パラメータの求め方
海洋調査用ブイの水深制御のためのPID制御パラメータの求め方海洋調査用ブイの水深制御のためのPID制御パラメータの求め方
海洋調査用ブイの水深制御のためのPID制御パラメータの求め方
 
ソフトウェアライセンス
ソフトウェアライセンスソフトウェアライセンス
ソフトウェアライセンス
 
文字コード
文字コード文字コード
文字コード
 
PhoneGap勉強会 in 熊本
PhoneGap勉強会 in 熊本PhoneGap勉強会 in 熊本
PhoneGap勉強会 in 熊本
 
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
(Pythonで作って学ぶ) Youtube の動画リストを作るアプリの開発 
第4回
 
おうちハックのすゝめ
おうちハックのすゝめおうちハックのすゝめ
おうちハックのすゝめ
 
Python東海の紹介.py
Python東海の紹介.pyPython東海の紹介.py
Python東海の紹介.py
 
Facebookグループの作り方
Facebookグループの作り方Facebookグループの作り方
Facebookグループの作り方
 
Nhk高専ロボットコンテスト2014のルールを読んで考えたこと
Nhk高専ロボットコンテスト2014のルールを読んで考えたことNhk高専ロボットコンテスト2014のルールを読んで考えたこと
Nhk高専ロボットコンテスト2014のルールを読んで考えたこと
 
タブレインの3Gシールドを用いてArduinoからツイートする方法 β版
タブレインの3Gシールドを用いてArduinoからツイートする方法 β版タブレインの3Gシールドを用いてArduinoからツイートする方法 β版
タブレインの3Gシールドを用いてArduinoからツイートする方法 β版
 

Mehr von Katsuhiro Morishita

Mehr von Katsuhiro Morishita (20)

数ページの卒業論文作成のためのwordの使い方
数ページの卒業論文作成のためのwordの使い方数ページの卒業論文作成のためのwordの使い方
数ページの卒業論文作成のためのwordの使い方
 
Pythonのパッケージ管理ツールの話@2020
Pythonのパッケージ管理ツールの話@2020Pythonのパッケージ管理ツールの話@2020
Pythonのパッケージ管理ツールの話@2020
 
オトナのpandas勉強会(資料)
オトナのpandas勉強会(資料)オトナのpandas勉強会(資料)
オトナのpandas勉強会(資料)
 
SIgfox触ってみた in IoTLT in 熊本市 vol.3
SIgfox触ってみた in IoTLT in 熊本市 vol.3SIgfox触ってみた in IoTLT in 熊本市 vol.3
SIgfox触ってみた in IoTLT in 熊本市 vol.3
 
Google Colaboratoryの使い方
Google Colaboratoryの使い方Google Colaboratoryの使い方
Google Colaboratoryの使い方
 
Excelでのグラフの作成方法re
Excelでのグラフの作成方法reExcelでのグラフの作成方法re
Excelでのグラフの作成方法re
 
Pythonのmain関数
Pythonのmain関数Pythonのmain関数
Pythonのmain関数
 
Pythonスクリプトの実行方法@2018
Pythonスクリプトの実行方法@2018Pythonスクリプトの実行方法@2018
Pythonスクリプトの実行方法@2018
 
機械学習と主成分分析
機械学習と主成分分析機械学習と主成分分析
機械学習と主成分分析
 
Pythonで始めた数値計算の授業@わんくま勉強会2018-04
Pythonで始めた数値計算の授業@わんくま勉強会2018-04Pythonで始めた数値計算の授業@わんくま勉強会2018-04
Pythonで始めた数値計算の授業@わんくま勉強会2018-04
 
マークシート読み込みプログラムを作ってみた@2018-04-04
マークシート読み込みプログラムを作ってみた@2018-04-04マークシート読み込みプログラムを作ってみた@2018-04-04
マークシート読み込みプログラムを作ってみた@2018-04-04
 
オトナの画像認識 2018年3月21日実施
オトナの画像認識 2018年3月21日実施オトナの画像認識 2018年3月21日実施
オトナの画像認識 2018年3月21日実施
 
LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001
LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001
LoRa-WANで河川水位を計測してみた@IoTLT@熊本市 vol.001
 
シリーズML-08 ニューラルネットワークを用いた識別・分類ーシングルラベルー
シリーズML-08 ニューラルネットワークを用いた識別・分類ーシングルラベルーシリーズML-08 ニューラルネットワークを用いた識別・分類ーシングルラベルー
シリーズML-08 ニューラルネットワークを用いた識別・分類ーシングルラベルー
 
シリーズML-07 ニューラルネットワークによる非線形回帰
シリーズML-07 ニューラルネットワークによる非線形回帰シリーズML-07 ニューラルネットワークによる非線形回帰
シリーズML-07 ニューラルネットワークによる非線形回帰
 
シリーズML-06 ニューラルネットワークによる線形回帰
シリーズML-06 ニューラルネットワークによる線形回帰シリーズML-06 ニューラルネットワークによる線形回帰
シリーズML-06 ニューラルネットワークによる線形回帰
 
シリーズML-05 ニューラルネットワーク
シリーズML-05 ニューラルネットワークシリーズML-05 ニューラルネットワーク
シリーズML-05 ニューラルネットワーク
 
シリーズML-03 ランダムフォレストによる自動識別
シリーズML-03 ランダムフォレストによる自動識別シリーズML-03 ランダムフォレストによる自動識別
シリーズML-03 ランダムフォレストによる自動識別
 
シリーズML-01 機械学習の概要
シリーズML-01 機械学習の概要シリーズML-01 機械学習の概要
シリーズML-01 機械学習の概要
 
Pandas利用上のエラーとその対策
Pandas利用上のエラーとその対策Pandas利用上のエラーとその対策
Pandas利用上のエラーとその対策
 

Kürzlich hochgeladen

Kürzlich hochgeladen (6)

生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 

VBAにおける配列の データ構造と行列