Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3399 / 13644 ツリー ←次へ | 前へ→

【62498】メッセージボックスの表示について ギン 09/7/26(日) 17:09 質問[未読]
【62499】Re:メッセージボックスの表示について かみちゃん 09/7/26(日) 17:20 発言[未読]
【62500】Re:メッセージボックスの表示について kanabun 09/7/26(日) 18:12 発言[未読]
【62501】Re:メッセージボックスの表示について yoshi 09/7/26(日) 18:50 質問[未読]
【62502】Re:メッセージボックスの表示について かみちゃん 09/7/26(日) 19:15 発言[未読]
【62504】Re:メッセージボックスの表示について ギン 09/7/27(月) 8:28 お礼[未読]

【62498】メッセージボックスの表示について
質問  ギン  - 09/7/26(日) 17:09 -

引用なし
パスワード
   いつも参考にさせて頂いています。
質問させて下さい。
セル5:17に入っている情報をメッセージボックスで表示しています。

Sub AgTimeInfomation()
  Dim val(0 To 11) As String
  Range("L5").Select
  r = ActiveCell.Row
  For i = 0 To 11
    val(i) = Cells(r + i, 12).Value
  Next
  MsgBox val(0) & Chr(10) _
  & Chr(13) & val(1) & Chr(10) _
  & Chr(13) & val(2) & Chr(10) _
  & Chr(13) & val(3) & Chr(10) _
  & Chr(13) & val(4) & Chr(10) _
  & Chr(13) & val(5) & Chr(10) _
  & Chr(13) & val(6) & Chr(10) _
  & Chr(13) & val(7) & Chr(10) _
  & Chr(13) & val(8) & Chr(10) _
  & Chr(13) & val(9) & Chr(10) _
  & Chr(13) & val(10) & Chr(10) _
  & Chr(13) & val(11) & Chr(10) _
  & Chr(13) & val(12) & Chr(10), 0 + 64, "Ag使用時間情報"
End Sub

しかし、セルに情報が入っていない場合でも空白行で表示されてしまいます。
セルが未入力の時は次の入力されている行が表示される様にするには
どうしたら良いのでしょうか?
長くなって申し訳ありませんがどなたかお願いします。

【62499】Re:メッセージボックスの表示について
発言  かみちゃん  - 09/7/26(日) 17:20 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>しかし、セルに情報が入っていない場合でも空白行で表示されてしまいます。
>セルが未入力の時は次の入力されている行が表示される様にするには

以下のような感じではいかがでしょうか?

Sub AgTimeInfomation2()
 Dim v As Variant
 Dim i As Long
 Dim j As Long
 
 With Range("L5")
  v = .Resize(17 - .Row + 1).Value
 End With
 ReDim vv(0 To UBound(v, 1) - 1)
 For i = 1 To UBound(v, 1)
  If v(i, 1) <> "" Then
   vv(j) = v(i, 1)
   j = j + 1
  End If
 Next
 If j > 0 Then
  ReDim Preserve vv(j - 1)
  MsgBox Join(vv, vbCrLf), 0 + 64, "Ag使用時間情報"
 Else
  MsgBox "すべて空白"
 End If
End Sub

【62500】Re:メッセージボックスの表示について
発言  kanabun  - 09/7/26(日) 18:12 -

引用なし
パスワード
   ▼ギン さん:
横から蛇足、すみません。

変数名ですが val は すでに Val()関数があるので、
他の変数名にしたほうがいいかと思います。

以下は半分お遊びです。
Sub Try1()
 Dim v
 Dim ss As String
 v = Application.Transpose(Range("L5").Resize(12))
 ss = Join(v, vbCrLf)
 With CreateObject("VBScript.RegExp")
   .Pattern = "(\r\n){2,}"
   .Global = True
   .MultiLine = True
   MsgBox .Replace(ss, vbCrLf)
 End With
End Sub

【62501】Re:メッセージボックスの表示について
質問  yoshi  - 09/7/26(日) 18:50 -

引用なし
パスワード
   こんにちは。簡潔な方法を!

Sub test1()
 Dim ele, ss$
 For Each ele In Range("L5:L16").Value
  If Not IsEmpty(ele) Then ss = ss & IIf(ss = "", "", vbNewLine) & ele
 Next
 MsgBox ss, vbInformation, "Ag使用時間情報"
End Sub

【62502】Re:メッセージボックスの表示について
発言  かみちゃん  - 09/7/26(日) 19:15 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>しかし、セルに情報が入っていない場合でも空白行で表示されてしまいます。
>セルが未入力の時は次の入力されている行が表示される様にする

yoshiさんのコメントを見て、疑問に感じたことがありますので、確認させてください。

「セルに情報が入っていない」「セルが未入力」というのは、
=""
という数式などによる値(長さ0の文字列)が入っている場合は、
「セルに情報が入っている」「セルが未入力ではない」ということにするのでしょうか?

長さ0の文字列が入っていても、
私が提示したコードは、
「セルに情報が入っていない」「セルが未入力である」という判断をしています。
yoshiさんのコードは、
「セルに情報が入っている」「セルが未入力ではない」という判断をされていると思います。

状況に応じて、使い分けしてください。

【62504】Re:メッセージボックスの表示について
お礼  ギン  - 09/7/27(月) 8:28 -

引用なし
パスワード
   解答有難う御座います。
「かみちゃん」さんの記述で試したら
私が希望している動作になりました。

なぜこのような記述で動作するのかは未だにわかりません
他のお二人の記述も参考にしてもっともっと
勉強したいと思います。

今回は有難う御座いました。
また、機会がありましたら宜しくご指導のほどお願いします。

3399 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free