アプリ版:「スタンプのみでお礼する」機能のリリースについて

教えてください。

質問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です。
よろしくお願いします。

A 回答 (4件)

こんにちは。


基本的なことだと思います。

・質問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

---------------------------------------------
    • good
    • 1
この回答へのお礼

こんにちは。
回答ありがとうございます!

どうにも「配列」の概念がわかってないようです。
数字で番号が振られていれば、みんな配列に見えてきます。

Option Baseは使わないほうがよいのですね。なるほど。

いろいろありがとうございます。

お礼日時:2009/06/09 22:23

#2の投稿者ですが・・



chihumaさん
ごめんなさい。

さんが抜けていて、非敬称な形になっていました。
読み直して焦りました。失礼しました。
    • good
    • 0
この回答へのお礼

こんばんは!

え、全然気にしてませんでした…;
律儀ですね~。
ありがとうございました。

お礼日時:2009/06/10 20:44

chihumaのいわれているとおり確かにそうですよね。



EXCEL VBAは初期バージョンのころから、見てましたが、
言語はすべて#1さんがおっしゃるように0からのカウントで
領域確保がおおいのに、EXCEL VBAだけは、当初のころから、
CEL Worksheetsなどエクセル固有なものはカウントが1からですね。

他のものは、VBから入ってきたもので、すべて0からなんではないでしょうか?

質問2は、
実際に使用したのをLBoundを使って確認できます。
有効な範囲とは、モジュール単位で、module1とかの1ファイル内を
意味します。XLSエクセルファイル一つはプロジェクト単位といいます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

エクセル固有なものはカウントが1からなのですか。
なるほど。

お礼日時:2009/06/09 22:15

質問2はよくわかりませんが、


プログラム言語は基本が0から始まります。
なので1から始まるのは例外というか、自分で指定しているものが多いと思います。なので簡単に覚えられます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます!

“自分で指定しているもの”ですか?
うーん、ちょっとよく分かりません…;

もしよろしければ、
例えばどれのことか教えてください。

お礼日時:2009/06/09 22:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A