
超超初心者です。わかりやすく教えてください。個人の成績表を作成したいのですが、(実際の工程は10で人数は40人程度)
質問①
図のようなリストボックスで、クリックして選択したら、元のシートの該当データの行を選択して、塗りつぶしたいのですが、うまくできません。教えてください。(塗りつぶし後全工程を降順に並び替えて各工程の順位を表すため)
質問②
①の後、グラフ作成のため、選択した行のコピーを表の下方の余白にコピーしたいのですが、どのように書けばよいでしょうか。
よろしくお願いいたします。
Option Explicit
Private lastrow As Long
Private index As Integer
Sub userform_initialize()
Dim i As Long
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
名前リスト.AddItem Cells(i, 1)
Next i
End Sub
Sub 名前リスト_Click()
Dim i As Long
Dim no As Long
名前リスト.ListIndex = no
index = no + 3
Rows(index).End(xlToLeft).Select
With Selection.Interior
.Color = 15773696
End With
End Sub
Sub btnsort_click()
Dim j As Long
For j = 2 To Cells(1, Columns.Count).End(xlToLeft).Column
Columns(j).Sort key1:=Cells(1, j), order1:=xlDescending, Header:=xlYes
Next j
End Sub



No.8
- 回答日時:
No7です。
No7で提示したサイトの内容に誤りがありました。(No7のサイトのマクロは使用しないでください)
下記のサイトが正しいので、こちらを使用してください。
https://ideone.com/zm6BiS
又、チューニングパラメータとして、
Const Y_unit As Long = 5 'グラフ縦軸目盛単位
を追加しました。
1目盛の単位です。現在は5人にしてありますが、変える場合は、これを変えてください。

No.7
- 回答日時:
下記URLにマクロをアップしました。
ここから取得してください。https://ideone.com/5reAZ1
前提ですが、
工程数=19
1行目 期の見出し
2行目 工程の見出し
3行目以降 各担当者のデータ
1期分で20列(名前+工程)を使用し、1列空欄を開ける。
4期分までサポート(4期の工程19は、CE列)
とします。
チューニングパラメータとしては、
Const baseSheetName As String = "成績表"
Const workSheetName As String = "作業"
Const No_koutei As Long = 19 '工程数
Const X_ratio As Double = 1# 'グラフ横軸倍率
Const Y_ratio As Double = 1# 'グラフ縦軸倍率
がありますが、あなたの環境にあわせて適切に設定して下さい。
Const baseSheetName As String = "成績表"
は元データのシート名です。元データのシート名が異なるならこれを変えてください。
Const workSheetName As String = "作業"
は作業データのシート名です。(予めこの名前のシートを作成しておいてください。中身は空で結構です)
Const No_koutei As Long = 19 '工程数
は、工程数です。今後、工程数に増減があるなら、これを変えてください。
Const X_ratio As Double = 1# 'グラフ横軸倍率
は、グラフの横軸の倍率です。
グラフを小さくしたいなら、0.8(0.8倍になります)、大きくしたいなら1.2(1.2倍になります)等の好みの値を設定して下さい。
Const Y_ratio As Double = 1# 'グラフ縦軸倍率
はグラフ縦軸倍率です。使用方法は、グラフの横軸倍率に準拠します。


No.2
- 回答日時:
No2です。
補足拝見しました。こちらで、4半期毎の管理方法の検討、及びグラフの作成の検証等の作業があり、返信が遅れました。
一応、どのように管理するかのめどが立ちましたので、以下に回答します。
これから述べることの前提で良ければ、マクロの提供は可能です。
①>並び替えは戻せないので、先に元シートをシート追加ボタンで人数分コピーし、一人ずつ成績表を印刷して渡す事を想定しています。
これについては、元のマスターのシートと作業用のシートを作成し、
選択された人が変わる度に、元シートから作業用のシートに全員の成績をコピーし直しては、いかがでしょうか。
そして、作業用のシートについて、誰かを選択し、並べ替え、グラフ作成等を行います。
それが、終われば、他の人を選択しますが、その時、前の人の状態はクリアされ、初期状態に戻ります。
何故、最初に人数分シートをコピーするのが良くないかというと、もし、間違って他の人を選択し、並べ替えを行うと、元に戻せない為、
元シートのコピーからやり直しする必要がある為です。
②選択された氏名を、成績の下の方に格納すると、並び替えの時、そのデータも含まれるので、よろしくない旨の指摘をしましたが
ソート時に範囲を指定して行えばこの現象は避けられます。(btnsort_Clickの改造が必要になります)
従って、成績表の下に1行開けて、選択された人のコピーを行うようにできます。
また、その下の行に、その成績の順位を表示するようにできます。(マクロで行うのでRANK.EQ関数を予めシートに埋め込む必要はなし)
③4半期毎の成績を表示したいということですが
以下のようになります。
最初の四半期を1期、
次の四半期を2期、
次の次の四半期を3期、
最後の四半期を4期 と呼びます。
表の左側から順に1期、2期、3期、4期を表示する。
表は1列目に期の見出し、
2列目に期を工程の見出し、
3列目以降にデータ行となります。
各期の間は1列空白を入れます。
工程は10工程とします。
従って、
1期=A~K列
2期=M~W列
3期=Y~AI列
4期=AK~AU列 となります。
詳細は、添付図1、添付図2を参照
④>グラフですが、各工程は分母が異なるため、単純に数値のみでグラフにしても意味がないので、各列ごとのRANK EQ関数?等を使って順位の折れ線グラフを作成し・・・
「各工程は分母が異なるため」とは、どういう意味でしょうか。成績(得点)は単純に100点満点で、0~100の数値が設定されると理解していましたが
そうではないのでしょうか。各工程ごとに最大の得点が異なるのでしょうか。その場合、最低と最高の得点はどうなりますか?
もし、得点もグラフにするなら、最低と最高の得点を知っておく必要があります。(各工程ごとに目盛は用意できないので全工程共通になります)
⑤グラフは、A案(得点と順位の両方表示)でしょうか、それともB案(順位のみ表示)
(添付の画像A案、B案を参照。3つの4半期について表示。最大は4つの4半期について表示することになる)
⑥シート名ですが、
元シートを「成績表」
作業シートを「作業」とします。
他に希望があれば、提示してください。
以上、ご確認及び補足をお願いします。


No.1
- 回答日時:
質問①について、こちらで修正しました。
(添付図の上が選択した名前を選択した状態、下がソートした状態)質問②の意味がよくわかりません。
例えば、鈴木太郎を選択したら、A2~D2を10行目(A10~D10)へコピーしたいということでしょうか。
もし、そうなら、そのコピーしたデータも、ソートした時、ソート対象のデータに含まれてしまいます。
従って、添付の場合なら、2行目以降、かつ、E列より右側にコピーしないとまずいかと。
また、ソートを行うと、B列以降の各列が降順になりますが、この時点で、データが壊れます。
他の人を選択し、ソートする為には、一旦、ソート前の状態に戻す必要がありますが、
このままでは、戻せません。この点、どのように対処されるつもりでしょうか?
-----------------------------------------------
Option Explicit
Private lastrow As Long
Private index As Integer
Private maxcol As Integer
Private Sub UserForm_Initialize()
Dim i As Long
For i = 2 To Cells(Rows.Count, 1).End(xlUp).row
名前リスト.AddItem Cells(i, 1)
Next i
lastrow = 0
maxcol = Cells(1, Columns.Count).End(xlToLeft).Column
End Sub
Private Sub 名前リスト_Click()
Dim i As Long
Dim no As Long
no = 名前リスト.ListIndex
index = no + 2
If lastrow <> 0 Then
Range(Cells(lastrow, 1), Cells(lastrow, maxcol)).Interior.Color = xlNone
End If
Range(Cells(index, 1), Cells(index, maxcol)).Interior.Color = 15773696
lastrow = index
End Sub
Private Sub btnsort_Click()
Dim j As Long
For j = 2 To Cells(1, Columns.Count).End(xlToLeft).Column
Columns(j).Sort key1:=Cells(1, j), order1:=xlDescending, Header:=xlYes
Next j
End Sub
-------------------------------------------------------

tatsu99 様
早速教えていただきまして、ありがとうございます!図のとおりにできました。並び替えは戻せないので、先に元シートをシート追加ボタンで人数分コピーし、一人ずつ成績表を印刷して渡す事を想定しています。成績を渡す方の担当が複数いるため、共有フォルダに格納して各自で作業して渡してもらえたら時短になるかなと思い、なんとか完成させたいです。ご指摘の手順のところですが、選択した部分を表の右側にコピーしておいてから、表を並び替えて、その後グラフ作成ボタンで表の下に折れ線グラフを入れたいので、表の右側にコピーする方法を教えていただけるとありがたいです。
また、グラフですが、各工程は分母が異なるため、単純に数値のみでグラフにしても意味がないので、各列ごとのRANK EQ関数?等を使って順位の折れ線グラフを作成し、四半期ごとの成績を比較できるようにしたいのですが、その場合は表の右にコピーした値を元にさらにその右の方向に式を入れて、得た結果をデータとして、グラフ作成ボタンで表の下方に作成したいのですが。引き続きアドバイスをよろしくお願いいたします。(関数は元シートの指定のセルに予め入れておけばよいですよね)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) ワークシート内を検索 1 2022/12/19 23:46
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELでグラフを作るとき、縦軸...
-
エクセルの円を5等分する方法
-
エクセルのグラフ作成で軸を等...
-
エクセルの縦軸(Y軸)が不均等...
-
Excel:別シートにグラフを貼り...
-
Excelでx軸とy軸を設定して図を...
-
エクセルで折れ線と散布図を同...
-
エラーバーの終端の線を長くする
-
エクセル グラフはあるけれど...
-
エクセル グラフの”データーテ...
-
ExcelのグラフをPowerPointに貼...
-
散布図を縦に2個並べて出力したい
-
エクセル円グラフ集計結果を表...
-
エクセルで日経225先物のデータ...
-
エクセルのグラフの1点の色を変...
-
エクセルで折れ線グラフ(散布...
-
【Excel2007】折れ線グラフの線...
-
エクセルで縦軸と横軸の位置で...
-
[エクセル]マクロで、自動的に...
-
グラフウィザードにない形のグ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルのグラフ作成で軸を等...
-
EXCELでグラフを作るとき、縦軸...
-
Excel:別シートにグラフを貼り...
-
エクセルの縦軸(Y軸)が不均等...
-
エクセルで折れ線と散布図を同...
-
Excelでx軸とy軸を設定して図を...
-
エクセルで折れ線グラフ(散布...
-
エクセル グラフはあるけれど...
-
エクセルの対数グラフのエラー
-
エクセルで作ったグラフの右側...
-
散布図を縦に2個並べて出力したい
-
エクセルで、極座表のグラフ描...
-
エクセル グラフの”データーテ...
-
エクセルの円を5等分する方法
-
ワードの差し込みにて、値をグ...
-
エクセルグラフの項目名を折り...
-
エクセル 0や空白のセルをグラ...
-
ExcelのグラフをPowerPointに貼...
-
Excelマクロ・グラフエリア・プ...
-
エクセルの円グラフをグラフエ...
おすすめ情報
tatsu99 様
早速教えていただきありがとうございます!図のとおりにできました。並び替えは戻せないので、先にシート追加ボタンで人数分コピーし、一人ずつ印刷して渡す事を想定しています。成績を渡す方の担当が複数おり、共有フォルダに格納して各自作業して渡してもらえれば便利と思い、なんとか完成させたいです。手順のところで、塗りつぶしと同時に表の右側にコピーしておく→表を並び替え→グラフ作成ボタンで表の下に折れ線グラフを入れたいので、表の右側に行を選択コピーする方法を教えていただけるとありがたいです。グラフですが、各工程の分母が異なるため、列ごとのRANK EQ関数?を使って順位の折れ線グラフを作成したいので、コピーした値を元にさらにその右の方向に式を入れておいたデータを元に、表の下方に入れたいです、引き続きアドバイスをよろしくお願いいたします。(先に関数を入れておけばよいですよね)
tatsu99様 説明が不十分で申し訳ありません。色々な面からご検討いただき誠にありがとうございます。①から②につきご提案いただいた方式ですと非常にありがたいです。また、③④に関してですが、補足いたしますと、工程は19あり、点数については実際には処理件数であり、0件~最大で4,000件くらいになります。工程ごとにトップの件数も、50件~4000件とかなり異なるため、件数の比較はする必要がないので(グラフに件数は表示しない)各工程の中での順位の推移のみがわかるようなグラフにしたいと思っております。人数は年間で固定のため、縦軸は順位を5位ずつぐらいの目盛りにして、横軸は各工程名を表示し、折れ線グラフで1~4期までを色を変えて重ねて、期ごと・工程ごとの順位の推移をわかりやすく出来れば、フィードバックに最適なものが出来ると考えております。ご面倒をお掛けしますが、ご教示をよろしくお願いいたします。
tatsu99様 教えていただきましてありがとうございます。ご指定のサイトを表示しますと、ところどころ単語が和訳されたようになっていまして、わかる部分はなおせるのですが、わからない部分もあり、お手数をお掛けして大変申し訳ありませんがもし私の設定の問題であれば、表示方法を教えていただけますでしょうか。よろしくお願いいたします。
tatsu99様 初歩的な質問ですみませんでした。googleではエンコードの設定がわからず、explorerで正しく表示されました。コメントもつけてくださり、本当にありがとうございます。明日本データでテストしてみます。自分の知識では教えていただいた内容を理解して本データに合わせて調整できるか不安ですが、時間を割いて教えていただきましたので、なんとか頑張ってみます。お手数をお掛けしますが、引き続きよろしくお願いいたします。