|
▼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 が何なのか、意味不明です。
|
|