
教えてください。
質問1:以下のような例で、0から始まったり、1から始まったり。
事例ごとの違いが分かりません。
なにか法則や捉え方はありますか?
Worksheets(1)→1から。
cells(1,1)→1から。
配列変数(0)→0から。
myseazon=array("春","夏","秋","冬") だと、myseason(0)は、春→0から。
テキストボックスで、SelStartプロパティは、1文字目を0としてカウント→0から。
テキストボックスで、SelLengthプロパティは、1文字の設定なら1指定→1の時に1
複数行の入力が可能なテキストボックスで、CurLineプロパティは1行目を0としてカウント→0から。
複数行の入力が可能なテキストボックスで、LineCountプロパティは1行目を1としてカウント→1から。
リストボックスで、ListIndexプロパティ→0から。
リストボックスで、TopIndexプロパティ→0から。
ColumnCountが2以上のリストボックスで、BoundColumnプロパティで、1列目を設定する時は1。
ColumnCountが2以上のリストボックスで、オブジェクト名.List(row,column)→0から。
ColumnCountが2以上のリストボックスで、オブジェクト名.Column(column,row)→0から。
質問2:また、Option Baseステートメントはどの範囲で有効ですか?
ヘルプには、「Option Base ステートメントの設定が有効になるのは、ステートメントが記述されているモジュール内の配列の添字の最小値のみです。」とありますが、
例えば上の例ではどれが配列の添字ですか?見分け方はありますか?
EXCEL2003です。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
こんにちは。
基本的なことだと思います。
・質問1:以下のような例で、0から始まったり、1から始まったり。
>事例ごとの違いが分かりません。
>なにか法則や捉え方はありますか?
>Worksheets(1)→1から。
>cells(1,1)→1から。
Worksheeets もRange オブジェクトも、配列ではありません。Collection という種類のものです。
Collection の初期値は、1 です。
>リストボックスで、ListIndexプロパティ→0から。
>リストボックスで、TopIndexプロパティ→0から。
List のItem のデータは、配列になっています。
>(TextBoxの)CurLineプロパティは1行目を0
これは、位置であって、配列でも、Collection でもありません。(たぶん)
・質問2:また、Option Baseステートメントはどの範囲で有効ですか?
モジュール(表示されているペイン)の範囲のみです。ステートメントは、モジュールのみです。
現在は、なるべくOption Base は、使わないようにしたほうがよいです。どうやら、VBAがなくなるというMSの内部の話は、MS のOffice のチームリーダからは否定はされましたが、それを使うのは、仮に簡単になるといっても、避けたほうがよいです。.Net への移植そのものは出来ませんが、移植性が落ちます。もとより、その都度、使ったり使わなかったりすると、コード作成上で、混乱するからです。
>例えば上の例ではどれが配列の添字ですか?見分け方はありますか?
配列の、Lbound(配列)の初期値が、0か1になるということです。たぶん、一通りVBAを覚えたものだと思いますが、こういうことは、あまり先の見通しを考えないほうがよいです。
'--------------------------------------------------
''Option Base 1 '配列の初期値を換える
'コレクションテスト
Sub CollectinTest()
Dim myCollection As New Collection
Dim v As Variant
For Each v In Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
myCollection.Add v
Next v
MsgBox myCollection.Item(1)
End Sub
'
'配列テスト
Sub ArrayTest()
Dim myArray(10) As Variant
Dim v As Variant
Dim i As Integer
i = 1
For Each v In Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
myArray(i) = v
i = i + 1
Next v
MsgBox myArray(LBound(myArray()))
End Sub
---------------------------------------------
こんにちは。
回答ありがとうございます!
どうにも「配列」の概念がわかってないようです。
数字で番号が振られていれば、みんな配列に見えてきます。
Option Baseは使わないほうがよいのですね。なるほど。
いろいろありがとうございます。
No.4
- 回答日時:
#2の投稿者ですが・・
chihumaさん
ごめんなさい。
さんが抜けていて、非敬称な形になっていました。
読み直して焦りました。失礼しました。
No.2
- 回答日時:
chihumaのいわれているとおり確かにそうですよね。
EXCEL VBAは初期バージョンのころから、見てましたが、
言語はすべて#1さんがおっしゃるように0からのカウントで
領域確保がおおいのに、EXCEL VBAだけは、当初のころから、
CEL Worksheetsなどエクセル固有なものはカウントが1からですね。
他のものは、VBから入ってきたもので、すべて0からなんではないでしょうか?
質問2は、
実際に使用したのをLBoundを使って確認できます。
有効な範囲とは、モジュール単位で、module1とかの1ファイル内を
意味します。XLSエクセルファイル一つはプロジェクト単位といいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
-
4
配列の中の最大値とそのインデックス番号を取得する方法
Visual Basic(VBA)
-
5
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
6
文字列からタブコードを取り除きたい
Visual Basic(VBA)
-
7
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
8
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
9
VBA 置換文字がみつからない時
Visual Basic(VBA)
-
10
VBA 別ブックからコピペしたいのですが、軽くしたいです
Visual Basic(VBA)
-
11
エクセル・VBA CheckBoxのオブジェクト名に変数を使うことは可能でしょうか?
Excel(エクセル)
-
12
Excelの条件付き書式設定の太い罫線
Excel(エクセル)
-
13
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
14
エクセルVBAでMsgboxの表示をそろえたい
Excel(エクセル)
-
15
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
16
EXCEL VBA 2次元配列に格納された値の最小値を調べたい
Access(アクセス)
-
17
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
18
文字列内で括弧を使うには
Visual Basic(VBA)
-
19
エクセルのデータグループ化の際に貼り付けた図だけ一緒に折りたたんでくれません!
Windows Vista・XP
-
20
初歩的な事だと思います。 Sub または Function が定義されていません。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
重複なしでランダムに画像を表...
-
EXCEL VBA で、0から?1から?
-
ジャグ配列とは
-
複数のテキストボックスに同じ...
-
”ListBoxへのAddでエラー”
-
排列と配列の漢字の使い分けは
-
キーボード
-
パソコンキーボードで時分秒を...
-
MFC CArray in CArray
-
Excel VBAで配列の途中から(X)M...
-
オブジェクトの中のプロパティ...
-
JSPでDBからデータ読み込みブラ...
-
ループ処理の際、最後だけ","を...
-
ORA-01858: 数値を指定する箇所...
-
system.out.printが出力されない
-
行の途中から読み込む方法
-
System.err. printlnとSystem.o...
-
C# ListBoxのインデックスの値...
-
flush()とclose()について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
VBAで配列の計算
-
VB.net 引数で配列変数を渡す際...
-
C言語 重複しない4ケタの乱数...
-
EXCEL VBA で、0から?1から?
-
パソコンキーボードで時分秒を...
-
C#の質問
-
変数を動的に作るには?
-
配列の要素数を超えた参照のコ...
-
VBで作った乱数を一度も重複さ...
-
Excel VBAで配列の途中から(X)M...
-
Visual C++ でコントロールを...
-
VBでbyte配列型のインスタンス...
-
For文と配列
-
複数のテキストボックスに同じ...
-
五目並べのプログラムを配列と...
-
格闘ゲームのコマンド判定について
-
フォームコントロールのチェック
-
遅延バインディングを使用でき...
おすすめ情報