Excel VBA質問箱 IV

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

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


6260 / 13646 ツリー ←次へ | 前へ→

【46266】文字列の取得 okitsun 07/1/29(月) 13:40 質問[未読]
【46267】Re:文字列の取得 かみちゃん 07/1/29(月) 13:47 発言[未読]
【46278】Re:文字列の取得 okitsun 07/1/29(月) 14:55 回答[未読]
【46284】Re:文字列の取得 かみちゃん 07/1/29(月) 16:19 発言[未読]
【46294】Re:文字列の取得 ichinose 07/1/29(月) 18:47 発言[未読]
【46341】Re:文字列の取得 okitsun 07/1/31(水) 14:53 回答[未読]
【46342】Re:文字列の取得 Kein 07/1/31(水) 15:27 発言[未読]
【46346】Re:文字列の取得 okitsun 07/1/31(水) 16:47 お礼[未読]

【46266】文字列の取得
質問  okitsun E-MAIL  - 07/1/29(月) 13:40 -

引用なし
パスワード
   X行目に入力されているデータを見つけ、
以下の情報を取得するにはどうしたら
よいでしょうか。

○レコードに入力されている文字列
例)あいう、かきく、さしす

○文字列の件数
例)3件

○文字列が入力されているセルの位置
例)I2、P2、Y2

【46267】Re:文字列の取得
発言  かみちゃん E-MAIL  - 07/1/29(月) 13:47 -

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

>X行目に入力されているデータを見つけ、
>以下の情報を取得するにはどうしたら

申し訳ありませんが、意味がわかりません。
以下のようなシートイメージを提示していただき、説明していただけないでしょうか?
   A   B   C   D
1
2
3
4
5
なお、シートイメージを提示していただくときは、投稿欄の右下の「等幅」にチェ
ックを入れていたたくとキレイに見えます。

【46278】Re:文字列の取得
回答  okitsun E-MAIL  - 07/1/29(月) 14:55 -

引用なし
パスワード
   すいません。ありがとうございます。

   A   B   C   D
1
2  あ  い   う  
3
4
5

A2に「あ」、B2に「い」、C2に「う」が入っていた場合、
以下のことをやるにはどのようにしたら良いでしょうか。

○2行目全体を検索し、
○「あ」、「い」、「う」を配列に格納し、
○レコード件数をカウントし、(この場合は3件)
○「あ」、「い」、「う」のセル位置を取得する
(この場合は、A2、B2、C2を配列に格納する)

【46284】Re:文字列の取得
発言  かみちゃん  - 07/1/29(月) 16:19 -

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

>○2行目全体を検索し、
>○「あ」、「い」、「う」を配列に格納し、
>○レコード件数をカウントし、(この場合は3件)
>○「あ」、「い」、「う」のセル位置を取得する
>(この場合は、A2、B2、C2を配列に格納する)

以下のような感じになるかと思います。
コードの意味は、ヘルプで調べてみてください。

Sub Sample()
 Dim rng As Range
 Dim c As Range
 Dim i As Integer
 
 On Error Resume Next
 Set rng = Rows("2:2").SpecialCells(xlCellTypeConstants, 23)
 On Error GoTo 0
  
 If Not rng Is Nothing Then
  rng.Select
  ReDim vntData(rng.Count)
  i = 0
  For Each c In rng
   vntData(i) = c.Address(0, 0)
   i = i + 1
  Next
 Else
  MsgBox "2行目には値がありません"
 End If
 For i = 0 To UBound(vntData, 1)
  Debug.Print vntData(i)
 Next
End Sub

【46294】Re:文字列の取得
発言  ichinose  - 07/1/29(月) 18:47 -

引用なし
パスワード
   ▼かみちゃん さん:
こんばんは。


>
>Sub Sample()
> Dim rng As Range
> Dim c As Range
> Dim i As Integer
> 
> On Error Resume Next
> Set rng = Rows("2:2").SpecialCells(xlCellTypeConstants, 23)
> On Error GoTo 0
>  
> If Not rng Is Nothing Then
>  rng.Select
'これ 0 Baseなら
  ReDim vntData(rng.Count-1)
'  とした方が良いですよね? 見ていたら、気になったので。
>  i = 0
>  For Each c In rng
>   vntData(i) = c.Address(0, 0)
>   i = i + 1
>  Next
> Else
>  MsgBox "2行目には値がありません"
> End If
> For i = 0 To UBound(vntData, 1)
>  Debug.Print vntData(i)
> Next
>End Sub


私も考えました。


Sub main()
 Dim g0 As Long
 Dim myarray As Variant
 myarray = Filter(Evaluate("if(2:2<>"""",address(2,column(2:2),4),""" & _
      Chr(&HFF) & """)"), Chr(&HFF), False)
 For g0 = LBound(myarray) To UBound(myarray)
   MsgBox myarray(g0)
   Next
End Sub

【46341】Re:文字列の取得
回答  okitsun E-MAIL  - 07/1/31(水) 14:53 -

引用なし
パスワード
   ▼ichinose さん:

ありがとうございます。文字列(「あ」、「い」、「う」など)を配列に格納するにはどうしたらよいでしょうか?

【46342】Re:文字列の取得
発言  Kein  - 07/1/31(水) 15:27 -

引用なし
パスワード
   ichinose さんのコードで、既に配列を作ってるようですけど。
ちなみに私なら・・

Sub TestA()
  Dim Ary() As Variant
  Dim Cnt As Long, i As Long
  Dim C As Range
 
  Cnt = WorksheetFunction.CountA(Rows("2:2"))
  If Cnt = 0 Then Exit Sub
  ReDim Ary(1 To Cnt)
  For Each C In Rows("2:2").SpecialCells(2)
   i = i + 1: Ary(i) = C.Value
   Debug.Print Ary(i)
  Next
End Sub

【46346】Re:文字列の取得
お礼  okitsun E-MAIL  - 07/1/31(水) 16:47 -

引用なし
パスワード
   ▼Kein さん:
ありがとう。解決しました。

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