過去ログ

                                Page     583
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼複数条件一致のVBA  PAL 03/1/17(金) 16:54
   ┗Re:複数条件一致のVBA  りん 03/1/18(土) 3:24
      ┣Re:複数条件一致のVBA  BOTTA 03/1/18(土) 4:09
      ┃  ┗Re:複数条件一致のVBA  りん 03/1/18(土) 4:24
      ┃     ┗Re:複数条件一致のVBA  BOTTA 03/1/18(土) 4:42
      ┃        ┗Re:複数条件一致のVBA  JuJu 03/1/18(土) 20:44
      ┗Re:複数条件一致のVBA  PAL 03/1/20(月) 16:14
         ┗Re:複数条件一致のVBA  りん 03/1/20(月) 21:52
            ┣Re:複数条件一致のVBA  りん 03/1/21(火) 7:19
            ┃  ┗Re:複数条件一致のVBA  PAL 03/1/22(水) 11:29
            ┗Re:複数条件一致のVBA  PAL 03/1/22(水) 11:21

 ───────────────────────────────────────
 ■題名 : 複数条件一致のVBA
 ■名前 : PAL
 ■日付 : 03/1/17(金) 16:54
 -------------------------------------------------------------------------
   初歩的なところで躓いているように思うのですが、自分では改善できそうにないので
こちらで質問させていただきます。

Sheet1のJ列に日付が入力されていて、C列〜F列に発送物名が入力されています。

Sheet1-----------------------------
  C D E F ・・J
1 ○       1/1
2 ▲       1/3
3 △ ○      1/6
4 ○ □      1/10
5 △ □ ▲    1/15


-----------------------------------

これをSheet2のD列に日付毎に発送物(各マーク)毎の件数が入るようにしたいのですが、うまくいきません。

Sheet2-----------------------------
  A ・ C D
1 1/1  ○ 1
2 1/2  ○ 0
3 1/3  ○ 0
4 1/4  ○ 0
5 1/5  ○ 0
6 1/6  ○ 1
7 1/7  ○ 0
8 1/1  ▲ 1
9 1/2  ▲ 0
10 1/3  ▲ 0
11 1/4  ▲ 0
12 1/5  ▲ 0
13 1/6  ▲ 0
14 1/7  ▲ 0

-----------------------------------

とりあえず、Sheet2のD1に1/1の「○」の件数が入るように
下記を作ってみたのですが、実行すると「型が一致しません」となってしまいます。
Sumproduct部分のようなのですが、よくわかりません。

Sub test()

'日付入力
Dim md As Date
Dim w_msg As String, w_title As String

w_msg = "日付を入力してください。"

w_title = "集計"

md = Application.InputBox(prompt:=w_msg, Title:=w_title, Default:=Date, Type:=2)
md = md - 7

'集計
Dim dd As Date, zz As Integer
Dim s1 As String

Dim cf As Range, jj As Range

dd = md '予め入力された日付

s1 = "○" '集計する送付物の指定

zz = Application.WorksheetFunction.CountA(Sheets("発送リスト").Columns("J"))


With Worksheets("発送リスト")
  Set cf = Range(.Cells(2, "C"), .Cells(zz, "F"))
  Set jj = Range(.Cells(2, "J"), .Cells(zz, "J"))
End With

  Cells(1, "D") = Application.WorksheetFunction _
          .SumProduct((jj = dd) * (cf = s1))

End Sub

つたない文章で申し訳ないのですが、どうかよろしくお願いいたします。
 ───────────────────────────────────────  ■題名 : Re:複数条件一致のVBA  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 03/1/18(土) 3:24  -------------------------------------------------------------------------
   PAL さん、こんばんわ。

>Sheet1のJ列に日付が入力されていて、C列〜F列に発送物名が入力されています。
>これをSheet2のD列に日付毎に発送物(各マーク)毎の件数が入るようにしたいのですが、

関数にしてみました。標準モジュールに書いてください。

Function NN(Dt1 As Range, Mk1 As Range) As Long
  Dim ws1 As Worksheet, r1 As Range, r2 As Range
  Dim Rpos As Long, Rmax As Long
  '
  Set ws1 = ThisWorkbook.Worksheets("Sheet1")
  '最下行設定 10 => J
  Rmax = ws1.Cells(65536, 10).End(xlUp).Row
  '日付セル検索
  For Rpos = 1 To Rmax
   If ws1.Cells(Rpos, 10).Value2 = Dt1.Value2 Then Exit For
  Next
  '関数の戻り値設定
  If Rpos > Rmax Then
   '一致する日付がなかった場合
   NN = 0
  Else
   'あった場合 3 => C , 9 => I
   With ws1
     Set r2 = .Range(.Cells(Rpos, 3), .Cells(Rpos, 9))
   End With
   NN = Application.WorksheetFunction.CountIf(r2, Mk1.Value)
  End If
  Set r1 = Nothing: Set r2 = Nothing
  Set ws1 = Nothing
End Function

こんな感じです。
関数なので、Sheet2のD列に
【セルD1】=NN(A1,C1)
という風に入力します。
 ───────────────────────────────────────  ■題名 : Re:複数条件一致のVBA  ■名前 : BOTTA  ■日付 : 03/1/18(土) 4:09  -------------------------------------------------------------------------
   PALさん、こんばんは。
質問者に断りもなく、飛び入りまして失礼します。

りん さん、お見事です。
さすがです。

今回、初めて Value2プロパティなるものを知りました。
Valueプロパティと比べて、どのようなメリットがあるのでしょうか?
ヘルプには、むちゃ簡単な説明しかなかった。
(今晩は、やけに遅いですねぇ)
 ───────────────────────────────────────  ■題名 : Re:複数条件一致のVBA  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 03/1/18(土) 4:24  -------------------------------------------------------------------------
   BOTTA さん、こんばんわ。 まだ起きてます。

>今回、初めて Value2プロパティなるものを知りました。
>Valueプロパティと比べて、どのようなメリットがあるのでしょうか?
>ヘルプには、むちゃ簡単な説明しかなかった。
 
とりあえず内容はこんな感じです。

Sub Test()
  With Range("A1")
   .Value = "1/1" '2003/1/1になる
   MsgBox .Value, vbInformation, "Valueはこんな感じ"
   MsgBox .Value2, vbInformation, "Value2はこんな感じ"
   MsgBox CDbl(.Value), vbInformation, "CDblするのと同じ"
  End With
End Sub

日付のシリアル値が取得できます。まあそれだけなんですけど(笑)
途中いろいろと試したのですが、比較するなら数値の方がいいかなあと。
通貨型を浮動小数点にするメリットはわかりませんけどね。

>(今晩は、やけに遅いですねぇ)
 じんましんがかゆくて眠れなくなりました。原因は不明です。
 ───────────────────────────────────────  ■題名 : Re:複数条件一致のVBA  ■名前 : BOTTA  ■日付 : 03/1/18(土) 4:42  -------------------------------------------------------------------------
   なぁ〜る・・

あっ、りんさん、こんばんは。

いつも、丁寧な解説ありがとうございました。
覚えたからには、今度どっかで使ってみよっと。

>>(今晩は、やけに遅いですねぇ)
> じんましんがかゆくて眠れなくなりました。原因は不明です。
夜、体があったまるとみょぉにかゆくなる事ってありますね。

明日は、近所のスーパーの特売品に並ばなきゃならぬ身なのでそろそろ寝ます。
おやすみなさい。

PALさん割り込みごめんなさい。
 ───────────────────────────────────────  ■題名 : Re:複数条件一致のVBA  ■名前 : JuJu <juju-bbs@su-u.com>  ■日付 : 03/1/18(土) 20:44  -------------------------------------------------------------------------
   PALさん、りんさん、BOTTAさん、こんにちはぁ

私も使ったことがなかったので、少し調べてみました。

英語サイトのほうに少しだけ解説がありました
http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b213719
"MORE INFORMATION"の初めの方が少しいやらしいですね^^;

通貨型のメリットはやっぱり分かりませんね。
将来への布石なんでしょうか。

ではではぁ
 ───────────────────────────────────────  ■題名 : Re:複数条件一致のVBA  ■名前 : PAL  ■日付 : 03/1/20(月) 16:14  -------------------------------------------------------------------------
   りん さんこんにちは。
また、皆様遅い時間までありがとうございます。

教えていただいたように関数を作成して試してみたのですが、
マークが該当する日毎に1件ずつという計算結果になりました。

再度、質問させていただきます。
同じ日に同じ発送物(マーク)が2件や3件ある場合にはその件数を出したいのですが、
どのようにしたらいいのでしょうか?

私の説明がつたなく、申し訳ありません。
よろしくお願いいたします。
 ───────────────────────────────────────  ■題名 : Re:複数条件一致のVBA  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 03/1/20(月) 21:52  -------------------------------------------------------------------------
   PAL さん、こんばんわ。

>同じ日に同じ発送物(マーク)が2件や3件ある場合にはその件数を出したいのですが、
>どのようにしたらいいのでしょうか?

あれ?
私の方では
Sheet1の C1:○ D1:○ J1:2003/1/1 と入力したら、
Sheet2の A1:2003/1/1 C1:○ で、D1:=NN(A1,C1) で2件と表示されましたが。
入力データの範囲はC列からI列ですよね。違いますか?
 ───────────────────────────────────────  ■題名 : Re:複数条件一致のVBA  ■名前 : りん <rin_doggie@hotmail.com>  ■日付 : 03/1/21(火) 7:19  -------------------------------------------------------------------------
   PAL さん、おはようございます。

>>同じ日に同じ発送物(マーク)が2件や3件ある場合にはその件数を出したいのですが、
>>どのようにしたらいいのでしょうか?
>あれ?
>私の方では
>Sheet1の C1:○ D1:○ J1:2003/1/1 と入力したら、
>Sheet2の A1:2003/1/1 C1:○ で、D1:=NN(A1,C1) で2件と表示されましたが。
>入力データの範囲はC列からI列ですよね。違いますか?
 もしかして、日付重複の場合でしたか?

変更版(日付の重複に対応)
Function NN(Dt1 As Range, Mk1 As Range) As Long
  Dim ws1 As Worksheet, r1 As Range, r2 As Range
  Dim Rpos As Long, Rmax As Long
  Dim Ndt As Long '加算に対応
  Ndt = 0
  '
  Set ws1 = ThisWorkbook.Worksheets("Sheet1")
  '最下行設定 10 => J
  Rmax = ws1.Cells(65536, 10).End(xlUp).Row
  '日付セル検索
  With ws1
   For Rpos = 1 To Rmax
     If ws1.Cells(Rpos, 10).Value2 = Dt1.Value2 Then
      '3 => C , 9 => I
      Set r2 = .Range(.Cells(Rpos, 3), .Cells(Rpos, 9))
      Ndt = Ndt + _
        Application.WorksheetFunction.CountIf(r2, Mk1.Value)
     End If
   Next
  End With
  Set r1 = Nothing: Set r2 = Nothing: Set ws1 = Nothing
  '関数の戻り値設定
  NN = Ndt
End Function
 ───────────────────────────────────────  ■題名 : Re:複数条件一致のVBA  ■名前 : PAL  ■日付 : 03/1/22(水) 11:29  -------------------------------------------------------------------------
   りん さん、こんにちは。

変更版の方で出来ました。
本当に助かりました。ありがとうございました。

また、何かありましたらよろしくお願いいたします。
 ───────────────────────────────────────  ■題名 : Re:複数条件一致のVBA  ■名前 : PAL  ■日付 : 03/1/22(水) 11:21  -------------------------------------------------------------------------
   りんさん、こんにちは。
お返事が遅くなってすみません。

>あれ?
>私の方では
>Sheet1の C1:○ D1:○ J1:2003/1/1 と入力したら、
>Sheet2の A1:2003/1/1 C1:○ で、D1:=NN(A1,C1) で2件と表示されましたが。
>入力データの範囲はC列からI列ですよね。違いますか?

入力データの範囲はC列からF列です。
前回いただいたIのところをF<6>に直して試したのですが、件数が反映されませんでした。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 583