[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『順位を1から順に氏名とともに並べたい』(YUKI)
A B C D E F G H I J K L M
a@ 氏 名 上 期 小計 件数 点 総合点 順位
4月 5月 6月 7月 8月 9月 (C~Hの計) (I+Kの計)
1 ○ 氏 1 1 1 1 0 2 6 2 6 12 3
2 □ 氏 0 0 0 0 0 0 0 1 3 3 6
3 △ 氏 1 2 1 2 2 1 9 0 0 9 5
4 ◎ 氏 2 0 1 0 2 3 8 1 3 11 4
5 ◆ 氏 0 0 2 1 1 2 6 2 6 13 2
6 ☆ 氏 2 4 1 0 0 1 8 2 6 14 1
という表で氏名と順位を1位から順に並べるにはどうしたらよいでしょうか?教えてください><; 宜しくお願いします
データの範囲を指定し、タイトル行にチェックをつけて、順位で並べ替え
で出来ないでしょうか?(tokky)
返信有難うございます!!
並べ替えを使ったら順番に並べることが出来ました!!
コレでやっと先に進めます(涙)
本当にありがとうございましたm(__)m (YUKI)
他のやり方で出す方法はあるでしょうか???
今のシートとは別の場所に順位と氏名を出したいんですが、そういったことができる方法は
ありますか??? すみませんが教えて下さい><; (YUKI)
え〜っと、なかなかレスが付かんっちゅうことは、一般機能じゃ難しいということ でっしゃろか? ほんならいっぺんマクロで挑戦してみまっか? これって最終列にはすでにランキングが表示されとるんですわなぁ。 でなくて、総合点でソートせなアカンのならちょっとマクロの中身を さわらなきゃ、変えなきゃ、きゃぁきゃぁでっせ。(笑 それと、シートとは別の場所とありますけど、同じブックの別のシートっちゅう事 ですわなぁ。 まさか別のブックにというような贅沢な質問とちゃいまっしゃろ? あとひとつは、あんさんの文面から察するに順位と氏名だけ抽出すればええと解釈 しましたけど、それでよろしゅうおまんねんなぁ。
1)Alt+F11でVBEを開く 2)「挿入」→「標準モジュール」を選択 3)そのモジュールに下のコードをコピペ 4)エクセルに戻る
例えばあんさんが例示してくれた元データがsheet1のB列(氏名の入った列)からM列(順位が入った列まで)あるとしたら 別シートの任意のセルに(ソート済みのデータを
抽出したいセル)yuki(sheet1!b3:m8)といった塩梅に入力してください。
このばやいやとyuki(sheet1!b1:m8)と入力してもいけま。
同じシートに抽出したかったらyuki(b1:m8)でもOKです。
入力でけたらそのセルを(yuki(....)と書き込んだセル)をアクチブにしてAlt+F8
を叩いて(キーボードが壊れない程度に)yukiを実行するだけです、ハイ。
まあいっぺん試してみておくんなはれ。
(弥太郎)
'---------------------------------
Option Explicit
'-----------------------------------
Sub yuki()
Dim data(1 To 2)
Dim sht As String, tbl As String
Dim row_cnt As Long
Dim col_cnt As Integer, i As Integer
Application.ScreenUpdating = False
If Left(ActiveCell, 5) <> "yuki(" Then Exit Sub
If ActiveCell Like "*!*" Then
sht = Split(ActiveCell, "!")(0)
sht = Split(sht, "(")(1)
tbl = Mid(ActiveCell.Value, InStr(ActiveCell.Value, "!") + 1 _
, Len(Split(ActiveCell, "!")(1)) - 1)
Else
sht = ActiveSheet.Name
tbl = Mid(ActiveCell.Value, InStr(ActiveCell.Value, "(") + 1 _
, Len(Split(ActiveCell, "(")(1)) - 1)
End If
With Worksheets(sht)
row_cnt = Range(tbl).Rows.Count
col_cnt = Range(tbl).Columns.Count
For i = 1 To row_cnt
If .Range(tbl).Cells(i, col_cnt) <> "" And IsNumeric(.Range(tbl).Cells(i, col_cnt)) Then
row_cnt = row_cnt - i + 1
Exit For
End If
Next i
data(1) = .Range(tbl).Cells(1, 1).Offset(i - 1).Resize(row_cnt)
data(2) = .Range(tbl).Cells(1, col_cnt).Offset(i - 1).Resize(row_cnt)
End With
ActiveSheet.Range(ActiveCell.Address).Resize(row_cnt) = data(1)
ActiveSheet.Range(ActiveCell.Address).Offset(, 1).Resize(row_cnt) = data(2)
Range(ActiveCell.Address).Resize(row_cnt, 2).Sort _
key1:=Range(ActiveCell.Address).Offset(, 1), order1:=xlAscending, MatchCase:=False
data(1) = Range(ActiveCell.Address).Resize(row_cnt)
data(2) = Range(ActiveCell.Address).Offset(, 1).Resize(row_cnt)
Range(ActiveCell.Address).Resize(row_cnt) = data(2)
Range(ActiveCell.Address).Offset(, 1).Resize(row_cnt) = data(1)
Application.ScreenUpdating = True
End Sub
セルB1;"=VLOOKUP(A1,sheet1!$A$1:$M$8,2,FALSE)" セルC1;"=VLOOKUP(A1,sheet1!$A$1:$M$8,3,FALSE)" 以下同 2行以下は、1行目をドラッグしてコピー。
これで表示されると思います。私でもお役にたてたでしょうか・・・・。(Kuro)
同順位がある場合、No.の若い方が上に来るとすれば、順位にちょっと小細工します。 例えば、N列にN3:=M3*100+A3 として、下へコピーしておきます。 氏名の抽出は、 Sheet2のB1:=INDEX(Sheet1!$B$3:$B$8,MATCH(SMALL(Sheet1!$N$3:$N$8,ROW(B1)),Sheet1!$N$3:$N$8,0)) 下方向へ人数分コピーします。 順位はSheet2のA1:=INT(SMALL(Sheet1!$N$3:$N$8,ROW(A1))/100) として下方向へコピーします。 (Hatch)
こんばんは! >他のやり方で出す方法はあるでしょうか??? エクセルのクエリ機能を使ってみてはどうでしょうか? 先ず、元のデータを↓の様なデータベース形式にする必要がありますが 簡単な手順を作ってみましたので、よかったら参考にしてください。 氏名 4月 5月 6月 7月 8月 9月 小計 件数 点 総合点 順位 1 ○氏 1 1 1 1 0 2 6 2 6 12 3 2 □氏 0 0 0 0 0 0 0 1 3 3 6 3 △氏 1 2 1 2 2 1 9 0 0 9 5 4 ◎氏 2 0 1 0 2 3 8 1 3 11 4 5 ◆氏 0 0 2 1 1 2 6 2 6 13 2 6 ☆氏 2 4 1 0 0 1 8 2 6 14 1 http://www.geocities.jp/soulman_excel/sample/myquery.htm (SoulMan)
弥太郎さん・kuroさん・Hatchさん 色々な方法教えて頂き有難うございますm(__)m
早速試してみようと思います。
マクロや関数はまだまだ初心者なもので解らないことがたくさんでありまして・・・
また質問することがあると思いますがまたご指導?宜しくお願いします!!(≧m≦;)
(YUKI)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.