Excel VBA質問箱 IV

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

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


5620 / 13645 ツリー ←次へ | 前へ→

【49785】シート1の工数合計値をシート2の3つの条件に合うセルに加算していきたい... 川森正守 07/6/21(木) 21:46 質問[未読]
【49786】Re:シート1の工数合計値をシート2の3つ... かみちゃん 07/6/21(木) 22:06 発言[未読]
【49787】Re:シート1の工数合計値をシート2の3つ... かみちゃん 07/6/21(木) 22:43 発言[未読]
【49788】Re:シート1の工数合計値をシート2の3つ... Kein 07/6/22(金) 1:43 回答[未読]
【49807】Re:シート1の工数合計値をシート2の3つ... 川森正守 07/6/23(土) 7:14 お礼[未読]

【49785】シート1の工数合計値をシート2の3つの...
質問  川森正守 E-MAIL  - 07/6/21(木) 21:46 -

引用なし
パスワード
   初めて投稿します。全くの初心者で参考書を見ながら色々やってみましたが、どうもうまくいきません。お忙しいところ恐縮ですが、どなたかお教えください。

シート1(作業日報)

行\列 A B(日付) C(職場) 〜 I(区分) 〜 N(合計)
5     70121  11     10      4
6     70122  22     10      8
7     70124  33     30      9
8     70125  44     50      3
9     70125  55     61      20
10     70126  66     61      13
11     70126  77     62      18
12     70127  88     63      10
:      :  :     :      :
:      :  :      :      :



シート2(工数集計表)

行\列 A  B  C 〜 H  I  J  K 〜 P  Q  R  S 〜 X   Y

2       10         30         50
3       1月・・6月  計   1月・・6月  計   1月・・6月  計
4   11   
5   22   *毎月末にシート   
6   33    1の合計値(N列)
7   44    を先頭から順に    *同左       *同左
8   55    参照し、このシ
9   66    −ト2の該当セル
10   77    に加算していく。
:   : 
:   :
26   99
27   計
28

29       61         62         63
30       1月・・6月  計   1月・・6月  計   1月・・6月  計
31   11   *毎月末にシート
32   22    1の合計値(N列)   
33   33    を先頭から順に   *同左       *同左
34   44    参照し、このシ
35   55    −ト2の該当セル
36   66    に加算していく。
37   77
:   : 
:   :
53   99
54   計

*シート1の説明
 シート1の作業日報は、工員の日々の作業工数を区分(工場区分で6種類あ  
 る。)をキィに月末現在でまとめたものである。
 表は1.区分2.日付3.職場(23種類ある。)の順でソートしてある。
 件数は月によって違います。
*シート2の説明
 シート2の工数集計表は、月々の作業日報の工数を半年分まとめようとするもの
 です。(毎月末に転記)
 A4横版1枚に収まるように、3列、2段に区分番号をキィに6枚表を作ってい
 る。(リンクの関係で、変更はできない。)
 データは4行目と31行目から、区分番号は8列間隔で記述してある。
*私がやりたいこと
 シート1のN列の合計数値を上から順に参照し、シート2の該当する表(区分)
 の当該月の該当する職場コードのセルに加算していきたいのです。
 マニュアル本を参考に、表(区分)を見つけるコードだけは何とか下記のように 作りましたが、(間違っていますが)月と職場を見つけるコードと3つの条件を 満たすセルに書き込むコードがよくわかりません。
 全くの初心者ですので、どなたか、全般的にプロシージャをお教えください。
 よろしくご指導をお願いいたします。なお、計に関する記述は不要です。

Sub 区分()
  Dim k As Integer  ’日報の行
  Dim j As Byte   ’集計表の列
  Dim i As Byte   ’集計表の行
  Dim h As Byte   ’日報の列
  Dim ws1 As Worksheet
  set ws1 = Workbooks("1月日報.xls").sheets(1)
  K = 5
  Do while ws1.cells(k,9) <> ""
    i = 2
    Do while i <= 29
     j = 3
     Do while j <= 19
       If ws1.cells(k.9) = Worksheets("工数集計表").cells(i,j) Then
         GoTo NEXTROW
       END If
       j = j + 8

     Loop
     i = i + 27
    Loop
 NEXTROW:
     k = K + 1
    Loop
End Sub


 

【49786】Re:シート1の工数合計値をシート2の3...
発言  かみちゃん E-MAIL  - 07/6/21(木) 22:06 -

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

>行\列 A B(日付) C(職場) 〜 I(区分) 〜 N(合計)
> 5     70121  11     10      4
> 6     70122  22     10      8

日付の70121のうち、月は、2桁目と3桁目なのですか?
01〜12があると思いますが、

> シート2の工数集計表は、月々の作業日報の工数を半年分まとめようとするもの

上期と下期でどのようなシート構成になっているのでしょうか?

> シート1のN列の合計数値を上から順に参照し、シート2の該当する表(区分)
> の当該月の該当する職場コードのセルに加算していきたいのです。

intCol = Application.Match(職場,Sheets("Sheet2").Rows(2),0)
というような感じで、職場の最初の列を検索して、そこから月数-1をOffsetすること
で、転記先列位置を取得することでできると思います。

【49787】Re:シート1の工数合計値をシート2の3...
発言  かみちゃん E-MAIL  - 07/6/21(木) 22:43 -

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

> シート1のN列の合計数値を上から順に参照し、シート2の該当する表(区分)
> の当該月の該当する職場コードのセルに加算していきたい

日付は、70121とある場合、2桁目と3桁目が月であるという前提、
7月以降データにはとりあえず対応しないという前提ですと、
以下のようなコードでできると思います。

Sub Sample1()
 Dim WS1 As Worksheet
 Dim WS2 As Worksheet
 Dim LastCell1 As Range
 Dim LastCell2 As Range
 Dim c As Range
 Dim intMM As Integer
 Dim intCol As Integer
 Dim lngRow As Long
 Dim lngFindRow As Long
  
 Set WS1 = Sheets("Sheet1")
 Set WS2 = Sheets("Sheet2")
 Set LastCell1 = WS1.Cells(Rows.Count, "B").End(xlUp)
 Set LastCell2 = WS2.Cells(Rows.Count, "B").End(xlUp)
 
 For Each c In WS1.Range("B2", LastCell1)
  intMM = Val(Mid(c.Value, 2, 2))
  For lngFindRow = 2 To LastCell2.Row Step 27
   intCol = 0
   On Error Resume Next
   intCol = Application.Match(c.Offset(, 7).Value, WS2.Rows(lngFindRow), 0)
   On Error GoTo 0
   If intCol > 0 Then
    lngRow = 0
    On Error Resume Next
    lngRow = Application.Match(c.Offset(, 1).Value, WS2.Cells(lngFindRow + 2, "B").Resize(25), 0)
    On Error GoTo 0
    If lngRow > 0 Then
     lngRow = lngFindRow + lngRow + 1
    End If
    Exit For
   End If
  Next
  With WS2.Cells(lngRow, intCol + intMM - 1)
   .Value = .Value + c.Offset(, 12).Value
  End With
 Next
 MsgBox "終了しました"
End Sub

なお、7月以降のデータに対応する場合は、一部を修正することで対応可能です。

【49788】Re:シート1の工数合計値をシート2の3...
回答  Kein  - 07/6/22(金) 1:43 -

引用なし
パスワード
   作業日報シートのN列最終入力行は、列の合計をする数式が入っているとして
そこを処理対象から外しました。
あと工数集計表シートの各区分の表は、職場が全てA列の値と一致している
(つまりI列もQ列もA列のコピー)という前提で、A列のみから検索しています。
もう一つ、当然ですが作業日報シートのB列の値は、確実に日付型であることも
前提になります。そうでないと Month関数 がエラーになります。

Sub MyData_Total()
  Dim Ary1 As Variant, Ary2 As Variant
  Dim Sh1 As Worksheet, Sh2 As Worksheet
  Dim C As Range
  Dim MyM As Integer, i As Integer
  Dim xC As Integer, xR As Integer
  Dim Ad As String
 
  Ary1 = Array(10, 30, 50, 61, 62, 63)
  Ary2 = Array(0, 2, 10, 18, 2, 10, 18)
  Set Sh1 = Worksheets("作業日報")
  Set Sh2 = Worksheets("工数集計表")
  With Application
   For Each C In Sh1.Range("N5", _
   Sh1.Range("N65536").End(xlUp).Offset(-1))
     MyM = Month(C.Offset(, -12).Value) - 1
     i = .Match(C.Offset(, -5).Value, Ary1, 0)
     xC = MyM + Ary2(i)
     Select Case i
      Case 1 To 3: Ad = "A1:A28"
      Case Else: Ad = "A31:A58"
     End Select
     xR = .Match(C.Offset(, -11).Value, Sh2.Range(Ad), 0)
     If Ad = "A31:A58" Then xR = xR + 30
     With Sh2.Cells(xR, xC)
      .Value = .Value + C.Value
     End With
   Next
   .Goto Sh2.Range("A1"), True
  End With
  Set Sh1 = Nothing: Set Sh2 = Nothing
  MsgBox "各データを合計しました", 64
End Sub

【49807】Re:シート1の工数合計値をシート2の3...
お礼  川森正守 E-MAIL  - 07/6/23(土) 7:14 -

引用なし
パスワード
   けいん様へ
お忙しい中、ご親切にお教え頂き、誠にありがとうございます。
初心者の私にはまだコードをよく読み取れませんが、これから
勉強をしてまいります。本当に有難うございました。

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