- ベストアンサー
エクセルマクロ初心者のためのセル数カウント方法
- エクセルマクロ初心者の方が特定のセルの数をカウントする方法について教えてください。
- 指定された年月のセルをカウントし、別のシートに入力する方法を教えてください。
- カウントした数を使用して月別グラフを作成する方法を教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは、No1です。 >ただ問題がありまして、Sheet2のA列はマクロにて別bookからコピー =COUNTIF(INDIRECT("Sheet2!A:A"),Sheet1!C6) とするとどうですか?
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17070)
こういう質問の常として、Sheet2のA列のセルの「値」が (1)日付シリアル値で入力されていて、表示が年月になっているのか 「日付シリアル値」が初耳ならWEB照会してみること。 (2)数字4桁で1603となっているのか (3)文字列か(全角数字など) (4)その他 か説明していないことです。そういう学習状態で、マクロを始めるのは早すぎる。 この質問の課題は、関数でもできると思う。(1)の場合は、わかりやすい方法としては、作業列が必要かと思うが。 エクセルのことや使える機能をある程度勉強したうえで、マクロは利用すべきです。 ・マクロでもワークシート関数(CountIfなど)を利用するのか ただ日付シリアル値の場合は、関数を用いて、年と月を割り出さないといけない。 ・全セル繰り返し判別参照の頻度カウントをするのか などの「ロジック」(処理方法)を選択できる力を付けることが大切だと思う。
お礼
imogasiさん ご回答ありがとうございます。 >そういう学習状態で、マクロを始めるのは早すぎる。 >エクセルのことや使える機能をある程度勉強したうえで、マクロは利用すべきです 痛感しております。 関数やマクロはテキストレベルでの勉強に留まっています。 1つの処理でもたくさんの解決方法があり、また何を使えば解決できるのか・・・それが勉強なのですが、それら引き出しが不十分なのは認識しております。 もっと勉強していきたいと思います。
- Prome_Lin
- ベストアンサー率42% (201/470)
1600~1699までとして、 まず、最初の「For Next」で、配列変数にカウントさせます。 すなわち、y(0)には、「1600」の回数、y(1)には「1601」の回数、というぐあいです。 今回は、上記のように「1600~1699」を前提としているので、回数を数えるとき、「-1600」を行うことで、配列変数のy()の「()」内の数値が決まります。 次の「For Next」で、その回数を「Sheet2」に書き込んでいます。 Option Explicit Sub Test() Dim i, n, y(99) As Integer For i = 1 To Worksheets(1).Range("A1").End(xlDown).Row n = Worksheets(1).Cells(i, 1).Value - 1600 y(n) = y(n) + 1 Next i For i = 0 To 99 Worksheets(2).Cells(6, i + 3).Value = 1600 + i Worksheets(2).Cells(7, i + 3).Value = y(i) Next i End Sub
お礼
Prome_Linさん ご回答ありがとうございます。 提示頂いたソースの全体的な雰囲気は理解できました。 n = Worksheets(1).Cells(i, 1).Value - 1600 でエラーでとまってしまいましたので、いろいろいじってみたいと思います。 ありがとうございました。
- mt2015
- ベストアンサー率49% (258/524)
訂正(^^; 誤:左にコピー 正:右にコピー
- mt2015
- ベストアンサー率49% (258/524)
マクロとワークシート関数を混同していませんか? この内容ならワークシート関数だけで十分で、マクロを使用する必要はありません。 Sheet1のセルC7に↓の式を入れ、左にコピーしてみてください。 =COUNTIF(Sheet2!$A:$A,Sheet1!C6)
お礼
mt2015さん ご回答ありがとうございます。 >この内容ならワークシート関数だけで十分で、マクロを使用する必要はありません。 切り分けについてはもっと勉強が必要だと痛感しております。 関数だけでOKなのか、マクロを使用した方が良いのか・・・。 Sheet1のC7に =COUNTIF(Sheet2!$A:$A,Sheet1!C6) の入力で希望の動作確認ができました。 ただ問題がありまして、Sheet2のA列はマクロにて別bookからコピーしており、 そうすると =COUNTIF(#REF!$A:$A,Sheet1!C6) となってしまいました。 回避する手立てはありますでしょうか?
- ushi2015
- ベストアンサー率51% (241/468)
こんにちは 年月が提示された通り4桁に数値で入力されているなら、 Sheet1のC7に =COUNTIF(Sheet2!$A:$A,Sheet1!C6) と入力して右方向へフィルコピーでいいのでは?
お礼
ushi2015さん ご回答ありがとうございます。 Sheet1のC7に =COUNTIF(Sheet2!$A:$A,Sheet1!C6) の入力で希望の動作確認ができました。 ただ問題がありまして、Sheet2のA列はマクロにて別bookからコピーしており、 そうすると =COUNTIF(#REF!$A:$A,Sheet1!C6) となってしまいました。 回避する手立てはありますでしょうか?
お礼
ushi2015さん ありがとうございました。 無事解決できました。 >INDIRECT 参照文字列をもとにセルを間接参照する 勉強になりました。 感謝致します。