• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ListCount -1等)

解説:VBAコードの理解が難しいListBox2の選択行を表示する方法

このQ&Aのポイント
  • ListCountを-1する理由とは?
  • ListBox2の選択行を表示するためのVBAコードの解説
  • 改行の必要性とは?

質問者が選んだベストアンサー

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (455/693)
回答No.1

>※1 -1を消すとエラーになるのは何故。 >減算の理由は0からカウントされるからだと有るが、 >最大行数は最大行数ままの数が表示されるので、 >無くても良い様に見えます。 >0からカウントとはどういう事なのか。 ListBox2.ListCount ↑は、ListBoxに何行あるかを求めています。 5行あれば、当然ですが、5になります。 他方 ListBox2.Selected(i) のiは、 ListBox2に表示された行の1行目からの番号(index)で 1行目が0、2行目が1、.....5行目が4です。 5行あるそれぞれの行を 先頭行から1行ごとに選択されているかどうかを調べるコードですから、 開始が0、最後が4です。 >※2 ()は書くべきですか。 選択されている行の番号を求めているわけですが、コードの作者は 1行目なら1、2行目なら2、.....5行目なら5を表示したいので 1を足しています。 (i + 1) これは、数の足し算です。 ms & (i + 1) この行の&は、文字列の結合です。 都合、()は省略できません。 >※3 何故、改行が必要なのでしょう。 vbCrLfを除いて実行してみるとわかると思います。 例えば、ListBoxに5行あって、3行目と5行目が選択されている場合 vbCrLfがないと、 35 ↑のメッセージが表示され vbCrLfがあると、 3 5 ↑のメッセージが表示されます。 ですので、 Dim i As Integer Dim ah As Integer Dim ms As String ah = ListBox2.ListCount For i = 1 To ah  If ListBox2.Selected(i-1) = True Then  ms = ms & i & vbCrLf Next i MsgBox ms というコードでも結果は同じです。 なお、上記コードでも正しく動作しますが、 より正しいコードは、 Dim i As Integer Dim ah As Integer Dim ms As String ah = ListBox2.ListCount For i = 1 To ah  If ListBox2.Selected(i-1) = True Then  ms = ms & format(i,"0") & vbCrLf Next i MsgBox ms です。 つまり、 文字列を結合するときに、 数値は予め文字列に変換します。

noname#233045
質問者

お礼

丁寧なご回答に感謝します。全て、理解出来ました。

関連するQ&A

専門家に質問してみよう