Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Microsoft 365)
セルの中に複数行が書かれていて、その行数を取得したい
投稿日時: 22/07/01 16:19:52
投稿者: takatada72

お疲れさまです。
 
ネットで検索してみたのですが、見つかりませんでしたので、
こちらに投稿させて頂きます。
 
1つのセルの中に、数行の番号が書き込まれております。
下記のプログラムを実行すると、番号がなくなった時にエラー
になってしまうため、そのエラーが表示される前にプログラム
を停止させたいのです。
 
MsgBox lineAry(i)にどのようなVBAをすれば回避できますでしょうか
記載されている行数を取得して、その行数を For i = 0 To 行数 に
設定すれば実現できますでしょうか
 
 
Dim lineAry() As String
Dim i As Integer
 
lineAry = Split(Cells(2, 20), vbLf, , vbBinaryCompare)
i = 0
 
For i = 0 To 20
MsgBox lineAry(i)
Next i
 
お忙しいとは思いますが宜しくお願い致します。

回答
投稿日時: 22/07/01 17:02:32
投稿者: sk

引用:
lineAry = Split(Cells(2, 20), vbLf, , vbBinaryCompare)

・Split 関数によって返された 1 次元配列の
 要素の添え字の最小値を LBound 関数で、
 最大値を UBound 関数で取得し、
 それらを For 文におけるループ範囲とする。
 
----------------------------------------------------------
 
For i = LBound(lineAry) To UBound(lineAry)
    MsgBox lineAry(i)
Next i
 
----------------------------------------------------------
 
・For 文ではなく For Each 文を使用する。
 
----------------------------------------------------------
 
Dim varLine As Variant
For Each varLine In lineAry
    MsgBox varLine
Next
 
----------------------------------------------------------
 
以上のいずれかで対応して下さい。

投稿日時: 22/07/01 17:48:27
投稿者: takatada72

早速のご返信をありがとうございました。
 
教えて頂いた、どちらでもエラーがでませんでした。
ありがとうございました。
無事、解決しました。
For i = LBound(lineAry) To UBound(lineAry)
    MsgBox lineAry(i)
Next i
 
Dim varLine As Variant
For Each varLine In lineAry
    MsgBox varLine
Next