Excel VBA質問箱 IV

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

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


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

【7204】データのカウントなんですが・・・・ kawata 03/8/26(火) 15:06 質問
【7206】Re:データのカウントなんですが・・・・ INA 03/8/26(火) 15:47 回答
【7207】Re:データのカウントなんですが・・・・ kawata 03/8/26(火) 16:09 お礼
【7211】Re:データのカウントなんですが・・・・ ichinose 03/8/26(火) 17:56 発言
【7212】Re:データのカウントなんですが・・・・ ichinose 03/8/26(火) 17:59 発言
【7220】Re:データのカウントなんですが・・・・ kawata 03/8/27(水) 8:26 お礼
【7225】Re:データのカウントなんですが・・・・ kawata 03/8/27(水) 10:11 質問
【7227】Re:データのカウントなんですが・・・・ kawata 03/8/27(水) 10:28 お礼

【7204】データのカウントなんですが・・・・
質問  kawata  - 03/8/26(火) 15:06 -

引用なし
パスワード
   kawataです、お世話になっております、よろしくお願いします。
(Windows2000/Excel2000)

下記のようなデータがあります。

2003/01/01 ○
2003/01/02 ○
2003/01/03 
2003/01/04 
2003/01/05 ○
2003/01/06 ○
2003/01/07 ○
2003/01/08 ○

2003/08/22 ○
2003/08/23 
2003/08/24 
2003/08/25 ○
2003/08/26 ○

日付は、日単位で連続しております。このデータの○の個数を
月別にカウントしたいのですが・・・・・、

2003/01/01〜2003/01/31 **  ←○の個数
2003/02/01〜2003/02/28 **

2003/08/01〜2003/08/31 **

ワークシート関数であれこれ試してみましたが、さっぱり埒があきません。
(ワークシート関数だけで処理できる質問でしたらご容赦ください。
尚、その場合、ワークシート関数での記述を教えていただければ幸いです)
ぜひよろしくお願いします。

【7206】Re:データのカウントなんですが・・・・
回答  INA  - 03/8/26(火) 15:47 -

引用なし
パスワード
   Sheet1 A列に日付、B列に○ があるとして
各月の最終日のC列に個数が入力されます。

Private Sub CommandButton1_Click()
Dim C As Long
Dim Cnt As Long

With Worksheets("Sheet1")

For C = 1 To .Range("A65536").End(xlUp).Row

  If Month(.Cells(C, 1).Value) = Month(.Cells(C + 1, 1).Value) Then
      
    If .Cells(C, 2).Value = "○" Then
      Cnt = Cnt + 1
    End If
    
  Else
    .Cells(C, 3).Value = Cnt
  End If
 
Next C

End With
End Sub

【7207】Re:データのカウントなんですが・・・・
お礼  kawata  - 03/8/26(火) 16:09 -

引用なし
パスワード
   kawataです、よろしくお願いします。

INAさん、ありがとうございました。
無事に完結です、また、よろしくお願いします。
これをどう組み込むかをこれから悩んでみます。
ありがとうございました。

Private Sub CommandButton1_Click()
Dim C As Long
Dim Cnt As Long
  With Worksheets("Sheet1")
    For C = 1 To .Range("A65536").End(xlUp).Row
      If C <> .Range("A65536").End(xlUp).Row Then
        If Month(.Cells(C, 1).Value) = Month(.Cells(C + 1, 1).Value) Then
          If .Cells(C, 2).Value = "○" Then
            Cnt = Cnt + 1
          End If
        Else
          If .Cells(C, 2).Value = "○" Then
            .Cells(C, 3).Value = Cnt + 1
          Else
            .Cells(C, 3).Value = Cnt
          End If
          Cnt = 0
        End If
      Else
        If .Cells(C, 2).Value = "○" Then
          .Cells(C, 3).Value = Cnt + 1
        Else
          .Cells(C, 3).Value = Cnt
        End If
      End If
    Next C
  End With
End Sub

【7211】Re:データのカウントなんですが・・・・
発言  ichinose  - 03/8/26(火) 17:56 -

引用なし
パスワード
   kawata さん、INAさん、こんにちは。
解決されたようですが、この問題、関数で可能です。

日付がA列に、○がB列だとして、
仮に集計開始日がセルD1(2003/1/1等)、集計終了日がセルE1(2003/1/31等)とすると、

「=SUMPRODUCT((OFFSET($A$1,0,0,COUNT($A:$A),1)>=D1)
  *(OFFSET($A$1,0,0,COUNT($A:$A),1)<=F1)
  *(OFFSET($A$1,0,1,COUNT($A:$A),1)="○"))」

で個数が見つかります。

【7212】Re:データのカウントなんですが・・・・
発言  ichinose  - 03/8/26(火) 17:59 -

引用なし
パスワード
   >kawata さん、INAさん、こんにちは。
>解決されたようですが、この問題、関数で可能です。
>
>日付がA列に、○がB列だとして、
>仮に集計開始日がセルD1(2003/1/1等)、集計終了日がセルE1(2003/1/31等)とすると、
>
>「=SUMPRODUCT((OFFSET($A$1,0,0,COUNT($A:$A),1)>=D1)
  *(OFFSET($A$1,0,0,COUNT($A:$A),1)<=E1)
>  *(OFFSET($A$1,0,1,COUNT($A:$A),1)="○"))」
>
>で個数が見つかります。
訂正です

【7220】Re:データのカウントなんですが・・・・
お礼  kawata  - 03/8/27(水) 8:26 -

引用なし
パスワード
   kawataです、おはようございます、お世話になってます。

ichinoseさん、ありがとうございます。

やっぱり・・・・・関数だけで可能でしたか。
実は、先のコードをFnctionで組んでみたり、シートのイベントに組んで
みたりと、どうもイマイチうまくできなくて悩んでおりました。

>>「=SUMPRODUCT((OFFSET($A$1,0,0,COUNT($A:$A),1)>=D1)
>  *(OFFSET($A$1,0,0,COUNT($A:$A),1)<=E1)
>>  *(OFFSET($A$1,0,1,COUNT($A:$A),1)="○"))」

しっかしさすがですね。
SUMPRODUCT→使ったことないです(^^;。
ワークシートでOFFSET→使ったことないです(^^;。

ほんとに勉強になります、ありがとうございました。

INAさん、ichinoseさん、またよろしくお願いします。

【7225】Re:データのカウントなんですが・・・・
質問  kawata  - 03/8/27(水) 10:11 -

引用なし
パスワード
   kawataです、よろしくお願いします。

ichinoseさん、ありがとうございました。
バッチリ解決です、と同時に、覚えないといけない関数もまだまだ
沢山あるなと痛感することしきりです。
Excel・・・・って疲れます(^^;。

(↓実際のシートへアレンジした式です)
=SUMPRODUCT((OFFSET(data!$A$3,0,0,COUNT(data!$A:$A),1)>=$C9)
  *(OFFSET(data!$A$3,0,0,COUNT(data!$A:$A),1)<=$E9)
    *(OFFSET(data!$A$3,0,1,COUNT(data!$A:$A),1)="○"))

まず、解析からして理解するのに大変でした。
よくこんなのが、すぐに出てくるものだと(^^;、感謝です。

この場合、OFFSETそれぞれで、条件を判定して 1*1*1=1となったもの
の和を表示していると考えてよろしいのですね。

で、ものは試しにと、○の個数でなく、数値が入っていた場合に、その数値の
和にしてみようとしたら、見事に玉砕です。
3つ目のOFFSETの部分を書き換えれば?と思いましたが、わかりませんでした。

申し訳ないですが、ぜひ、よろしくお願いします。

【7227】Re:データのカウントなんですが・・・・
お礼  kawata  - 03/8/27(水) 10:28 -

引用なし
パスワード
   kawataです、よろしくお願いします。

>=SUMPRODUCT((OFFSET(data!$A$3,0,0,COUNT(data!$A:$A),1)>=$C9)
>  *(OFFSET(data!$A$3,0,0,COUNT(data!$A:$A),1)<=$E9)
>    *(OFFSET(data!$A$3,0,1,COUNT(data!$A:$A),1)="○"))

の3つ目のOffsetを

>    *(OFFSET(data!$A$3,0,1,COUNT(data!$A:$A),1)))

にしたら・・・・できました!。
なんか自分で解決できたときは、やった!って気分になれます。
めったにありませんが(^^;。

どうもありがとうございました、また、よろしくお願いします。

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