
教えてください。
質問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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- Visual Basic(VBA) ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:16
- IT・エンジニアリング ActiveReportのdetailをデータセットの自動バインドを使って帳票を出力しています。 1 2023/08/16 07:17
- Word(ワード) word 文字数のずれ 2 2023/01/18 10:04
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Excel(エクセル) 範囲指定をした中で、住所の列をユーザー設定の並べ替えをしたい 3 2022/05/15 13:51
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
このQ&Aを見た人はこんなQ&Aも見ています
-
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
-
Access VBAで行ラベルが定義されていないというエラーが出ます
Access(アクセス)
-
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
文字列からタブコードを取り除きたい
Visual Basic(VBA)
-
6
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
7
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
8
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
9
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
12
Excel VBA 定数にオブジェクトを指定したい
Visual Basic(VBA)
-
13
配列の中の最大値とそのインデックス番号を取得する方法
Visual Basic(VBA)
-
14
Cellsのかっこの中はどっちが行と列なの?
Visual Basic(VBA)
-
15
VBA CommandButtonの文字ずれ
Visual Basic(VBA)
-
16
VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます
Visual Basic(VBA)
-
17
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
18
Excelの条件付き書式設定の太い罫線
Excel(エクセル)
-
19
エクセルVBAでMsgboxの表示をそろえたい
Excel(エクセル)
-
20
VBAコード記述に際して、コード全体を自動的にインデント付ける方法
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
C言語 重複しない4ケタの乱数...
-
VBAで配列の計算
-
VB.net 引数で配列変数を渡す際...
-
For文と配列
-
VBで作った乱数を一度も重複さ...
-
C# での文字列パディング
-
EXCEL VBA で、0から?1から?
-
パソコンキーボードで時分秒を...
-
遅延バインディングを使用でき...
-
エクセルで小数の中の最大値を...
-
Excel VBAで配列の途中から(X)M...
-
ラジオボタンのチェックをEnter...
-
配列通しのOR演算
-
複数のテキストボックスに同じ...
-
Visual C++ でコントロールを...
-
排列と配列の漢字の使い分けは
-
C#の質問
-
10進数を4桁のバイト配列に格納...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
動的配列が存在(要素が有る)か...
-
IF関数でEmpty値を設定する方法。
-
EXCEL VBA で、0から?1から?
-
VBAで配列の計算
-
VB.net 引数で配列変数を渡す際...
-
パソコンキーボードで時分秒を...
-
変数を動的に作るには?
-
VBでbyte配列型のインスタンス...
-
VBで作った乱数を一度も重複さ...
-
Excel VBAで配列の途中から(X)M...
-
配列の要素数を超えた参照のコ...
-
複数のテキストボックスに同じ...
-
ラジオボタンのチェックをEnter...
-
C言語 重複しない4ケタの乱数...
-
排列と配列の漢字の使い分けは
-
For文と配列
-
Visual C++ でコントロールを...
-
C++、クラスメンバの構造体配列...
-
遅延バインディングを使用でき...
-
int型配列の一括初期化
おすすめ情報