教えてください。
質問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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
VBA シートのボタン名を変更したい
Visual Basic(VBA)
-
-
4
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
5
VBAでワークシートを引数としてサンプル関数に渡したい
Visual Basic(VBA)
-
6
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
7
Cellsのかっこの中はどっちが行と列なの?
Visual Basic(VBA)
-
8
VBA 変数名に変数を使用したい。
Visual Basic(VBA)
-
9
【Excel VBA】指定行以降をクリアするには?
Visual Basic(VBA)
-
10
Range(A1")⇔cells(1,1)の変換。"
Excel(エクセル)
-
11
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
12
別のシートから値を取得するとき
Visual Basic(VBA)
-
13
worksheetFunctionクラスのVlookupプロパティを取得できません エラーへの対応
Visual Basic(VBA)
-
14
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
15
エクセルでエラーが出て困っています。
Excel(エクセル)
-
16
VBAでループ内で使う変数名を可変にできないか。
Visual Basic(VBA)
-
17
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
18
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
19
VBA 数値を文字列として貼付したい
Excel(エクセル)
-
20
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IF関数でEmpty値を設定する方法。
-
動的配列が存在(要素が有る)か...
-
EXCEL VBA で、0から?1から?
-
VBAで配列の計算
-
変数を動的に作るには?
-
配列の要素数を超えた参照のコ...
-
パソコンキーボードで時分秒を...
-
javaプログラムについて
-
排列と配列の漢字の使い分けは
-
複数のテキストボックスに同じ...
-
C言語 重複しない4ケタの乱数...
-
コントロールが配列かどうかを...
-
For文と配列
-
遅延バインディングを使用でき...
-
空き番号探し
-
ランダムに並んでるキーボード...
-
五目並べのプログラムを配列と...
-
VB.net 引数で配列変数を渡す際...
-
ジャバスクリプトについて。
-
ボタンの複数割り当てについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAで配列の計算
-
パソコンキーボードで時分秒を...
-
IF関数でEmpty値を設定する方法。
-
EXCEL VBA で、0から?1から?
-
変数を動的に作るには?
-
動的配列が存在(要素が有る)か...
-
VB.net 引数で配列変数を渡す際...
-
遅延バインディングを使用でき...
-
VBで作った乱数を一度も重複さ...
-
複数のテキストボックスに同じ...
-
配列の要素数を超えた参照のコ...
-
C言語 重複しない4ケタの乱数...
-
For文と配列
-
C#の質問
-
VBでbyte配列型のインスタンス...
-
Excel VBAで配列の途中から(X)M...
-
マップチップの当たり判定の出し方
-
ジャグ配列とは
-
五目並べのプログラムを配列と...
-
10進数を4桁のバイト配列に格納...
おすすめ情報