- 締切済み
エクセル2003なのですが
はじめまして、仕事でエクセルのマクロをまかされたのですが なにもやったことないど素人なもので・・・ ネットでひたすら勉強したものの息詰まってしまっていて ご教授願いたく書き込んでおります。 AとB 二つの集計を取るシートがあります。 Aでは3.4のシートの集計を Bでは1,2,3,4,5,6のシートの集計を取りたいです。 現在、マクロでAとBのシートに1,2,3,4,5,6の集計を 取るようなマクロになってしまっています。 この既存のマクロの状態でちょっとしたソースを加えるだけで Aのシートを3,4だけのシートの集計をとるようにできませんか? やはり、AシートとBシート個別にマクロ設定していくのが ベストなのでしょうか・・・ なにか、足らない部分があればご質問ください。 お願いいたします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。#2 です。 以下のコードは、すべてを削除してしまうことですが、少し、戸惑いを感じます。 Cells.Select Selection.Delete shift:=xlUp 無駄というよりも、場所を特定してよいのか分からないので、当面、分かる範囲だけでループを付けさせていただきました。 一応、そちらで、マクロのステップモードで、試してみてください。外れる部分があるようでしたら、その部分を直すか、ここにつけてください。 Sub TestLoop() Dim KBN As String Dim ASN As String Dim Counter As Integer Dim Counter2 As Integer Dim flg As Boolean Dim joken As String Dim joken2 As String Dim arSH As Variant Dim v As Variant 'Aでは3.4のシートの集計を 'Bでは1,2,3,4,5,6 Counter2 = 0 If Counter2 = 0 Then KBN = "A" arSH = Array("3", "4") Else KBN = "B" arSH = Array("1", "2", "3", "4", "5", "6") End If 'Cells.Select 'Selection.Delete shift:=xlUp Worksheets("syori").Select 'もしかしたら、最初のシート ActiveSheet.UsedRange.ClearContents ' Clear Range("B4").Select For Each v In arSH With Worksheets(v) flg = 0 .Select ASN = .Name Rows(4).Select Selection.AutoFilter Range("A4").Select If Range("A5") <> "" Then If KBN = "A" Then joken = "<>○" Else joken = "=○" End If Range("A4").AutoFilter Field:=3, Criteria1:=joken If KBN = "B" And ASN = "6" Then If flg = 0 Then joken2 = "=○" Else joken2 = "<>○" End If Range("A4").AutoFilter Field:=4, Criteria1:=joken2 End If End If Range("A4").AutoFilter Range("A4").Select 'たぶん、以下のIf~End If は、余分だと思います。 If KBN = "B" Then If ASN = "6" Then If flg = 0 Then flg = 1 End If End If Else If (ASN = "syori") Then Exit For End If End If End With Next v End Sub
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 その質問では、雲をつかむような話です。 実際に、シートは For each sh in Worksheets(Array(3,4)) '実際の作業マクロ Next sh は、取れるものの、最近、同じように集計(累計)する質問があったのですが、「マクロで」というお話もありましたが、私は、その質問者さんと内容がはっきりするにつれ、「マクロなしで良い」と確信を持ちました。問題は、その集計の内容いかんだと思います。 いわゆる、串刺し(3D集計)なら、マクロは必要ありませんね。 やったことがない人は、まず、基礎的なところから始めないと、最後まで到達せずに、途中でコケてしまうと思います。途中をかいつまんで、いきなり、どこかに到達というのは、コンピュータ言語の達人たちの話ですが、私は、いくつかの教本から学んだのは、「量質転化」といって、だいたい、自分でマクロを作って、500個ぐらいを実行すると、だんだん、まともなものになっていく、といいます。 「知識がない」のは当たり前で、それは、経験が知識に変わるものだと思います。 他のコンピュータ言語の経験のある人は、1週間でなんとかなるのですが、そうでない人は、実践で使えるようになるには、1年は掛かってしまうかもしれません。だいたい、3ヶ月で、一通りは覚えます。 それと、私の持論では、最初は、なんの目的も目標も持たずに、当面の目の前の階段を上るように、一歩一歩、体系的な覚え方をしないと、抜けが生じて、きちんとしたマクロにならないように思うのです。それに、Web サイトでは、なくて七癖、また、大雑把な説明のものが多いような気がします。単語や言葉を覚えるのではなくて、VBEで動かしたイメージを優先していくのが大事です。
お礼
返信ありがとうございます。 ソースを書かないとわかりませんね。 申し訳ありません。 今回はソースは早急につくってくれという要望でして・・・ 勉強じぶんもゆっくりしたいのですが そういう時間がないのです・・・ この仕事が終わればじっくり一から勉強していきたいと おもっております。 ソースのちょっとした内容ですが If Counter2 = 0 Then KBN = "A" Else KBN = "B" End If Cells.Select Selection.Delete shift:=xlUp Range("B4").Select Sheets("1").Select Counter = 0 flg = 0 While Counter < 6 ASN = Application.ActiveSheet.Name Rows(4).Select Selection.AutoFilter Range("A4").Select If Range("A5") <> "" Then If KBN = "A" Then joken = "<>○" Else joken = "=○" End If Selection.AutoFilter Field:=3, Criteria1:=joken If KBN = "B" And ASN = "6" Then If flg = 0 Then joken2 = "=○" Else joken2 = "<>○" End If Selection.AutoFilter Field:=4, Criteria1:=joken2 End If End If Selection.AutoFilter Range("A4").Select If KBN = "B" Then If ASN = "6" Then If flg = 0 Then flg = 1 End If Else ActiveSheet.Next.Activate End If Else If (ASN <> "syori") Then ActiveSheet.Next.Activate End If End If ソースがながくなりましたが このようなかんじで書いておりました。 きっと無駄が多いのですが・・・
- SAKENOSAKA
- ベストアンサー率32% (78/240)
計算対象のWorkSheet名をソース内で指定するようにすれば 可能と思います。 どうですか?
お礼
ソース内で指定ですか。 いまの時点で1,2,3,4,5,6と集計をとってしまう 状態ですが、Aのときだけという条件をつくればいいんでしょうか? どのように書き足せばいいのか いまいちわかってないのですが ・・・ すいません。 知識がなくて・・
お礼
早速、仕事場でテストしてみようとおもいます。 デリートする理由は作業用のシートをつくって それをコピーペーストするような形にしていたので そうなっておりました。 また、テストが終了しだいお知らせいたします。 中途半端なソースからアドバイスいただきありがとうございます。
補足
アドバイス通りやってみましたところ なんとか通りました。 一部書き直しただけでできたので 本当に助かりました。 改めて、ありがとうございました。