
No.5ベストアンサー
- 回答日時:
No1です。
VBA案です。仮に
350名のデータが入っているシート名が Sheet1
振込み日が B1(B列)だとして
並び替えた結果を表示したいシートの名前のタグを右クリック
コードの表示をクリック
VBエディターが起動したら
Private Sub Worksheet_Activate()
Sheets("Sheet1").Cells.Copy
Cells.Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess
End Sub
をコピーしてみてください。
簡単に説明しますと
Private Sub Worksheet_Activate() は、ほかのシートからこのシートを選択した時に実行される
Sheets("Sheet1").Cells.Copy Sheet1という名前のシートをコピー
Selection.Sort Key1:=Range("B2"), ・・ B列を基準に並び替えです。
必要に応じて
Sheet1とRange("B2")の部分は変更して使ってみてください。
並び替えを表示したいシートを選択すると勝手に実行されますので
見た目では関数を配置したような感覚で使えるはずです。
この回答への補足
補足
ありがとうございます。やってみたところ、
実行時エラー!'1004'
アプリケーション定義またはオブジェクト定義のエラーです。
と出てしまいます。(Q_Q)↓
新しいシートにコピーは出来ますが、ソートは出来ません。
実際に使ったコードは、
Private Sub Worksheet_Activate()
Sheets("会計用").Cells.Copy
Cells.Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Sort Key1:=Range("M2"), Order1:=xlAscending, Header:=xlGuess
End Sub
です。
会計用シートのB2からN338までデータが入っていて、ソートキーはM列です。1行目は項目名になっています。
頼りきりで申し訳ないのですが、どうかこの先も教えてください。
ありがとうございました。何とか、運用に間に合いました。
上手くいかないことも有りましたが、VBAエディタも調べたりして、似たのがあったので勉強もしました。(というほどでもありませんが。)今回のお陰で実際の入金の管理も助かったし、個人的には新しいことも学べて助かりました。また何かあればよろしくお願いします。
No.8
- 回答日時:
回答番号:ANo.2です。
>こちらに質問をしている間に、当方の仕様が変わってしまいました。
1つのシートにまとまっている方が簡単になります。
今仮に、
Sheet1のA2以下にクラス名のデータ
Sheet1のB2以下に出席番号のデータ
Sheet1のC2以下に名前のデータ
Sheet1のD2以下に振込日のデータ
Sheet1のE2以下に振込額のデータ
が入力されているものとします。
又、適当な列(ここでは仮にSheet3のA列とします)を作業列として使用し、
Sheet2のA2以下に振込日順に並べ替えたクラス名のデータ
Sheet2のB2以下に振込日順に並べ替えた出席番号のデータ
Sheet2のC2以下に振込日順に並べ替えた名前のデータ
Sheet2のD2以下に振込日順に並べ替えた振込日のデータ
Sheet2のE2以下に振込日順に並べ替えた振込額のデータ
を表示させるものとします。
まず、Sheet3のA2セルに次の数式を入力して下さい。
=IF(ISNUMBER(Sheet1!$D2),Sheet1!$D2+COUNTIF(Sheet1!$D$1:$D2,Sheet1!$D2)/COUNTIF(Sheet1!$D:$D,Sheet1!$D2),"")
次に、Sheet3のA2セルをコピーして、Sheet3のA3以下に貼り付けて下さい。
次に、Sheet2のA2セルに次の数式を入力して下さい。
=IF(ROWS($1:1)>COUNT(Sheet1!$D:$D),"",INDEX(Sheet1!A:A,MATCH(SMALL(Sheet3!$A:$A,ROWS($1:1)),Sheet3!$A:$A,0)))
次に、Sheet2のA2セルをコピーして、Sheet2のB2~E2の範囲に貼り付けて下さい。
次に、Sheet2のD2セルの書式設定を「日付」として下さい。
次に、Sheet2のA2~E2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。
以上です。
No.7
- 回答日時:
>B2に入れたコード
=IF($A2="","",VLOOKUP($A2,会計用!$A:$N,COLUMN(M2),0))
VLOOKUP関数の第3引数の「COLUMN(M2)」の部分は参照したい列番号を指定するのですから、そのセルに入力する場合も2列目なら2を参照する「COLUMN(B2)」などにしてください。
横方向にオートフィルコピーで対応しなくてもよいなら、もちろん列ごとに「2」や「3」のように直接数字を入力してもOKです。
No.6
- 回答日時:
1枚のシートになっているなら、以下の式で日付の大きい順に(一番上のセルがもっとも最近のデータ)並べ替えることができます。
元データがSheet1ならA2セルに以下の式を入力して下方向にオートフィルします。
INDEX(Sheet1!A$2:A$350,MATCH(LARGE(INDEX(Sheet1!$B$2:$B$350-ROW($B$2:$B$350)/10000,),ROW(A1)),INDEX(Sheet1!$B$2:$B$350-ROW($B$2:$B$350)/10000,),0))&""
=B2セルには以下の式を入力して右方向に1つおよび下方向にオートフィルします。
=IF($A2="","",VLOOKUP($A2,Sheet1!$A:$C,COLUMN(B2),0))
日付の若い順に並べ替えるなら、A2セルに以下の式になります。
INDEX(Sheet1!A$2:A$350,MATCH(SMALL(INDEX(Sheet1!$B$2:$B$350+ROW($B$2:$B$350)/10000,),ROW(A1)),INDEX(Sheet1!$B$2:$B$350+ROW($B$2:$B$350)/10000,),0))&""
この回答への補足
ありがとうございます。やってみたところ、
実行時エラー!'1004'
アプリケーション定義またはオブジェクト定義のエラーです。
と出てしまいます。(Q_Q)↓
新しいシートにコピーは出来ますが、ソートは出来ません。
実際に使ったコードは、
Private Sub Worksheet_Activate()
Sheets("会計用").Cells.Copy
Cells.Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Sort Key1:=Range("M2"), Order1:=xlAscending, Header:=xlGuess
End Sub
です。
会計用シートのB2からN338までデータが入っていて、ソートキーはM列です。1行目は項目名になっています。
頼りきりで申し訳ないのですが、どうかこの先も教えてください。
すみません。補足内容を間違えました。
以下がMackyNo1さんへの補足です。
実際に入れたコードは以下の通りで、B2セルに#N/Aが出てしまいます。(Q_Q)↓
何がいけないのでしょうか?
教えてください。
A2に入れたコード
INDEX(会計用!A$2:A$338,MATCH(LARGE(INDEX(会計用!$B$2:$B$338-ROW($B$2:$B$338)/10000,),ROW(A1)),INDEX(会計用!$B$2:$B$338-ROW($B$2:$B$338)/10000,),0))&""
B2に入れたコード
=IF($A2="","",VLOOKUP($A2,会計用!$A:$N,COLUMN(M2),0))
No.3
- 回答日時:
シート数が多いこと、かつ日付順に並べ替えることの条件があると、ご希望の操作は実質的に関数で対応することはできません。
以下のページを参考にして複数のシートを1つにまとめるマクロを実行します。
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
このシートで日付順に並べ替える操作を行えばご希望の操作になりますが、これも自動化したいなら、この操作をマクロの記録で実行して、そのコードを上記のコードの最後に追加します。
この回答への補足
ありがとうございます。ご紹介いただいたサイトはわかりやすくて良さそうです。
ところで、申し訳ないのですが、こちらに質問をしている間に、当方の仕様が変わってしまいました。
元のクラス順の8シート(8クラス)は一つのシートに変更になりました。(1クラス~8クラスが縦に長く続いています。)元の質問と違うのですが、こちらでお世話になっているので、改めてお伺いさせていただいてよろしいですか?
改めて質問します。一つのシートにクラス順に出席番号順に350人分の、「振込日」と「振込金額があります。それを別のシートに全クラスのデータを「振込日別」に並べたいのです。
厚かましいですが、よろしければご教示ください。
ありがとうございました。ベストアンサーに選んだ方法のシートごとのマクロだけでは、そのシートの編集(合計を追加したり、ところどころに空白行や小計を入れたり)ができなかったので、MackyNo1さんのアイデアもお借りして、無事、運用にこぎ着けました。初めは、いろいろなことが上手くいかなかったのですが、この際、大変勉強になりました。今後ともどうぞよろしくお願いします。
No.2
- 回答日時:
今仮に、クラスのデータが入力されている各Sheetにおいて、
名前のデータが入力されている列がA列、
振込日のデータが入力されている列がB列、
振込額のデータが入力されている列がC列、
であり、各列の1行目にはそれぞれ、
A1セルに 名前
B1セルに 振込日
C1セルに 振込額
という様に項目名が並んでいて、実際のデータは、2行目以降に入力されているものとします。
更に、B列には日付が連続して入力されていて、途中に文字列データが入力されているセルや、空欄は存在していないものとします。
又、適当なSheetを作業用Sheetとして使用するものとします。
ここでは仮に、Sheet9を作業用Sheetとします。
まず、Sheet9のB1セルから下に向かって、
B1セルに Sheet1
B2セルに Sheet2
B3セルに Sheet3
B4セルに Sheet4
B5セルに Sheet5
B6セルに Sheet6
B7セルに Sheet7
B8セルに Sheet8
という具合に、クラスのデータが入力されている各SheetのSheet名を、間を空けずに入力して下さい。(並べ方が順不同でも正常に動作しますが、なるべくならクラス順に並べて下さい)
次に、Sheet9のC1セルに次の数式を入力して下さい。
=IF($B1="","",COUNT(INDIRECT($B1&"!B:B")))
次に、Sheet9のC1セルをコピーして、Sheet9のC2~C8の範囲に貼り付けて下さい。
次に、Sheet9のA1セルに
0
と入力して下さい。
次に、Sheet9のA2セルに次の数式を入力して下さい。
=IF($B1="","",SUM($C$1:$C1))
次に、Sheet9のA2セルをコピーして、Sheet9のA3~A8の範囲に貼り付けて下さい。
次に、Sheet9のE1セルに次の数式を入力して下さい。
=IF(ROW()>SUM($C:$C),"",INDIRECT(VLOOKUP(ROW()-1,$A:$B,2)&"!R"&ROW()-VLOOKUP(ROW()-1,$A:$A,1)+1&"C"&COLUMNS($A:A),FALSE))
次に、Sheet9のD1セルに次の数式を入力して下さい。
=IF($F1="","",$F1+COUNTIF($F$1:$F1,$F1)/COUNTIF($F:$F,$F1))
次に、Sheet9のE1セルをコピーして、Sheet9のF1セルとG1セルに貼り付けて下さい。
次に、Sheet9のD1~G1の範囲をコピーして、同じ列の2行目以下に、(全てのクラスの合計人数を上回る行数になるまで)貼り付けて下さい。
次に、別Sheet(並び替え結果を表示するSheet)のA2セルに次の数式を入力して下さい。
=IF(ROWS($1:1)>COUNT(Sheet9!$D:$D),"",VLOOKUP(SMALL(Sheet9!$D:$D,ROWS($1:1)),Sheet9!$D:$G,COLUMNS($A:B)))
次に、別SheetのA2セルをコピーして、別SheetのB2セルとC2セルに貼り付けて下さい。
次に、別SheetのB2セルの書式設定を[日付]にして下さい。
次に、別SheetのA2~C2の範囲をコピーして、同じ列の3行目以下に、(全てのクラスの合計人数を上回る行数になるまで)貼り付けて下さい。
以上です。
尚、クラスのデータが入力されている各Sheetにおいて、実際のデータが入力されているのが、2行目からではなく、例えば3行目からである場合には、Sheet9のE1セルに入力する数式中の
+1
と記述されている箇所を、
+2
に変更して、
=IF(ROW()>SUM($C:$C),"",INDIRECT(VLOOKUP(ROW()-1,$A:$B,2)&"!R"&ROW()-VLOOKUP(ROW()-1,$A:$A,1)+2&"C"&COLUMNS($A:A),FALSE))
として下さい。
この回答への補足
ありがとうございます。詳しく細かく丁寧に書いていただいて、大変恐縮です。
ところで、申し訳ないのですが、こちらに質問をしている間に、当方の仕様が変わってしまいました。
元のクラス順の8シート(8クラス)は一つのシートに変更になりました。(1クラス~8クラスが縦に長く続いています。)元の質問と違うのですが、こちらでお世話になっているので、改めてお伺いさせていただいてよろしいですか?
改めて質問します。一つのシートにクラス順に出席番号順に350人分の、「振込日」と「振込金額があります。それを別のシートに全クラスのデータを「振込日別」に並べたいのです。
厚かましいですが、よろしければご教示ください。
No.1
- 回答日時:
一回きりの作業であれば手作業で
それぞれのシートのデータをコピーして別シートの最後の貼り付けて
最後に並び替えします。
毎回発生する作業であれば
VBAの力をかりてプログラムを作成して
その作業のたびにボタンを押すということになると思います。
もしよければこれを機械にVBAについて勉強して見られては如何でしょうか?
ありがとうございます。短期間に毎日、金額をチェックしたいのです。しかも使用者は私ではなく、別の者がしますので、何もしなくてもソートされている状態が理想です。
VBAは面白そうですので、今後機会があれば、挑戦したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELでCSVファイル保存すると...
-
1年分のデータから特定の月分...
-
1つのセルにまとまっている情報...
-
同一セルに日時があるものを日...
-
Excelで指定した条件と一致する...
-
Excel 空白セルの掛け算で答え...
-
OFFSET関数を使用した印刷範囲...
-
エクセルの使い方です。再質問...
-
エクセル
-
エクセルVBAで、複数セルのデー...
-
エクセルの主軸と第2軸の0を合...
-
エクセル条件付書式で指定の時...
-
エクセルで円グラフに引き出し...
-
エクセルで、時間 0:00を表示...
-
【Excel VBA】Worksheets().Act...
-
DATEDIFでマイナス表示をさせたい
-
EXCELの散布図で日付が1900年に...
-
Excel2017 フィルタ昇順並びがA...
-
Excelで小数点以下1桁の年数を...
-
Excelで、空白を表示したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同一セルに日時があるものを日...
-
EXCELでCSVファイル保存すると...
-
Excelで指定した条件と一致する...
-
1つのセルにまとまっている情報...
-
COUNTIFの反対の関数はあるので...
-
1年分のデータから特定の月分...
-
OFFSET関数を使用した印刷範囲...
-
ドロップダウンリストで空白の...
-
EXCELで年月日の表記から日付部...
-
エクセルVBAで、複数セルのデー...
-
エクセルでセルを一括で右詰に...
-
エクセル
-
エクセルVBA オートフィルの最...
-
excelで平均差を出したい
-
webクエリのurlの変更方法
-
色なしセルの合計値の出し方に...
-
Excelで連続データを行飛ばしで...
-
Excelのシートごとの日付の追加
-
エクセルで特定の行を除いて計...
-
エクセルで数字、文字列混在の...
おすすめ情報