[[20150305230610]] 『マクロで合計 6』(もみじ坂) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロで合計 6』(もみじ坂)

『マクロで合計 5』(もみじ坂)
[[20140814193616]]『マクロで合計 1』
[[20140827212357]]『マクロで合計 2』
[[20141024002243]]『マクロで合計 3』
[[20141124231425]]『マクロで合計 4』
[[20141213185105]]『マクロで合計 5』

 ◎ HANA様 レッスン用
 ◆今回の課題
   1.配列(仕切りのついた箱)を用意する
  2.計算結果(シートに表示したい状態)を配列に作る  ⇒ ★ここから〜
  3.配列の中身をシートに書き出す

 ◆集計シート
 [a]	[b]	[c]	[d]	        [e]	[f]	[g]	[h]	[i]	[j]	[k]	[L]	[M]	[N]	[O]	[P]	[Q]
 NO	商品名前	個数	名称	1 月	2 月	3 月	4 月	5 月	6 月	7 月	8 月	9 月	10 月	11 月	12 月	合計
A01				 												
A02																
A03																
A05																
 ◆データーシート
 [1]	[a]	[b]	        [c]	[d]	[e]	[f]	[g]	[h]	[g]	[h]
[2]	書類NO	日付	        TEL		NO	NO検索値	単価	cs	pc
[3]	140124 	2014年1月5日	1234 		A01	1				10 
[4]	140124 	2014年1月5日	5678 		A01	1				20 
[5]	140124 	2014年1月5日	1234 		A04	0				30 
[6]	140124 	2014年1月5日	5678 		A04	0				40 
[7]	140124 	2014年3月5日	8768 		A02	1				50 
[8]	140124 	2014年3月5日	8768 		A05	1				60 
[9]	140124 	2014年3月5日	1234 		A05	1				70 
 ※このPCはHELP機能を搭載していません。
< 使用 Excel:Excel2010、使用 OS:Windows7 > 

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 hana様のコメント
 **************************************************
 ちなみに↓のエラーも出ているので、これも考えてみて下さい。
 >2.NO検索 = Application.Match(データー.Cells(I, "E"), 集計.Range("A3:A6"), 0)
 >3.箱(NO検索 - 2, 月最終列 - 4) = 集計.Cells(NO検索, 月最終列) + データー.Cells(I, "j")
 >
 >3.が黄色くなったて、もう一回F8押したところに「型が一致しない」とエラー
 これは「インデックスが〜」のエラーではないですね。
 エラーが出た時に、集計.Cells(NO検索, 月最終列) が、どこのセルになっているか。
 そのセルには何の値が入っているか。それは思っているものと同じか。
 確認してみて下さい。

 **************************************************
 私どのコードで実行したのかしら (´ロ`ill)
 上書きしてしまいました。

 今のエラーは「ボタン」クリックしてコードで実行すると
 「インデックスが〜」となりますし。
 ステップインすると「1014 アプリケーションが〜」のエラーになってます。

 ※↓不要な部分は無視してください。
 Sub test16()
 Dim NO検索 As Long, NO最終行 As Long
    Dim 月検索 As Long, 月最終列 As Long
    Dim I As Long
    Dim 行番号 As Long
    Dim 集計 As Worksheet
    Dim データー As Worksheet
    Dim カウント As Long
    Dim 箱 As Variant

    Set 集計 = Worksheets("Sheet5")
    Set データー = Worksheets("Sheet6")

    NO最終行 = 集計.Cells(Rows.Count, 1).End(xlUp).Row
    月最終列 = 集計.Cells(2, Columns.Count).End(xlToLeft).Column

    集計.Range(集計.Cells(3, 5), 集計.Cells(NO最終行 - 1, 月最終列)).ClearContents

    'ReDim 箱(結果入れる行の数 , 結果入れる列の数)入れるの変数 [集計シード]
    ReDim 箱(1 To 4, 1 To 13)

      For I = 3 To データー.Cells(Rows.Count, 1).End(xlUp).Row
         If 集計.Range("B1").Value = "" Or (集計.Range("B1").Value <> "" And データー.Range("C" & I).Value = 集計.Range("B1").Value) Then
            '集計シートにデーターシート(A3のセルから検索)と同じ値があるかを調べる(0=なし、1=1個ある、2以上はダブってる)
             カウント = WorksheetFunction.CountIf(集計.Range("A3:A" & Rows.Count), データー.Cells(I, "E"))

        If カウント <> 0 Then

                NO検索 = Application.Match(データー.Cells(I, "E"), 集計.Range("A3:A6"), 0)

                    箱(NO検索 - 2, 月最終列 - 4) = 集計.Cells(NO検索, 月最終列) + データー.Cells(I, "j")
            End If
            End If

     Next

     集計.Cells(3, 5).Resize(4, 月最終列 - 4).Value = 箱

 End Sub

(もみじ坂) 2015/03/05(木) 23:30


 新スレにされてたんですね。
 気づかず 遅くなってすみません。
 (次からは、前のスレにも次スレへのリンクをしてもらえると良いのですが。)

 集計シートのQ1セル(最終列の1行目のセル)に「最終列」と入力して
 test16を実行してみてください。

 たぶん、「型が一致しない」のエラーが起きた時は そのような状況になっていたと思います。
  
(HANA) 2015/03/07(土) 10:56

 >次からは、前のスレにも次スレへのリンクをしてもらえると良いのですが。
 すみません ≧≦そうするようにします。。。。

 NO検索 = Application.Match(データー.Cells(I, "E"), 集計.Range("A3:A6"), 0)
      箱(NO検索 - 2, 月最終列 - 4) = 集計.Cells(NO検索, 月最終列) + データー.Cells(I, "j")

 この場合は

 NO検索 検索値「1」 は 3行目 で

 NO検索-2になると 「−1」 1行目の最終列は数字ではなく文字のためエラーが起こった(。´・ω・)ん?

 これを I=3 の時を考えますと
 箱(A1, M3) = 集計.Cells(A3, Q3) + データー.Cells(A3, "j")
 になるますか (。´・ω・)ん?
(もみじ坂) 2015/03/08(日) 23:07

 >1行目の最終列は数字ではなく文字のためエラーが起こった
 なのですが、その前に書いてある
 >NO検索 検索値「1」 は 3行目 で
 >NO検索-2になると 「−1」
 が、なんで書いてあるのか分からないのですが。

 今回の件と何か関係があるから書いたのでしょうか?

 >箱(A1, M3) = 集計.Cells(A3, Q3) + データー.Cells(A3, "j")
 A3とか、Q3とかって、何ですか?
  
(HANA) 2015/03/08(日) 23:33

 > 今回の件と何か関係があるから書いたのでしょうか?
 > A3とか、Q3とかって、何ですか?

 余計な事を書きましたか(。´・ω・)ん?
 ここは検査結果のセルを書いたつもりですが。。。。
 おさらいもかねて
 不要でしたらスルーしてください (TxT)

(もみじ坂) 2015/03/10(火) 18:34


 >おさらいもかねて 
 でしたら、もっと詳しくご説明願います。
  
(HANA) 2015/03/10(火) 18:42

 For I = 3 To データー.Cells(Rows.Count, 1).End(xlUp).Row
 で1順目のとき  Iが3の時

 この変数の検索結果のセルが
 箱(NO検索 - 2, 月最終列 - 4) = 集計.Cells(NO検索, 月最終列) + データー.Cells(I, "j")
    ^^^[-1]^^^   ^^^[13]^^^                ^^[1]^^ ^^[17]^^                ^[3]^

 変数の検索結果をエクセルのセルに置き換えると

 箱(NO検索 - 2, 月最終列 - 4) = 集計.Cells(NO検索, 月最終列) + データー.Cells(I, "j")
    ([-1] , [13])がM1になる?             ([1]、[17])がQ3になる?        ^[3行目]^

 |.)ソ--。。。Q1で検索はしてないのになぜエラー?。。。。

(もみじ坂) 2015/03/10(火) 19:48


 えっと
 >集計.Cells(NO検索, 月最終列)
 >           ([1]、[17])がQ3になる?
 ですが、
    集計.Cells(1 , 17)が、Q3セルって事ですか?
  
(HANA) 2015/03/10(火) 20:29

 NO検索 = Application.Match(データー.Cells(I, "E"), 集計.Range("A3:A6"), 0)

 NO検索がA3から下方向に一行ずつ移動するので、
 検索結果「1」 は A3 から と思ったんですが
 違いますか(。´・ω・`)ん?
(もみじ坂) 2015/03/12(木) 11:58

 >一行ずつ移動する
 >A3 から
 って所が、何を言っておられるのか分からないのですが。

 色々なことを考えずに  集計.Cells(1 , 1)  のセルが
 どのシートのどのセルの事かと聞かれたら
 どこだと答えますか?
  
(HANA) 2015/03/12(木) 12:53

A1です(。´・ω・)
(もみじ坂) 2015/03/12(木) 20:39

 ですよね。

 じゃあ、集計.Cells(1 , 17) は?
  
(HANA) 2015/03/12(木) 20:51

 Q1です。

 あ!!ΣΣ(゚д゚lll)!
 そうでした。
 A3 に NO検索値結果 「1」なるようにすることはできても
 NO検索値結果 「1」 は必ずしも A3ではない で した (。´・ω・)ん?
 見方で混乱してますね (´ロ`ill)
(もみじ坂) 2015/03/13(金) 15:38

 >A3 に NO検索値結果 「1」なるようにすることはできても
 A3セルに目的の値が有った時に、変数:NO検索の値が「1」になる様にする事は出来ても

 ↑と言う事を書こうとしてますか?

 その下の
 >NO検索値結果 「1」 は必ずしも A3ではない
 の方は何の事か全くわかりません。
  
(HANA) 2015/03/13(金) 20:39

 > A3セルに目的の値が有った時に、変数:NO検索の値が「1」になる様にする事は出来ても
 はいそうです。

 以前のコメントで書かれたのが、
 >3行目の位置が 変数:箱 の1行目になりますので、3行目に有った場合「1」になるようにして下さい。
 (HANA) 2015/02/01(日) 18:59
 でしたので、そのために

 >NO検索 = Application.Match(データー.Cells(I, "E"), 集計.Range("A3:A6"), 0)
 を 集計.Range("A:A") ではな 集計.Range("A3:A6") に変更しました。

 なので、私は NO検索(変数:箱を使っても使わなくても) とは

 3行目に有った場合「1」と
 「1」の場合は 3行目である は同じと思ったんです。

 しかしそれは変数:箱を使った場合のみの考え方なのかな?と思いかえしました。
 (実際書いてありましたしね −x−)

 ▼答えはこれであってますか? 
 箱(NO検索 - 2, 月最終列 - 4) = 集計.Cells(NO検索, 月最終列) + データー.Cells(I, "j")
    (1行目 , 13列目)=M1               (1行目、17列目)=Q1           ^[3行目]^

 ▼この場合の答えはこれであってますか?
  箱(NO検索, 月最終列) = 箱(NO検索, 月最終列)  + データー.Cells(I, "j")
   (3行目 , 17列目)=Q3   (3行目 , 17列目)=Q3           ^[3行目]^

(もみじ坂) 2015/03/14(土) 00:29


 えっと。。。
 >NO検索(変数:箱を使っても使わなくても) とは
 >3行目に有った場合「1」と
 >「1」の場合は 3行目である は同じと思ったんです。
 そうですよ。

 でも、コードを読み解く時に 何の関係がありますか?

 A3:A6の範囲から検索値を探すとA3に有るので変数:NO検索には「1」が入る。
 変数:NO検索に「1」が入っていたら、A3:A6の範囲の1番目に有るので A3セルにある。

 なんでそんな当たり前の事を考えるのですか?

 >▼答えはこれであってますか? 
 >箱(NO検索 - 2, 月最終列 - 4) = 集計.Cells(NO検索, 月最終列) + データー.Cells(I, "j")
 >   (1行目 , 13列目)=M1               (1行目、17列目)=Q1           ^[3行目]^

 変数:NO検索が「1」で、変数:月最終列が「17」だった時
 集計.Cells(NO検索, 月最終列)は、Sheet5のQ1セルの事ですね。

 そして、iが3の時を考えるので
 データー.Cells(I, "j")は、Sheet6のJ3(3行目の)セルの事です。

 上から順番にコードを読んでいくなら、ループ処理の間で
 箱(NO検索 - 2, 月最終列 - 4) は、M1と言うのはわかりません。

 最後の
 >集計.Cells(3, 5).Resize(4, 月最終列 - 4).Value = 箱
 の行があって初めて 箱(1 ,1)が E3の位置に書き出されるのです。

 >▼この場合の答えはこれであってますか?
 にも関連することですが 
[[20141213185105]]『マクロで合計 5』 の
(HANA) 2015/01/30(金) 10:06 あたりで話をしたと思いますが。
  
(HANA) 2015/03/14(土) 20:47

 >あたりで話をしたと思いますが。
 はい。

 私あれなんですよ、変数:箱()は名の通り一時格納する箱なのに。
 集計.Cells(NO検索, 月最終列) のように エクセルのセルをあてはめようとするので、

 話はおかしくなるんですね (´ロ`ill)

 スルーしてください。。。。。。。

 ▼箱の変数使って セルにあてはめようとするやつはなかったことにしてさい。(*´ノД`)
 箱(NO検索 - 2, 月最終列 - 4) 
    (1行目 , 13列目)=M1   

 次へ進めてくださいませ。。。 TxT   
(もみじ坂) 2015/03/16(月) 00:06

 >変数:箱()は名の通り一時格納する箱なのに。
 >集計.Cells(NO検索, 月最終列) のように エクセルのセルをあてはめようとするので
 >話はおかしくなるんですね
 そうですよ。

 セルに直接値を書き込んでいくと、ステップインで実行した時
 途中で希望通りになっているか  簡単に見えますし
 行列を実際に数えれば良いので、イメージも分かりやすいかもしれません。
 でも、変数を使う利点をしっかり理解して下さい。

 コードは、どこまで出来たんでしたっけ?
  
(HANA) 2015/03/16(月) 00:25

 >コードは、どこまで出来たんでしたっけ?
 えーと進んでないですよ ^^;;

 Sub test15()
    Dim NO検索 As Long, NO最終行 As Long
    Dim 月検索 As Long, 月最終列 As Long
    Dim I As Long
    Dim 行番号 As Long
    Dim 集計 As Worksheet
    Dim データー As Worksheet
    Dim カウント As Long
    Dim 箱 As Variant

   Set 集計 = Worksheets("Sheet5")
    Set データー = Worksheets("Sheet6")
    NO最終行 = 集計.Cells(Rows.Count, 1).End(xlUp).Row
 ReDim 箱(1 To 4, 1 To 13)
      For I = 3 To データー.Cells(Rows.Count, 1).End(xlUp).Row
             '集計シートにデーターシート(A3のセルから検索)と同じ値があるかを調べる(0=なし、1=1個ある、2以上はダブってる)
             カウント = WorksheetFunction.CountIf(集計.Range("A3:A" & Rows.Count), データー.Cells(I, "E"))
        If カウント <> 0 Then
                NO検索 = Application.Match(データー.Cells(I, "E"), 集計.Range("A3:A6"), 0)
                   '集計シートで見つかったクロスしたセル=集計シートで見つかったクロスしたセル+データーシートで見つかった値
                    箱(NO検索, 13) = 箱(NO検索, 13) + データー.Cells(I, "j")

            End If
            End If

 ここまでです。
 変数:箱()を必要な数の仕切りを区切って
 集計シートの最終列(月別の総合計)の計算式を変数:箱()に格納

 次は多分
 月別の計算になるではないかと。。。。
(もみじ坂) 2015/03/17(火) 01:03

 >次は多分 月別の計算になるではないかと。。。。
 そうですね。
 まずはそれが良いかもですね。

 じゃぁ、やってみて下さい。
 箱(NO検索, 13) = 箱(NO検索, 13) + データー.Cells(I, "j")
            ~~               ~~
 いま「13」になっている所が、1月だったら1・2月だったら2・3月だったら・・・・って事ですよね。
  
(HANA) 2015/03/17(火) 09:00

 こうですか?
 何度かループで確認しましたがエラーはでませんでした。

 Sub test17()

    Dim NO検索 As Long, NO最終行 As Long
    Dim 月検索 As Long, 月最終列 As Long
    Dim I As Long
    Dim 行番号 As Long
    Dim 集計 As Worksheet
    Dim データー As Worksheet
    Dim カウント As Long
    Dim 箱 As Variant

    Set 集計 = Worksheets("Sheet5")
    Set データー = Worksheets("Sheet6")

    NO最終行 = 集計.Cells(Rows.Count, 1).End(xlUp).Row
    月最終列 = 集計.Cells(2, Columns.Count).End(xlToLeft).Column

    集計.Range(集計.Cells(3, 5), 集計.Cells(NO最終行 - 1, 月最終列)).ClearContents

    'ReDim 箱(結果入れる行の数 , 結果入れる列の数)入れるの変数 [集計シード]
    ReDim 箱(1 To 4, 1 To 13)

      For I = 3 To データー.Cells(Rows.Count, 1).End(xlUp).Row
         If 集計.Range("B1").Value = "" Or (集計.Range("B1").Value <> "" And データー.Range("C" & I).Value = 集計.Range("B1").Value) Then
            '集計シートにデーターシート(A3のセルから検索)と同じ値があるかを調べる(0=なし、1=1個ある、2以上はダブってる)
             カウント = WorksheetFunction.CountIf(集計.Range("A3:A" & Rows.Count), データー.Cells(I, "E"))

            If カウント <> 0 Then
                NO検索 = Application.Match(データー.Cells(I, "E"), 集計.Range("A3:A" & Rows.Count), 0)
                月検索 = Application.Match(Month(データー.Cells(I, "B")), 集計.Range("2:2"), 0)

                     '集計シートで見つかったクロスしたセル=集計シートで見つかったクロスしたセル+データーシートで見つかった値
                    箱(NO検索, 月検索) = 箱(NO検索, 月検索) + データー.Cells(I, "j")
                    箱(NO検索, 13) = 箱(NO検索, 13) + データー.Cells(I, "j")
            End If
            End If

     Next
(もみじ坂) 2015/03/18(水) 19:00

 >いま「13」になっている所が、1月だったら1・2月だったら2・3月だったら・・・・って事ですよね。
 って書いているのですが。
  
(HANA) 2015/03/18(水) 20:44

 >いま「13」になっている所が、1月だったら1・2月だったら2・3月だったら・・・・って事ですよね。
 それは1月から12月までという意味ではなさそうですね。

 1月の時 2月の時と 「13」のように列番号を指定する意味でしょうか?
 '1月の時は5列目です。↓こんな感じでしょうか?
 箱(NO検索, 5) = 箱(NO検索, 5) + データー.Cells(I, "j")

 2・3 月の時はどういう意味でしょうか?
(もみじ坂) 2015/03/19(木) 00:22

 まず一つ聞いてみるのですが
 >何度かループで確認しましたがエラーはでませんでした。
 それで、変数:箱 の中に期待する結果が出来ていますか?
 ローカルウィンドウを表示させて、結果を確認する様にして下さい。

 >月検索 = Application.Match(Month(データー.Cells(I, "B")), 集計.Range("2:2"), 0)
 で、1月の時に 変数:月検索が「1」となるためには
 集計.Range("2:2")の先頭セル=A2セルに「1」と入っていないといけないと思いますが
 その様になっているのですか?

 > '1月の時は5列目です。↓こんな感じでしょうか?
 >> [[20141213185105]]『マクロで合計 5』 の
 >>(HANA) 2015/01/30(金) 10:06 あたりで話をしたと思いますが。
 ですよ?
 今は、変数:箱にデータを作っているのですから
 結果出力範囲のセルを見るのはいい加減にやめて下さい。

 何度も同じ話をしてますよ?
  
(HANA) 2015/03/19(木) 08:35

 >結果出力範囲のセルを見るのはいい加減にやめて下さい。
 してませんよ(。´・ω・)ん?
 コードの途中までしか出してませんし。。。。

 >ローカルウィンドウを表示させて、結果を確認する様にして下さい。
 もちろんしてますよ。
 現時点でこれしか確認できませんので (´・ω・`)

 >1月の時に 変数:月検索が「1」となるためには
 >集計.Range("2:2")の先頭セル=A2セルに「1」と入っていないといけないと思いますがその様になっているのですか?
 (。´・ω・)ん? A2セルに「1」になったら 1月の時の 変数:月検索が「5」になっちゃいませんか?????

(もみじ坂) 2015/03/19(木) 23:19


 >A2セルに「1」になったら 1月の時の 変数:月検索が「5」になっちゃいませんか?????
 えっ、なんでですか。。。?

 まぁ
 >>ローカルウィンドウを表示させて、結果を確認する様にして下さい。
 >もちろんしてますよ。
 と言う事は、変数:箱 に期待する結果が出来てる って事ですか?

 でしたら、書き出してみてもらうと良いと思いますが。
  
(HANA) 2015/03/20(金) 14:19

 > E3セルに入れる値は、箱(1 ,1)に入れていくことになりますが
 前回 ↑ と同じように

 今回は
 1月の時に(E2) 変数:月検索が「1」になるようにする
 と認識でしょろしいでしょうか?

 >と言う事は、変数:箱 に期待する結果が出来てる って事ですか?
 多分違うと思います。
 期待する結果は現在まだ私の中ではっきりしていないと今わかりました。

 現在の検索結果です。
  : NO検索  :  1  : Long
  : NO最終行 :  6  : Long
  : 月検索  :  5  : Long
  : 月最終列 : 17  : Long
  : I     :  3  : Long

(もみじ坂) 2015/03/20(金) 15:27


 >1月の時に(E2) 変数:月検索が「1」になるようにする
 ですから
 >>いま「13」になっている所が、1月だったら1・2月だったら2・3月だったら・・・・
 と書いているのですが。
  
(HANA) 2015/03/20(金) 17:16

 >と書いているのですが。
 言葉ではなく意味合いの方です。。。。。

 例えば
 1月のみでしたら、
 「13」箇所を 多分「1」にするのかな?

 1・2・3・・・・・12月を一か月ごとを計算したいときは
 For I = 3 To データー.Cells(Rows.Count, 1).End(xlUp).Row
 すればいいと思いますが。。

 E3セルに入れる値は、箱(1 ,1)にしたい場合
 集計.Range("A3:A" & Rows.Count
 範囲を変更してます。

 集計シートの月とデーターシートと同じ月を見つけるには
 NO検索 = Application.Match(データー.Cells(I, "E"), 集計.Range("A3:A" & Rows.Count), 0)
 のように関数を使いますが。

 始めののことを遭遇すると、なんのこっちゃ?と思ってしまうのです(*´ノД`)

 今回は
 1.いま「13」になっている所が、1月だったら1・2月だったら2・3月だったら・・・・
 2.1月の時に 変数:月検索が「1」となるためには
 3.集計.Range("2:2")の先頭セル=A2セルに「1」と入っていないといけない

 2.は月検索使って工夫すればなんとなくできそう。
 3.だけなら、そのまま 月検索 使えばその結果になりますよね
 でも
 1.てなんのこっちゃ?
 ↑上の例説明で該当のものなさそうですし、、、

 変数を使っていいのやら?使わない方がいいのやら、そのまま数字を使うのやら?
 と現在の私の疑問です。

(もみじ坂) 2015/03/20(金) 19:18


 1月だったら、変数:箱  の一列目に値を足していかないといけない  ってのは
 理解できているのでしょうか?

 変数を使うまでもないと思いますが、使った方がわかりやすければ  使えば良いと思います。

 でも、MATCH関数は使わない方向で考えてみてください。
 集計の列は、最後の列がどこか探さなくても、13列目でしたよね。
 各月の合計も  何列目にあるか探す必要はないですよね。

 何度も書きますが
 1月だったら1列目、2月だったら2列目、3月だったら3列目・・・と決まっていますから。

 >月検索 = Application.Match(Month(データー.Cells(I, "B")), 集計.Range("2:2"), 0)
 のとき、検索値は1月だったら1、2月だったら2・・・ってしたんじゃないんですか?
  
(HANA) 2015/03/20(金) 21:19

 > 1.いま「13」になっている所が、1月だったら1・2月だったら2・3月だったら・・・・
 すみません。勘違いしてしまいました。
 >1月だったら1列目、2月だったら2列目、3月だったら3列目・・・と決まっていますから。
 これで理解できました。

 >1月だったら、変数:箱  の一列目に値を足していかないといけない 
 >変数を使うまでもないと思いますが
 数字でもないですよね。多分(。´・ω・)ん?
 やってみます。

 >月検索 = Application.Match(Month(データー.Cells(I, "B")), 集計.Range("2:2"), 0)
 >のとき、検索値は1月だったら1、2月だったら2・・・ってしたんじゃないんですか?

 検索結果に記載したとおりに 1月は「5」でした。
 見方違いましたか?
(もみじ坂) 2015/03/20(金) 23:50

 「検索値」の話をしています。
 「変数:月検索」の話ではありません。

 MATCH関数を使っていますが、何を  集計.Range("2:2")  の中から
 探す式にしたのですか?
  
(HANA) 2015/03/21(土) 08:04

 >MATCH関数を使っていますが、何を  集計.Range("2:2")  の中から 探す式にしたのですか?
 データーシートと同じ月です。

 こういう意味ですか?
 >1月だったら1列目、2月だったら2列目、3月だったら3列目・・・と決まっていますから。
 MATCH関数を使っていちいち探さなくてもいいじゃない? て感じですか?

 もし1月のみ計算するときは下のような式になりますね。
 箱(NO検索, 1) = 箱(NO検索, 1) + データー.Cells(I, "j")
 あとは2月、3月に自動に移動する方法を探せば計算できるよと認識であってますか?

(もみじ坂) 2015/03/21(土) 19:03


 まぁ、そう言うことです。
  
(HANA) 2015/03/21(土) 21:46

 う〜んとですね
 MATCH関数は使わなくても
 >>1月だったら1列目、2月だったら2列目、3月だったら3列目・・・と決まっていますから。
 1月なら1列目に入れといてよ
 というような指令分?も必要ないでしょうか?

 列の移動だけなら

 For
 Next
 使えるかと思ったんですが、そんな単純な事じゃできなさそうな予感します。
(もみじ坂) 2015/03/24(火) 22:48

 何度も書くのは面倒なので
 (HANA) 2015/03/20(金) 21:19 の、最後の二行を読んでください
 とだけ、書いておきます。
  
(HANA) 2015/03/24(火) 23:52

 。。。質問をかえます (*´ノД`)

 ▼(HANA)様のコメントを書き出してみました。
 1.>1月の時に 変数:月検索が「1」となるためには,集計.Range("2:2")の先頭セル=A2セルに「1」と入っていないといけない
 2.>1月だったら、変数:箱  の一列目に値を足していかないといけない
 3.>今は、変数:箱にデータを作っているのですから、結果出力範囲のセルを見るのはいい加減にやめて下さい。

 4.>いま「13」になっている所が、1月だったら1列目、2月だったら2列目、3月だったら3列目・・と決まっています。
 5.>集計の列は、最後の列がどこか探さなくても、13列目でしたよね。
 6.>各月の合計も  何列目にあるか探す必要はないですよね。
 7.>月検索 = Application.Match(Month(データー.Cells(I, "B")), 集計.Range("2:2"), 0)
     のとき、検索値は1月だったら1、2月だったら2・・・ってしたんじゃないんですか?

 8.>変数を使うまでもないと思いますが、使った方がわかりやすければ  使えば良いと思います。
 9.>でも、MATCH関数は使わない方向で考えてみてください。

 ▼私の考えとりあえず1月のみを考えてみても
  箱(NO検索, 1) = 箱(NO検索, 1) + データー.Cells(I, "j")

 例え決まったとしても、変数:箱 だけでは 4.〜7. の答えにたどり着かないですよね。
 だって、
 変数:箱 「1」は一月でも。
 データーシートの一月のものを選んで?「1」に入れる必要ある
 その役割を今まではMATCH関数がそれをしてくれているので、他の方法を探さないといけない。 

 ◆疑問
  1.MATCH関数使わない方向にして、IF関数は使ってもいいの?それともほかの方法?
   でも違う関数を使うなら、MATCH関数のままでいいのでは??
  
   2.1.〜3.なんて。私の中では矛盾でだらけです。「1」がなんで2か所もあるの?
   3. 8.と9.はまあおいおいとしてもいいかなと。
  4.7.はたしかに変数:箱 では 1月は「1」ですが 変数:月検索 1月「5」ですよね。
    集計.Range("2:2") を 集計.Range(E2&最終列) みたいなのにするなら 「1」になりそうですが。
  なぜそう思ったのかは。

 変数:NO検索を 3行目が 「1」にするため  集計.Range("A3:A" & Rows.Count)
 したのに、集計.Range("2:2") のままで。 1月が「1」にするのは無理じゃ。。。

 私とHANA様の見るところが違うと思いますが。。。なんで、そこで食い違ったのかの原因を知りたいです。

 (もみじ坂) 2015/03/25(水) 17:07

 MATCH関数は
 >データーシートの一月のものを選んで?
 なんて事してませんよ。

 順番が逆になってはだめです。

 >Application.Match(Month(データー.Cells(I, "B")), 集計.Range("2:2"), 0)
 は
 データー.Cells(I, "B")の月が 集計.Range("2:2") どこにあるのか調べる
 です。

 それから、変数:月検索 と 私が今言っている MATCH関数の検索値 は違うものを指していると
 わかってもらえていますか?

 もみじ坂さんは、同じものだと思っておられるように感じるのですが。

 変数:月検索 は Application.Match(〜〜〜) の結果が入りますね。
 MATCH関数の検索値と言っているのは
 >Application.Match(Month(データー.Cells(I, "B")), 集計.Range("2:2"), 0)
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ここの事ですよ。
 MATCH関数は MATCH(検査値, 検査範囲, [照合の型]) の様に引数を設定するのですよね?

 >集計.Range("2:2") のままで。 1月が「1」にするのは無理じゃ。。。
 MATCH関数を使わない方向で考えるように言っているのに
 なんでMATCH関数を使う方向で考えているのですか?

 >違う関数を使うなら、MATCH関数のままでいいのでは??
 使う必要がないけど、何も言わないともみじ坂さんは使ってしまうだろうから
 あえて「使わない様に」とかいています。

 >「1」がなんで2か所もあるの?
 これは
 >>1月の時に 変数:月検索が「1」となるためには,集計.Range("2:2")の先頭セル=A2セルに「1」と入っていないといけない
 の所の話ですか?

 ワークシート上で、確認してみたらどうですか?
 たとえば、A1セルに「1月1日」の日付を入れます。
 2行目は、E列から 1,2,3,4・・・と12まで数値が入っているのですよね? 
 A2セルに =MATCH(MONTH(A1),2:2,0) の式を入れると A2セルの値は「5」になりますよね?
 A2セルの値=変数:月検索が「1」となるためには、2行目の先頭セル=A2セルに「1」と入っていないといけない。

 何が納得いきませんか?

 >4.7.はたしかに変数:箱 では 1月は「1」ですが 変数:月検索 1月「5」ですよね。
 そうです。現在の式を使うと「5」になります。
 だから、その式ではだめなんですよ。
  
(HANA) 2015/03/25(水) 17:46

 >もみじ坂さんは、同じものだと思っておられるように感じるのですが。
 その通りです。だから話がかみ合わなかったんですね (*´ノД`)
 変数:月検索 と MATCH関数の検査値(MATCH(検査値, 検査範囲, [照合の型]))のこのなんですね。

 こういうことですか?

 変数:月検索が「1」にするには 1月(E3) の時の検索値を「1」にする現在は「5」

 けどMATCH関数は使わない。

 MATCH関数というのはここの部分
 Match(Month(データー.Cells(I, "B")), 集計.Range("2:2"), 0)

 という認識でよろしいでしょうか?

 ていうことはマクロとしては
 現在 データー.Cells(I, "B")の月が 集計.Range("2:2") どこにあるのか調べる
 それを
 データー.Cells(I, "B")の月が1月なら 集計シートの1列目に(E3)
 データー.Cells(I, "B")の月が2月なら 集計シートの2列目に(E4)

 ということでしょうか?

(もみじ坂) 2015/03/27(金) 23:43


  変数:月検索 と MATCH関数の検査値 が違うという話は
(HANA) 2015/03/20(金) 21:19
 から
(HANA) 2015/03/21(土) 08:04
 で書いていますので、もう一度読んでください。

 またその下の書き込みに関しては
(HANA) 2015/03/14(土) 20:47
 あたりから、もう一度読み返して下さい。
  
(HANA) 2015/03/28(土) 00:05

 (HANA)様

 私ごとで大変恐縮ですが、現在なかなか時間が取れない現状が続いています。
 来月から移動のようで、、、、ネットが使いえない環境がしばらく続く模様です。

 数か月間にわたり、丁寧に教えていただき本当にありがとうございます。
 こんな中途半端な形で終わるのは不本意ですが、、、、、

 また、時間ができたときに質問しにくると思いますので、
 その時もまた教えていただけるとうれしいです。

 本当にありがとうございます m(_ _)m

(もみじ坂) 2015/04/03(金) 00:36


 お気になさらずに。
 新環境でも、もみじ坂さんの能力が遺憾なく発揮できることを
 お祈りしております。
  
(HANA) 2015/04/03(金) 12:48

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.