人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

麻雀ゲームの時間帯別の成績を知りたいので、エクセルから抜き出すマクロをお願いいたします。

シートは2つ。

「詳細成績」と、「着順」シートです。

画像をご確認ください。


詳細成績のJ列にある成績順位1?4(3までしかないときもあります)とQ列の時間。

この時間ごとの成績を調べるため、はじめに何行?何行まで調べるか?

聞いてくる形ではじめ、その間の成績を集計し、着順シートに転記
してほしいのです。転記するのは着順の回数です。何時台に1位は何回あって、2位は何回あって・・
4位は・・・と回数を転記することで分析したいのです。

詳細成績には、時間帯がうまく書かれていない、空白のところもありますが、その部分は無視して集計には入れません。

着順シートには転記するだけで大丈夫です(式は別に入っております)

どうかよろしくお願いいたします。

(関数でできる!とのご質問はご容赦ください。マクロを希望しております)

1430542389
●拡大する

●質問者: oshietekudasai19
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●200ポイント ベストアンサー

こんな感じでどうでしょう。

Sub 着順集計()

 inp = Application.InputBox("詳細成績シートの何行?何行までを集計しますか?")
 a = Split(inp, " ")
 r_start = Val(a(0))
 r_end = Val(a(1))

 Dim tbl(24, 4)
 For r = r_start To r_end
 Set j = Sheets("詳細成績").Cells(r, "J")
 Set h = Sheets("詳細成績").Cells(r, "Q")
 If IsNumeric(h.Value) And Not IsEmpty(h) And h.Value <> "" Then
 tbl(h.Value, j.Value) = tbl(h.Value, j.Value) + 1
 End If
 Next

 For h = 0 To 24
 For j = 1 To 4
 r = 2 + h
 c = j * 2
 Sheets("着順").Cells(r, c) = tbl(h, j)
 Next
 Next

End Sub

着順には 1?4 の数字が入ってるのが前提とか、いろいろ判定を省きまくってますが、自分で作ったシートなら大丈夫ですよね :-)
0時と24時の両方があるのは、質問の画像のままにしています。




追記です。

深夜4などは深夜を除いて4時台で集計していただきたいということです。

了解です。
では、こんな感じで。

Sub 着順集計()

 inp = Application.InputBox("詳細成績シートの何行?何行までを集計しますか?")
 a = Split(inp, " ")
 r_start = Val(a(0))
 r_end = Val(a(1))

 Set re = CreateObject("VBScript.RegExp")
 re.Pattern = "([1-9]?[0-9])"

 Dim tbl(24, 4)
 For r = r_start To r_end
 Set j = Sheets("詳細成績").Cells(r, "J")
 Set h = Sheets("詳細成績").Cells(r, "Q")
 Set remat = re.Execute(h.Value)
 If remat.Count > 0 Then
 hh = Val(remat(0).SubMatches(0))
 If 0 <= hh And hh <= 24 Then
 tbl(hh, j.Value) = tbl(hh, j.Value) + 1
 End If
 End If
 Next

 For h = 0 To 24
 For j = 1 To 4
 r = 2 + h
 c = j * 2
 Sheets("着順").Cells(r, c) = tbl(h, j)
 Next
 Next

End Sub

oshietekudasai19さんのコメント
ありがとうございます!インプットボックスにはどういれればよろしいでしょうか? 2-2372 2372 100-2371 2?2372 などの入力ではいずれもインデックスエラーが出てしまいました! いつもご回答ありがとうございます。

a-kuma3さんのコメント
あ、すみません。 空白で区切って入れてください。

oshietekudasai19さんのコメント
ありがとうございました。計算してくれているようなのですが、転記されないのです。 これは詳細成績のシートの順位部分が、=LEFT(RIGHT(LEFT(I2373,FIND("abc",I2373)-1),5),1)*1←こんな式の結果から順位を抜き取っているからでしょうか?

a-kuma3さんのコメント
「詳細成績」シートの J列が式でも集計はできるんですけどね。 マクロの後半の部分、Debug.Print を入れると集計したデータが VBE のイミディエイトのペインに表示されるでしょうか。 >|vb| For h = 0 To 24 For j = 1 To 4 r = 2 + h c = j * 2 Debug.Print h & " " & j & " : " & tbl(h, j) ' ★これを追加 Sheets("着順").Cells(r, c) = tbl(h, j) Next Next ||< 集計したデータが表示されているようであれば、シート名の「着順」が違っているのかも。 表示されていないようであれば、途中でエラーが出ている可能性があります。

oshietekudasai19さんのコメント
ありがとうございます。 イミディエイトウインドウには表示されました。 0 2 : 0 3 : 0 4 : 1 1 : 1 2 : 1 3 : 1 4 : 2 1 : 2 2 : 2 3 : 2 4 : 3 1 : 3 2 : 3 3 : 3 4 : 4 1 : 4 2 : 4 3 : 4 4 : 5 1 : 5 2 : 5 3 : 5 4 : 6 1 : 6 2 : 6 3 : 6 4 : 7 1 : 7 2 : 7 3 : 7 4 : 8 1 : 8 2 : 8 3 : 8 4 : 9 1 : 9 2 : 9 3 : 9 4 : 10 1 : 10 2 : 10 3 : 10 4 : 11 1 : 11 2 : 11 3 : 11 4 : 12 1 : 12 2 : 12 3 : 12 4 : 13 1 : 13 2 : 13 3 : 13 4 : 14 1 : 14 2 : 14 3 : 14 4 : 15 1 : 15 2 : 15 3 : 15 4 : 16 1 : 16 2 : 16 3 : 16 4 : 17 1 : 17 2 : 17 3 : 17 4 : 18 1 : 18 2 : 18 3 : 18 4 : 19 1 : 19 2 : 19 3 : 19 4 : 20 1 : 20 2 : 20 3 : 20 4 : 21 1 : 21 2 : 21 3 : 21 4 : 22 1 : 22 2 : 22 3 : 22 4 : 23 1 : 23 2 : 23 3 : 23 4 : 24 1 : 24 2 : 24 3 : 24 4 : 0 1 : 0 2 : 0 3 : 0 4 : 1 1 : 1 2 : 1 3 : 1 4 : 2 1 : 2 2 : 2 3 : 2 4 : 3 1 : 3 2 : 3 3 : 3 4 : 4 1 : 4 2 : 4 3 : 4 4 : 5 1 : 5 2 : 5 3 : 5 4 : 6 1 : 6 2 : 6 3 : 6 4 : 7 1 : 7 2 : 7 3 : 7 4 : 8 1 : 8 2 : 8 3 : 8 4 : 9 1 : 9 2 : 9 3 : 9 4 : 10 1 : 10 2 : 10 3 : 10 4 : 11 1 : 11 2 : 11 3 : 11 4 : 12 1 : 12 2 : 12 3 : 12 4 : 13 1 : 13 2 : 13 3 : 13 4 : 14 1 : 14 2 : 14 3 : 14 4 : 15 1 : 15 2 : 15 3 : 15 4 : 16 1 : 16 2 : 16 3 : 16 4 : 17 1 : 17 2 : 17 3 : 17 4 : 18 1 : 18 2 : 18 3 : 18 4 : 19 1 : 19 2 : 19 3 : 19 4 : 20 1 : 20 2 : 20 3 : 20 4 : 21 1 : 21 2 : 21 3 : 21 4 : 22 1 : 22 2 : 22 3 : 22 4 : 23 1 : 23 2 : 23 3 : 23 4 : 24 1 : 24 2 : 24 3 : 24 4 : ↑こんな感じでした。しかし、着順シートは空白のままとなっております。

a-kuma3さんのコメント
集計されていないですねえ。 質問の画像だと、時間の Q列に数字がひとつも入っていませんが、実際にはどんな感じになっているのでしょうか。 Q列が数値であることを判定しているので、1 とか 2 という値でも文字列で入っていると、集計の対象外にしています。

oshietekudasai19さんのコメント
すみません。言葉たらずで。夜とか朝とか言葉はほとんどはいっていたあとの数字なので、その部分は抜いてほしいということを言い忘れておりました。言葉は数字の前に少し入っているケースがあります。朝・昼・夜・深夜など。また加算させていただきますので、どうかよろしくお願いいたします。

oshietekudasai19さんのコメント
深夜4などは深夜を除いて4時台で集計していただきたいということです。集計しないのは、空白か、深夜だけとか言葉だけです。言葉の後に数字が必ず来て、最大でも2ケタです。24が最大。最少は0です。半角です。

a-kuma3さんのコメント
>> 深夜4などは深夜を除いて4時台で集計していただきたいということです。 << 了解です。 回答に追記しましたので、確認をお願いします。

oshietekudasai19さんのコメント
ありがとうございました!!しっかりと動きました!本当にありがとうございました!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ