[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件にあった件数を』(りん)
シート1 A
1 2008006280 2 2008006281 3 2008007080 4 2008007090 5 2008007100 6 2008007101 7 2008007110
シート2 A
1 2008006290 2 2008006300 3 2008006301 4 2008007090 5 2008007100 6 2008007101 7 2008007110 8 2008008010
A列に2008006280のようにデータの整理番号が 並んでるシートが100枚くらいあります。
シート1 2008006 までを→1件と数えて 2008007 →1件 シート1は計2件 シート2 2008006 →1件 2008007 →1件 2008008 →1件 シート2は計3件 などのように、シートごとに何件あるかを数えたいのですが、 どにようにすればよいでしょうか? どなたか助けてください!(><)
>A列に2008006280のようにデータの整理番号 10桁である事は決まっているのですか? >何件あるかを数えたいのですが 件数を数えた後はどうします? 数式?VBA?どちらでもいい?(数式は苦手ですけどね) (梅雨ですね〜)
>10桁である事は決まっているのですか? 10桁である事は決まっています。件数が多いのでできればVBAが良いですが・・・(りん)
何件あるかだけ数えたいだけなのですか? 重複はないのですか? ただ入力されているセルを数えるだけなら 使用していないセルに =COUNT(A:A) =COUNTA(A:A) 等でもいいのでしょうが・・・。 (肌)
左から7桁目だけが対象ですか? それとも2008012とか2009001とかもあり?(kuro)
例えば、B1 =ROUNDDOWN(A1/1000,0) で下へフィルコピー。 C1 =COUNT(INDEX(0/((MATCH(B1:B10,B1:B10,0)=ROW(1:10))),)) とか? 下3桁切り捨てが条件ですがね ^^; (ぽ)
まず、下記の過去ログを参考にして全シート名を抽出します。 [[20040819143128]]『目次を作りたいのですが』(辛汗)
抽出されたら、そのB1セルに、 =COUNTIF(INDIRECT(A1&"!A:A"),"<2008007000") と入力し、 下へフィルコピー。 (純丸)(o^-')b ※はずしてるかな、、
> シートごとに何件あるかを数えたいのですが 何種類あるかを 数えるだけですか? (kanabun)
Sub Try1() Dim ws As Worksheet, r As Range Dim v, Ans As String Dim i As Long
ReDim Res(1 To ActiveWorkbook.Worksheets.Count, 1 To 2) With CreateObject("Scripting.Dictionary") For Each ws In ActiveWorkbook.Worksheets Set r = ws.Range("A1", ws.Cells(ws.Rows.Count, 1).End(xlUp)) v = Application.Transpose(Application.Replace(r, 8, 20, "")) For i = 1 To UBound(v) .Item(v(i)) = Empty Next Ans = Ans & ws.Name & vbTab & .Count & vbCr .RemoveAll Next End With MsgBox Ans End Sub
>件数が多いのでできればVBAが良いですが・・・ その件数(並んでるシートが100枚くらい分)を、どこかのセルに表示するのですか? 例えば、各シートのセルB1に・・とか? (梅雨ですね〜)
>件数が多いのでできればVBAが良いですが・・・ そーだったのねん。 気づいてませんでした _/ ̄|○ il||li (ぽ)
kanabunさまへ
> ReDim Res(1 To ActiveWorkbook.Worksheets.Count, 1 To 2) ここがよく分からなかったのですが、コメントにしても結果は同じでしたし。。。 でも横からお勉強になりました。 (梅雨ですね〜)
>> ReDim Res(1 To ActiveWorkbook.Worksheets.Count, 1 To 2) > ここがよく分からなかったのですが、コメントにしても結果は同じでしたし。。。
失礼しました。 結果をどこか シートに書き出そうか? って考えの時に、書いた一行で、 いまは メッセージボックスに表示しているだけなので、全然使ってませんです。 消し忘れです、ごめんなさい m(__)m (kanabun)
>消し忘れです、ごめんなさい m(__)m とんでもないです。昨年は私の方もたくさん勉強させて頂いておりますので。 何かをしようと?と、思って聞いてみたのです。 ご返事ありがとうございます。 (梅雨ですね〜)
(梅雨ですね〜)さま、(kanabun)さま、(純丸)さま、(肌)さま、ご返答 ありがとうございます。いろいろ勉強になりました。
(kanabun)さまのコードでばっちりでした。ありがとうございました。(りん)
何度もすみません。 2008007〜の場合はうまくいったのですが、1980とかのを試そうとしたら 件数をちゃんとした件数を出してくれません。 kanabunさまのマクロを変更しようとしたのですが・・・難しく(汗 今後の勉強のために解説を加えていただけないでしょうか? お手数おかけいたしますがよろしくお願いいたします。(りん)
> kanabunさまのマクロを変更しようとしたのですが・・・難しく(汗 > 今後の勉強のために解説を加えていただけないでしょうか?
こんばんは。
'↓A列のすべてのデータの 先頭から8桁目以降を削除します > v = Application.Transpose(Application.Replace(r, 8, 20, "")) '配列v に 2008006 2008006 2008006 2008007 2008007 2008007 2008007 2008008 : のような値が格納されます。
> For i = 1 To UBound(v) > .Item(v(i)) = Empty > Next 'ここで、Dictionaryオブジェクトのキーに 上のデータを順にセットしています。 Dictionary のキーは重複しないので、 2008006 2008006 2008006 と3回 同じデータをキーに登録しても、 Dictionaryのなかでは "2008006" というキーは ひとつしかありません。
> Ans = Ans & ws.Name & vbTab & .Count & vbCr 'あるシートのデータを全部入れ終わったら、 dictionaryの.Countプロパティに キーの数が入っています。 これが 求める件数 です。
> 1980とかのを試そうとしたら > 件数をちゃんとした件数を出してくれません。 1980004123 1980005123 とかのデータでしたら、1980004 と 1980005 とで2件と なりませんか? (kanabun)
ちょっと疑問が湧いてきました。 このようなデータの整理番号は文字列にすれば処理しやすいと思いますが 文字列では不都合があるのですか。
(wisemac21)
kanabunさま、ご返答ありがとうございます。&&すごく良く分かる解説もありがとうございます。 元データに何か問題があるのでしょうね・・・。 件数が少なめに表示されたりしたことがありました。 再度調べてみます。 wisemac21さま、特に文字列にしても問題ありません。 というか、複合データなので、もしかすると文字列のところもあるかもしれません。(りん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.