Excel VBA質問箱 IV

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

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


5268 / 76735 ←次へ | 前へ→

【77080】Re:検索して集計するマクロ
発言  kanabun  - 15/5/14(木) 23:42 -

引用なし
パスワード
   ▼yumeyume さん:

>とりあえず、シート3用のマクロを記載して、シート4とシート5分もコピーしセルの値等を変えて、下記マクロを記載してみましたが、正しく動きません。
>正しく検索して集計できているもの、出来ないものもあり。

ということで、とりあえず、コードのうえのほうだけに限定して
>Sub データ集計()
>
>Set sh2 = Workbooks("集計表.xlsm").Worksheets(2)
>
>'A支店のデータを集計
>'マクロブックの3シート目のA列最終行を取得
>mxr1 = ThisWorkbook.Worksheets(3).Range("A" & Rows.Count).End(xlUp).Row
>For k = 2 To mxr1
>'マクロブックの3シート目のC2セルから最終行までを集計票ブックのF6からF115のセルに記載の値と一致させる
>MyR = Application.Match(ThisWorkbook.Worksheets(3).Cells(k, "C").Value, sh2.Range("F6:F115"), 0)
> '一致したら
> If IsNumeric(MyR) Then
> 'myRに5を足した値
> MyR2 = MyR + 5
> Count = ThisWorkbook.Worksheets(3).Cells(k, "I").Value
> 'マクロブックの3シート目のG列が「青森」であったら
> If ThisWorkbook.Worksheets(3).Cells(k, "G").Value = "青森" Then
> '集計表ブックのシート2のL列に初期入力値にマクロブックのシート3のIの値を足して入力
> sh2.Cells(MyR2, "L").Value = sh2.Cells(MyR2, "L").Value + Count
> 'マクロブックの3シート目のG列が「秋田」であったら
> ElseIf ThisWorkbook.Worksheets(3).Cells(k, "G").Value = "秋田" Then
> '集計表ブックのシート2のP列に初期入力値にマクロブックのシート3のIの値を足して入力
> sh2.Cells(MyR2, "P").Value = sh2.Cells(MyR2, "P").Value + Count
> 'マクロブックの3シート目のG列が「空白」であったら
> 'A列の値を1シート目に転記する
> ElseIf ThisWorkbook.Worksheets(3).Cells(k, "G").Value = " " Then
> Set pastsaki = ThisWorkbook.Worksheets(1).Range("A1").Offset(BK)
> pastsaki.Value = ThisWorkbook.Worksheets(3).Cells(k, "A").Value
> 
>'データがなければ×をつける
>Else
>ThisWorkbook.Worksheets(3).Cells(k, "j").Value = "X"
>
>End If
>End If
>Next

>End Sub

インデントを付ける

変数は宣言してから使う(宣言漏れを自動でチェックさせるために
このコードを書いているモジュールの先頭に
Option Explicit
の宣言文を入れておく)

ThisWorkbook.Worksheets(3) が何度もでてくるので、With句で くくる

If ○○ = "青森" Then
ElseIf ○○ = "秋田" Then
ElseIf ○○ = 空白 Then
Else
End If

という構文は

Select Case ○○
Case "青森"
Case "秋田"
Case 空白
Case Else
End Select

という構文になおして ○○を何度も使わないようにまとめる

などに注意して、表面的(字面だけ)直すと、こんな風です。

---------------------------------------------------標準モジュール
Option Explicit

Sub データ集計1()
 Dim sh2 As Worksheet, RangeF As Range, ValueL
 Dim mxr1 As Long
 Dim k As Long
 Dim MyR
 Dim Count As Long
 Dim BK As Long
 
 Set sh2 = Workbooks("集計表.xlsm").Worksheets(2)
 Set RangeF = sh2.Range("F6:F115")
 
 'A支店のデータを集計
 With ThisWorkbook.Worksheets(3) 'マクロブックの3シート目
  'A列最終行を取得
  mxr1 = .Range("A" & Rows.Count).End(xlUp).Row
  For k = 2 To mxr1 'C2セルから最終セルまで順に
      ' 集計表ブックのF6からF115範囲に マッチするセルがあるか?
    MyR = Application.Match(.Cells(k, "C"), RangeF, 0)
    
    If IsNumeric(MyR) Then '一致するセルがあったら
      Count = .Cells(k, "I").Value
      Select Case .Cells(k, "G").Value
       Case "青森" 'G列の値が「青森」であったら
         'sh2のL列に初期入力値に この行のIの値を足して入力
         RangeF.Item(MyR, 7).Value = RangeF.Item(MyR, 7) + Count
       
       Case "秋田" 'G列の値が「秋田」であったら
         'sh2のP列に初期入力値に この行のIの値を足して入力
         RangeF.Item(MyR, 11).Value = RangeF.Item(MyR, 11) + Count
        
        
       Case Empty 'G列の値が「空白」であったら----??
         'A列の値を1シート目に転記する
         ThisWorkbook.Worksheets(1).Range("A1").Offset(BK) _
           .Value = .Cells(k, "A").Value
      
       Case Else
         'データがなければ×をつける
         .Cells(k, "j").Value = "X"
      
      End Select
    End If
  Next
   
 End With

End Sub

---
以上のような構文で、ステップインで 処理を追っていってみてください。


---
>'G列の値が「空白」であったら----??
の部分は
> Case Empty
としてあります(ブランクセルだったら、と同じ)。
このときの処理
> Worksheets(1).Range("A1").Offset(BK)
↑この BK が何なのか、意味不明です。

0 hits

【77079】検索して集計するマクロ yumeyume 15/5/14(木) 20:54 質問[未読]
【77080】Re:検索して集計するマクロ kanabun 15/5/14(木) 23:42 発言[未読]
【77081】Re:検索して集計するマクロ kanabun 15/5/15(金) 0:15 発言[未読]
【77082】Re:検索して集計するマクロ yumeyume 15/5/15(金) 13:53 質問[未読]
【77084】Re:検索して集計するマクロ kanabun 15/5/15(金) 15:09 発言[未読]
【77090】Re:検索して集計するマクロ yumeyume 15/5/15(金) 20:04 お礼[未読]
【77091】Re:検索して集計するマクロ kanabun 15/5/15(金) 20:34 発言[未読]
【77092】Re:検索して集計するマクロ yumeyume 15/5/15(金) 21:18 お礼[未読]
【77083】Re:検索して集計するマクロ yumeyume 15/5/15(金) 14:20 質問[未読]

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