[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件にあった件数を』(りん)
シート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.