• ベストアンサー

マクロで出来ますか?

どなたかお助け下さい。 シート1にある31行50桁のグループが10個あるとします。 例えば、   B2:AY32・・・1グループ   B33:AY63・・・2グループ   B64:AY94・・・3グループ です。 このグループにアルファベットaからzまでが入っているのですが、このグループごとにそれぞれ個数を把握したいのです。 シート2のB1に =countif($B$2:$AY$32,"a") C1に =countif($B$2:$AY$32,"b")              ・              ・               ・      B2に =countif($B33:$AY63,"a")      C2に =countif($B33:$AY63,"b")              ・              ・               ・ という具合にグループごとのaの個数、bの個数、cの個数・・・ を求めたいのですが、マクロで作れないでしょうか。 よろしくお願いいたします。              

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

No2 merlionXXです。 > 例えば(B2:D32)と(AA2:AY32)の範囲を足したものを同じようにSheet2に表示するとした時 範囲を足したものをという意味がよくわからないのですが、COUNTIFでB2:D32を検索した数とAA2:AY32を検索した数を足せばよいのでしょうか? Sub test03() Dim myRng1 As Range, myRng2 As Range Dim myStr As String, myAd1 As String, myAd2 As String Dim r As Long, c As Long With Sheets("Sheet2") Set myRng1 = .Range("B2:D32") Set myRng2 = .Range("AA2:AY32") For r = 1 To 10 For c = 2 To 27 myStr = """" & Left(.Cells(1, c - 1).Address(0, 0), 1) & """" myAd1 = myRng1.Offset((r - 1) * 31).Address myAd2 = myRng2.Offset((r - 1) * 31).Address .Cells(r, c).Formula = _ "=COUNTIF(Sheet1!" & myAd1 & "," & myStr & _ ")+COUNTIF(Sheet1!" & myAd2 & "," & myStr & ")" Next c Next r End With End Sub

syoukunn
質問者

お礼

ご回答をありがとうございました。 すごいですね~~~。 今まで半日かかっていた作業があっという間に出来ちゃうんですね。 ほんとに助かりました。

その他の回答 (4)

  • CMLT
  • ベストアンサー率40% (143/357)
回答No.4

>きっとSheet1で何か作業をしないといけないと思うのですが・・・ セルではなく範囲を名前で参照できるようにする為の名前の定義です。 定義しないで参照範囲をsheet2に入力する方法もありますが見た目を考えて… EXCELのバージョンによって操作が変わってきますが、 excel 名前の定義 で検索すればたくさん出てきますよ。

syoukunn
質問者

お礼

早速のご回答をありがとうございました。 名前の定義、よくわかりました。 大変ありがとうございました。

  • popuplt
  • ベストアンサー率38% (31/81)
回答No.3

疑問もありますが、 >個数を把握したいのです 目的だけなら、関数で [B1]=COUNTIF(OFFSET(Sheet1!$B$2,(ROW()-1)*31,0,31,50),CHAR(95+COLUMN())) 右と下にフィル。いかがでしょう?

syoukunn
質問者

補足

ご回答をありがとうございます。 実行してみたところ、個数が違う値で表示されます。 何かが違うと思うのですが・・・。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

マクロということなので一例です。 Sub test01() Dim myStr With Sheets("Sheet2") Set myRng = .Range("B2:AY32") For r = 1 To 10 For c = 2 To 27 myStr = Left(.Cells(1, c - 1).Address(0, 0), 1) .Cells(r, c).Formula = "=COUNTIF(Sheet1!" & myRng.Offset((r - 1) * 31).Address & ",""" & myStr & """)" ' Next c Next r End With End Sub

syoukunn
質問者

補足

ご回答をありがとうございました。 早速使ってみましたら、上手く出来ました。 ここで、贅沢を言わせていただければ、(B2:AY32)の範囲ですが、 例えば(B2:D32)と(AA2:AY32)の範囲を足したものを同じようにSheet2に表示するとした時、3行目の Set myRng = .Range("B2:AY32") はどう変えればいいのでしょうか。 判らないなりに Set myRng = .Range("B2:d32")and .Range("AA2:AY32") と作ってみたのですがエラーが出ました。  (素人が・・・) よろしくお願いいたします。

  • CMLT
  • ベストアンサー率40% (143/357)
回答No.1

一つの提案ですが、 sheet2のB1にa、C1にb、D1にc、…AA1にzを入力し、 名前の定義で、sheet1の B2:AY32の範囲に 1グループ、  B33:AY63の範囲に 2グループのように名前を付けていき、 sheet2のA2に1グループ、A3に2グループ、… と入力していく。 あとは、sheet2のB2セルに =COUNTIF(INDIRECT($A2),B$1) と入力して、残りのセル全てにコピーしてあげる。

syoukunn
質問者

補足

すみません。 名前の定義はSheet2のA蘭に1グループ・2グループと入力するだけでいいのでしょうか。#REF! のエラーが出るので、きっとSheet1で何か作業をしないといけないと思うのですが・・・ よろしくお願いいたします。

関連するQ&A