お世話になります、エクセル初心者です。
氏名を入力と同時に、昇順表示にしたいのですが
ネットでいろんな所を探しても分かりません。
こちらでも探してみたのですが見つからず、お知恵拝借させていただければと思い
投稿させていただきました。
仕事で、ひと月の実績を昇順で氏名をリスト作成しているのですが
空き時間に実績がある方を入力できれば、少しでも効率化が図れるので助かります。
(現在ある2種類のシート)
(1)氏名入力をすると住所が自動表示されるようにVLOOKUPで関数を入れたシート。
(2)(1)にデータが飛ぶようにするための、指名・住所の一覧
これとは別に氏名入力をしていくだけで、そのつど昇順になるシートができれば
(1)のシートに氏名貼り付けをして、住所を引っ張ってこれるようにしたいのです。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
シート1には(1)の表が有って、シート2にはデータベースとして氏名と住所の表が有るとします。
シート1ではA列に氏名を入力すればB列にVLOOKUP関数でその方の住所が表示されるとします。そこで例えばC列から右の列には何かの実績を示す数値が入力されるとします。それらのデータに基づく氏名などのデータを昇順で並べたものを自動的にシート3に表示させるとしたら次のようにします。
なお、シート1では1行目は項目名でそれぞれのデータは2行目から下方に入力されているとします。
シート3のA1セルには、例えばシート1のC列でのデータを昇順で並べたときの表を作るとしたらシート1のC1セルに入力された項目名を入力します。
シート1の例えばJ列とK列には作業列を設けます。J2セルには次の式を入力して下方にドラッグコピーします。
=IF(OR(A2="",Sheet3!A$1=""),"",RANK(INDEX(A:I,ROW(),MATCH(Sheet3!A$1,A$1:I$1,0)),INDEX(A:I,2,MATCH(Sheet3!A$1,A$1:I$1,0)):INDEX(A:I,1000,MATCH(Sheet3!A$1,A$1:I$1,0)),1)+ROW(A1)/10000)
K2セルには次の式を入力して下方にドラッグコピーします。
=IF(J2="","",RANK(J2,J:J,1))
シート3のA1セルにはシート1で昇順で並べたい項目名を入力します。
2行目にはシート1での1行目をコピーして貼り付けます。
A3セルには次の式を入力してI3セルまで横にドラッグコピーしたのちに下方にもドラッグコピーします。
=IF(ROW(A1)>MAX(Sheet1!$K:$K),"",IF(INDEX(Sheet1!$A:$I,MATCH(ROW(A1),Sheet1!$K:$K,0),COLUMN(A1))="","",INDEX(Sheet1!$A:$I,MATCH(ROW(A1),Sheet1!$K:$K,0),COLUMN(A1))))
これでシート3のA1セルにシート1の1行目に入力された項目名を入力することでその項目名で昇順で並べられた表が自動的に表示されます。勿論、シート1でデータが下行に追加されることが有ればそのデータを自動的に取り込んでデータが昇順で並べられます。
KURUMITO様、お返事遅くなりましたが、お知恵をありがとうございました!
やはり初心者の私にはちょっと理解が難しく^^;
もうちょっと勉強しなければ!
でも、今後使い慣れていく段階で活用させていただける日がくると思いますので
メモをとらせていただきます★
ありがとうございました★☆
No.2
- 回答日時:
> 申し遅れましたが、セルの結合をして作表しておりました
結合したセルはソートできません。
であれば、根本的にやり方を見直す必要があるのでは?
> どこを変更すればよいのかが分かりません・・・
一度、やりたい並べ替えの手順をマクロで記録してみると良いです。
左下のステータスバーの「マクロの記録」をクリックして記録開始。
マクロ名はデフォルトのMacro1、保存先は作業中のブック
やりたいソートを実施。Sheet3のA2~C5の範囲を選択、並び替え。
マクロの記録終了。
Alt+F11でVBAを開くと、対象ブックのModule1に、Macro1が記録されています。
説明のために行番号を付加して、こんな感じのハズ。
01:Sub Macro1()
02:'
03:' Macro1 Macro
04:'
05:
06: Range("A2:C5").Select
07: ActiveWorkbook.Worksheets("Sheet3").Sort.SortFields.Clear
08: ActiveWorkbook.Worksheets("Sheet3").Sort.SortFields.Add Key:=Range("A2"), _
09: SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
10: With ActiveWorkbook.Worksheets("Sheet3").Sort
11: .SetRange Range("A2:C5")
12: .Header = xlNo
13: .MatchCase = False
14: .Orientation = xlTopToBottom
15: .SortMethod = xlPinYin
16: .Apply
17: End With
18:End Sub
コメントや空行は削除。
06行目は、並べ替えの際にセルの選択は必須で無いので削除。
07~09行目はソート条件のクリア、条件設定ですが、10~17行目のソート実施があれば不要なので削除。
15行目はソートにふりがなを使う/使わないですが、差し当たり関係ないと判断して削除。
結果、記録したSheet3の指定範囲をソートする処理は、
Sub Macro1()
With ActiveWorkbook.Worksheets("Sheet3").Sort
.SetRange Range("A2:C5")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
End Sub
って事になるハズ。
処理の本体を、必要な場所のモジュールに貼り付けします。
この回答への補足
改めまして、再コメントありがとうございます。
なかなか難しいもんですね(T△T)
最初に教えていただいたところからVBAっていうのを開きましたが、
「こんな感じのハズ」とおっしゃったようになっていませんでした・・・
私は途中で何をしてしまったのか・・・
VBAプロジェクトのSheet3をクリックして、右側に
「General」と「Macro1」というのがあって、その下に
Sub Macro1()
With ActiveWorkbook.Worksheets("Sheet3").Sort
.SetRange Range("A2:C5")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.Apply
End With
End Sub
をコピペしてみたけど、これが
「処理の本体を、必要な場所のモジュールに貼り付け」ってことなのか・・・
なんせ、エクセル初心者なものでモジュールっていうのすらわからずで(涙)
VLOOKUPなども、ネットでやり方探してなんとかやりこなしている程度なもんで、
せっかく詳しく解説してくださったのに残念な結果で申し訳ないです。
理解ができなくてすみません。。。
でも、親切にお答えいただき本当にありがとうございます★☆
遅くなりましたが、
色々と教えていただき感謝いたします★
今回の表には、今の私の技術で生かすことができませんでしたが、
これから色々とExcelで作表していく中でぜひ、今回のお知恵を
活用できるよう、メモを取らせていただきました。
お忙しいところ、本当に有り難うございました!
No.1
- 回答日時:
> これとは別に氏名入力をしていくだけで、そのつど昇順になるシートができれば
マクロで入力があった際に並べ替えするとかなら割と簡単です。
・入力終了と同時に並べ替えされるので、どこに入力したか分からなくなります。
・間違って入力したものも並べ替え、どこに行ったか探さなきゃならないので、修正が面倒です。
・マクロの実行はさむとundo出来ません。
など、問題あると思いますが。
手順は、
Alt+F11でVBAを表示。
Sheet1を並べ替えたいとして、Sheet1を右クリック-[コードの表示]。
A列を並べ替えするとして、以下のコードをコピペ。
Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveWorkbook.Worksheets("Sheet1").Sort
.SetRange Range("A:A")
.Orientation = xlTopToBottom
.Apply
End With
End Sub
この回答への補足
●neKo_deux様●
迅速な回答をありがとうございます!
操作手順分かりやすい文章で助かります。
さっそく試してみたところ、動じず・・・
申し遅れましたが、セルの結合をして作表しておりましたm(__)m
貼り付け先を、エクセルを駆使して枠を作ったもので・・・
作成しているエクセルでは
sheet3で、
セルA~Cの3列
縦に2~5の4列
に氏名入力する表になっておりました。
そこで、以下を入力して試したところです。
どこを変更すればよいのかが分かりません・・・
お忙しい所誠に恐れ入りますが、助けていただけると幸いです。
Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveWorkbook.Worksheets("Sheet3").Sort
.SetRange Range("A:A")
.Orientation = xlTopToBottom
.Apply
End With
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) Excelシフト表 固定シフトの自動変換化 1 2022/04/14 16:10
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
- Excel(エクセル) 【エクセル」 特定のセルで条件抽出した列を、別シートに上から詰めて表示したい。 8 2022/04/08 16:00
- Excel(エクセル) エクセルVBA VLOOKUPを使ってのカウント作業 2 2023/02/19 09:03
- Excel(エクセル) excelで検索した商品の画像(ネットワーク上の)を表示させたい。 3 2023/06/28 00:32
- Excel(エクセル) VBA セルの値と同じ名前のシートにデータを貼り付けするやり方を教えてください 2 2022/05/17 16:26
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで表
-
【マクロ】for next構文について
-
職場の人から聞かれており、こ...
-
ユーザー定義関数をアドイン登...
-
PDFの請求明細をエクセルにしたい
-
Excel関数-文字列で自動作成さ...
-
Excelデータをコピペして、ペー...
-
エクセルの関数について教えて...
-
エクセルで不等号記号(≠)が上に...
-
スプレッドシート、Excelでの数...
-
スプレッドシートで使う数式を...
-
Excelで50個のセルに同じ文字を...
-
[オートフィルタ]で抽出された...
-
エクセルの問題です。絶対値の...
-
エクセル関数を教えてください
-
各ページの1番上の表示について
-
Microsoft Officeの中古は信用...
-
pdfの表をexcelにはりつけて計...
-
Excelのif関数で文字が見えなく...
-
Excel 2019 は、SPILL機能があ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBA、別ブックへ転記す...
-
エクセルでの作業計算方法について
-
時間によってファイル名が変わ...
-
【関数】適切な文字数の数字を...
-
Excelについて教えてください
-
エクセル初心者です 関数の入れ...
-
【マクロ】ファイル名の変更に...
-
UNIQUE関数が使えないバージョ...
-
エクセルの計算
-
【関数】先頭だけにある、半角...
-
Excelで、決まった行を繰り返し...
-
Excelでセルの値が同じか...
-
LOOKUP関数を使えばいいのでし...
-
Excel
-
はがきについて。
-
エクセルの条件付き書式につい...
-
エクセルのデーターが2か月前の...
-
エクセル②
-
エクセルで「-0.0」と表示さ...
-
Microsoft1Officeの互換ソフト...
おすすめ情報