Excel VBA質問箱 IV

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

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


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

【58412】A列を走査し、データが存在するセルの件数抽出 初心者 08/10/24(金) 9:03 質問[未読]
【58413】Re:A列を走査し、データが存在するセルの件... kanabun 08/10/24(金) 9:22 発言[未読]
【58414】Re:A列を走査し、データが存在するセルの件... kanabun 08/10/24(金) 10:00 発言[未読]
【58417】Re:A列を走査し、データが存在するセルの件... 初心者 08/10/24(金) 13:20 お礼[未読]

【58412】A列を走査し、データが存在するセルの件...
質問  初心者  - 08/10/24(金) 9:03 -

引用なし
パスワード
   ■内容
 A列には文字列AAA,BBB,CCCという3つのデータがランダムで350件ほどあります。
 下記のプログラムでも欲しい結果はでるのですが、件数が400件以上になった場合
 は、対応できません。できれば、A列を走査し、データが存在する開始位置〜最終 行までといったプログラムはできないでしょうか?
 習熟の為他にもやり方があったらご教示ください。
※Excel 2003 を利用しております。

  For R = 1 To 400
    If SH2.Cells(R, 1) = "AAA" Then
      I = I + 1
      
  ElseIf SH2.Cells(R, 1) = "BBB" Then
      I2 = I2 + 1
      
  ElseIf SH2.Cells(R, 1) = "CCC" Then
      I3 = I3 + 1
  End If
  Next R
 SH1.Range("C5").Value = I & "件"
 SH1.Range("C6").Value = I2 & "件"
 SH1.Range("C7").Value = I3 & "件"

【58413】Re:A列を走査し、データが存在するセルの...
発言  kanabun  - 08/10/24(金) 9:22 -

引用なし
パスワード
   ▼初心者 さん:
こんにちは。

> できれば、A列を走査し、データが存在する開始位置〜最終行までといった
> プログラムはできないでしょうか?

とりあえず、
データ最終行を求めるのには
Endプロパティが使えそうです。
ht tp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_cell.html

これを使うと、
A列の最終セルは
  Range("A65536").End(xlUp)
とか
  Cells(Rows.Count, "A").End(xlUp)
で、
求められそうです。

開始行のほうは、
  Range("A1").End(xlDpwn)
で求められそうですが、
[A1]にデータがないばあい、データがあるばあい、
さらに [A2]にもデータがあるばあいとない場合で、
挙動が変わってきますので、
Findメソッドで検索したりします。
(でも、開始行ってのは 調べなくても分かっていることが多いので、
決め打ちすることが多いですが

 Range("A1", Cells(Rows.Count, 1).End(xlUp))

(^^)

【58414】Re:A列を走査し、データが存在するセルの...
発言  kanabun  - 08/10/24(金) 10:00 -

引用なし
パスワード
   ▼初心者 さん:
あと、個数カウントにも For〜Nextや For Each〜Nextのループから、
ワークシート関数まで いろんな方法があるので、
2、3例をば。

Sub Sample1()
  Dim SH1 As Worksheet
  Dim SH2 As Worksheet
  Dim R As Long, LastR As Long
  Dim I As Long, I2 As Long, I3 As Long
  
  Set SH1 = Worksheets(1)
  Set SH2 = Worksheets(2)
  With SH2
    LastR = .Range("A65536").End(xlUp).Row
    For R = 1 To LastR
      Select Case .Cells(R, 1).Value
        Case "AAA":    I = I + 1
        Case "BBB":    I2 = I2 + 1
        Case "CCC":    I3 = I3 + 1
      End Select
    Next
  End With
  
  SH1.Range("C5").Value = I & "件"
  SH1.Range("C6").Value = I2 & "件"
  SH1.Range("C7").Value = I3 & "件"
 
End Sub

Sub Sample2()
  Dim SH1 As Worksheet
  Dim SH2 As Worksheet
  Dim c As Range, I As Long
  Dim Count(1 To 3) As Long
  
  Set SH1 = Worksheets(1)
  Set SH2 = Worksheets(2)
  With SH2
    For Each c In .Range("A1", .Range("A65536").End(xlUp))
      Select Case c.Value
        Case "AAA":  Count(1) = Count(1) + 1
        Case "BBB":  Count(2) = Count(2) + 1
        Case "CCC":  Count(3) = Count(3) + 1
      End Select
    Next
  End With
  
  With SH1.Range("C5")
    For I = 1 To 3
      .Item(I, 1).Value = Count(I) & "件"
    Next
  End With
 
End Sub

Sub Sample3() 'COuntIfを使う
  Dim SH1 As Worksheet
  Dim SH2 As Worksheet
  Dim Rng As Range
  Dim I As Long
  
  Set SH1 = Worksheets(1)
  Set SH2 = Worksheets(2)
  With SH2
    Set Rng = .Range("A1", .Cells(65536, 1).End(xlUp))
  End With
  
  With SH1.Range("C5")
    .Value = Application.CountIf(Rng, "AAA") & "件"
    .Offset(1).Value = Application.CountIf(Rng, "BBB") & "件"
    .Offset(2).Value = Application.CountIf(Rng, "CCC") & "件"
  End With
End Sub

【58417】Re:A列を走査し、データが存在するセルの...
お礼  初心者  - 08/10/24(金) 13:20 -

引用なし
パスワード
   ▼kanabun様
ありがとうございます。
習熟した結果を後日にはなると思いますが、致しますので少々お待ちください。

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