• 締切済み

エクセル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シート個別にマクロ設定していくのが ベストなのでしょうか・・・ なにか、足らない部分があればご質問ください。 お願いいたします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。#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

sinkun001
質問者

お礼

早速、仕事場でテストしてみようとおもいます。 デリートする理由は作業用のシートをつくって それをコピーペーストするような形にしていたので そうなっておりました。 また、テストが終了しだいお知らせいたします。 中途半端なソースからアドバイスいただきありがとうございます。

sinkun001
質問者

補足

アドバイス通りやってみましたところ なんとか通りました。 一部書き直しただけでできたので 本当に助かりました。 改めて、ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんばんは。 その質問では、雲をつかむような話です。 実際に、シートは For each sh in Worksheets(Array(3,4))  '実際の作業マクロ Next sh は、取れるものの、最近、同じように集計(累計)する質問があったのですが、「マクロで」というお話もありましたが、私は、その質問者さんと内容がはっきりするにつれ、「マクロなしで良い」と確信を持ちました。問題は、その集計の内容いかんだと思います。 いわゆる、串刺し(3D集計)なら、マクロは必要ありませんね。 やったことがない人は、まず、基礎的なところから始めないと、最後まで到達せずに、途中でコケてしまうと思います。途中をかいつまんで、いきなり、どこかに到達というのは、コンピュータ言語の達人たちの話ですが、私は、いくつかの教本から学んだのは、「量質転化」といって、だいたい、自分でマクロを作って、500個ぐらいを実行すると、だんだん、まともなものになっていく、といいます。 「知識がない」のは当たり前で、それは、経験が知識に変わるものだと思います。 他のコンピュータ言語の経験のある人は、1週間でなんとかなるのですが、そうでない人は、実践で使えるようになるには、1年は掛かってしまうかもしれません。だいたい、3ヶ月で、一通りは覚えます。 それと、私の持論では、最初は、なんの目的も目標も持たずに、当面の目の前の階段を上るように、一歩一歩、体系的な覚え方をしないと、抜けが生じて、きちんとしたマクロにならないように思うのです。それに、Web サイトでは、なくて七癖、また、大雑把な説明のものが多いような気がします。単語や言葉を覚えるのではなくて、VBEで動かしたイメージを優先していくのが大事です。

sinkun001
質問者

お礼

返信ありがとうございます。 ソースを書かないとわかりませんね。 申し訳ありません。 今回はソースは早急につくってくれという要望でして・・・ 勉強じぶんもゆっくりしたいのですが そういう時間がないのです・・・ この仕事が終わればじっくり一から勉強していきたいと おもっております。 ソースのちょっとした内容ですが 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 ソースがながくなりましたが このようなかんじで書いておりました。 きっと無駄が多いのですが・・・

回答No.1

計算対象のWorkSheet名をソース内で指定するようにすれば 可能と思います。 どうですか?

sinkun001
質問者

お礼

ソース内で指定ですか。 いまの時点で1,2,3,4,5,6と集計をとってしまう 状態ですが、Aのときだけという条件をつくればいいんでしょうか? どのように書き足せばいいのか いまいちわかってないのですが ・・・ すいません。 知識がなくて・・

関連するQ&A