ExcelマクロVBAでE列の注文日が最大の行を表示する方法
- ExcelマクロVBAを使用して、A列のIDでくくった場合に、E列の注文日が最大の行を表示する方法について教えてください。
- Excel2007やXPでの作業を前提に、A列のIDでグループ化し、E列の注文日が最大の行を抽出するためのExcelマクロVBAのコードや手順について教えてください。
- ExcelマクロVBAを利用して、A列のIDでデータをグループ化し、E列の注文日が最大の行のみを抽出する方法について教えてください。
- ベストアンサー
EXCELマクロVBAについて
Excel2007、XPを使用しています。 AからE列に下記のような情報が入力されています。 A / B / C / D / E ID / 名前 / 住所 / 電話 / 注文日 11111 / 田中 / 東京都 / 00000000000 / 2012/08/10 11111 / 田中 / 東京都 / 00000000000 / 2012/08/09 11111 / 田中 / 東京都 / 00000000000 / 2012/08/18 11112 / 佐藤 / 京都府 / 00000000000 / 2012/08/10 11113 / 鈴木 / 北海道 / 00000000000 / 2012/08/11 11113 / 鈴木 / 北海道 / 00000000000 / 2012/08/15 A列のIDでくくったとして、 E列の注文日が最大のみの行を表示させたいです。 A / B / C / D / E ID / 名前 / 住所 / 電話 / 注文日 11111 / 田中 / 東京都 / 00000000000 / 2012/08/18 11112 / 佐藤 / 京都府 / 00000000000 / 2012/08/10 11113 / 鈴木 / 北海道 / 00000000000 / 2012/08/15 このようなことはマクロで可能なのでしょうか? 恐れ入りますがご教授お願い致します。
- mitsunori32
- お礼率71% (10/14)
- Windows XP
- 回答数4
- ありがとう数3
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.3です。 追加質問の >列が増えた場合、どのコードを修正すれば良いでしょうか? >また注文日に当たるコードはどの部分か教えて頂けないでしょうか。 に関して・・・ 前回のコードはA~E列にデータがある!というコードで、E列に日付の列の場合で処理しています。 列が増えたり、日付列が変わる場合は、前回コードの ws3.Range("A:E").Sort key1:=ws3.Cells(1, 5), order1:=xlDescending For k = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row ws3.Range("A:E").AutoFilter field:=1, Criteria1:=ws2.Cells(k, 1) i = 2 Do Until ws3.Rows(i).Hidden = False i = i + 1 Loop Range(ws3.Cells(i, 2), ws3.Cells(i, 5)).Copy Destination:=ws2.Cells(k, 2) Next k ws3.Range("A:E").Delete のところに手を加えます。 上記コード内の1行目 >ws3.Range("A:E").Sort key1:=ws3.Cells(1, 5), order1:=xlDescending 部分はSheet3(Sheet1をそのままSheet3にコピーしたもの)のA~E列のE列(日付列)の 降順で並び替えています。 >key1:=ws3.Cells(1, 5) 部分がE列を指定して、 >order1:=xlDescending 部分で降順に並び替えです。 列が増えたり、日付列の変更がある場合はここで処理してみてください。 ※ この際ですので、コードの説明をすると (1)Sheet2のA列にSheet1のIDを重複なしに表示 (2)Sheet1をそのままSheet3にコピー (3)Sheet3を日付の降順に並び替え (4)Sheet2のA列データ順にSheet3にオートフィルタを掛ける (5)Sheet3の2行目から順に行が非表示でなくなるまでループ (6)データが日付の降順に並んでいるので、オートフィルタを掛けているデータの最初の表示されている行がSheet1の最新データとなる。 (7)(6)の行のデータをSheet2のオートフィルタを掛けた行のB列にコピー&ペースト といった手順を踏んでいます。 こんなんで参考になりますかね?m(_ _)m
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 一例です。 元データはSheet1にあり、Sheet2に表示するとします。 Sheet3を作業用のSheet(Sheet1に手を加えないようにするため)としていますので、 Sheet3は全く使用していないという前提です。 Alt+F11キー → 画面左の「This Workbook」をダブルクリック → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim i As Long, k As Long Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet Set ws1 = Worksheets("Sheet1") '←「Sheet1」は実際のSheet名に! Set ws2 = Worksheets("Sheet2") '←「Sheet2」も実際のSheet名に! Set ws3 = Worksheets("Sheet3") Application.ScreenUpdating = False ws2.Cells.ClearContents ws1.Rows(1).Copy Destination:=ws2.Cells(1, 1) ws1.Cells.Copy Destination:=ws3.Cells(1, 1) For i = 2 To ws3.Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.CountIf(ws2.Columns(1), ws3.Cells(i, 1)) = 0 Then ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1) = ws3.Cells(i, 1) End If Next i ws3.Range("A:E").Sort key1:=ws3.Cells(1, 5), order1:=xlDescending For k = 2 To ws2.Cells(Rows.Count, 1).End(xlUp).Row ws3.Range("A:E").AutoFilter field:=1, Criteria1:=ws2.Cells(k, 1) i = 2 Do Until ws3.Rows(i).Hidden = False i = i + 1 Loop Range(ws3.Cells(i, 2), ws3.Cells(i, 5)).Copy Destination:=ws2.Cells(k, 2) Next k ws3.Range("A:E").Delete ws2.Activate Application.ScreenUpdating = True End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m
お礼
すごいです!完璧です。 ありがとうございます! 追加で確認なのですが、 列が増えた場合、どのコードを修正すれば良いでしょうか? また注文日に当たるコードはどの部分か教えて頂けないでしょうか。
- LHS07
- ベストアンサー率22% (510/2221)
BASICを勉強すればできるようになります。
- akina_line
- ベストアンサー率34% (1124/3287)
こんにちは。 データが日付順に並んでいるとして、 11111 田中 東京都 0 2012/8/9 11111 田中 東京都 0 2012/8/10 11112 佐藤 京都府 0 2012/8/10 11113 鈴木 北海道 0 2012/8/11 11113 鈴木 北海道 0 2012/8/15 11111 田中 東京都 0 2012/8/18 それをID順、日付順にソートし、 11111 田中 東京都 0 2012/8/9 11111 田中 東京都 0 2012/8/10 11111 田中 東京都 0 2012/8/18 ○ 11112 佐藤 京都府 0 2012/8/10 ○ 11113 鈴木 北海道 0 2012/8/11 11113 鈴木 北海道 0 2012/8/15 ○ F列に下のような式を入れます。 =IF(A9 <>A10,"○","") あとは、F列に○のついている行をソートなどでまとめれば良いと思います。 では。
お礼
ご回答ありがとうございます! 教えて頂いた内容で出来ましたが、 データ内に作業列を作ることは避けたい為、 マクロ上での動作を希望してます。
関連するQ&A
- エクセルのデータ並べ替え(抽出)の方法
エクセルのデータ並べ替え(抽出)の方法 を教えてください。 下記のようなデータがあるとします。 A B C D 1 田中 東京 千葉 福岡 2 山田 京都 滋賀 3 佐藤 奈良 青森 USA 4 鈴木 カナダ 愛媛 A列は名前、B列以降は文字列です。B列以降はC列までの行、D列までの行とさまざまです。重複セルはありません。 これを下記のように並べ替えたいです。 A B C D 1東京 田中 2千葉 田中 3福岡 田中 4京都 山田 5滋賀 山田 6奈良 佐藤 7青森 佐藤 8USA 佐藤 9カナダ 鈴木 10愛媛 鈴木 こういうことは可能でしょうか??? 教えてください。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 【至急】エクセルで、一致するデータを紐付けたい
エクセルでsheet1のA列のデータに、sheet2の並び順の異なるA列~F列のデータを紐付け、一致、並び替えする方法がありましたら、ご教授ください。よろしくお願いいたします。 ※sheet1のA列とsheet2のA列は、同じデータですが順不同で入力されています。 sheet1 A B C D E F G 田中 斉藤 新井 伊東 塚越 佐藤 吉田 sheet2 A B C D E F 斉藤 東京都 文京区 123-0000 0120-・・・ × 伊東 東京都 台東区 123-1000 0120-・・・ ○ 新井 東京都 江東区 123-0000 0120-・・・ × 吉田 東京都 豊島区 121-0100 0120-・・・ △ 塚越 東京都 文京区 122-0000 0120-・・・ × 佐藤 東京都 新宿区 121-0000 0120-・・・ ○ 田中 東京都 大田区 111-0000 0120-・・・ ◎ ◆得たい結果◆ sheet1 A B C D E F G 田中 田中 東京都 大田区 111-0000 0120-・・・ ◎ 斉藤 斉藤 東京都 文京区 123-0000 0120-・・・ × 新井 新井 東京都 江東区 123-0000 0120-・・・ × 伊東 伊東 東京都 台東区 123-1000 0120-・・・ ○ 塚越 塚越 東京都 文京区 122-0000 0120-・・・ × 佐藤 佐藤 東京都 新宿区 121-0000 0120-・・・ ○ 吉田 吉田 東京都 豊島区 121-0100 0120-・・・ △
- ベストアンサー
- その他MS Office製品
- エクセルシート間の照合について
エクセルシート間で照合をしたいと思っています。 照合する項目は2つ。2つともあえばそのA列のデータを表示するというものです。 データは シート1(前年) A B C D 1 田中 123 東京都・・ 5 佐藤 124 千葉県・・ 3 山本 128 埼玉県・・ シート2(今年) A B C D 山本 128 埼玉県・・ 佐藤 124 北海道・・ 田中 123 東京都・・ C列とD列を照合し2つともあえばシート2のA列にシート1のA列のデータを入力する。なければ「なし」と入力できるようにしたいのです。 上の場合は山本のA列に「3」佐藤には「なし」田中には「1」と入るのうになればと思います。 入力されている列は同じですが順番はばらばらです。データ数は1万件を超えています。 どなたかアドバイスいただければと思います。よろしくお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- エクセルで一覧作成
エクセルで一覧作成 エクセルで以下のデータを作成したいのですが どのような関数を使用したらよいのでしょうか? A B C D 1 東京 田中 鈴木 小林 2 東京 鈴木 3 大阪 伊藤 鈴木 4 東京 佐藤 5 三重 小林 田中 ↓ A B C D E F G 1 東京 田中 鈴木 小林 鈴木 佐藤 2 大阪 伊藤 鈴木 3 三重 小林 田中 よろしくお願いします。
- ベストアンサー
- Windows XP
- エクセルで、次のような自動入力をしたい
A B C D E ・・ AA 1 田中 鈴木 佐藤 山田 2 鈴木 山田 海岡 3 田中 佐藤 佐藤 というような表があり、AAの列に名前を入力したとき、 D1に「山田」、C2「海岡」と、その行に関してAA列に新規の名前が入力されたときにD1,C2に自動入力することは、VBAで簡単にできますか? 3列目には「佐藤」さんがすでいるので入力不要です。 よろしくお願いします。(マクロ初心者です)
- ベストアンサー
- オフィス系ソフト
- エクセルVBAの質問です
sample.xlsがあり内容は下記のように A列に名前、B列に数字が入り、行数は一定でありません 田中一郎 3 鈴木健一 5 佐藤太郎 8 田中一郎 5 田中一郎 2 佐藤太郎 7 鈴木健一 3 佐藤太郎 9 鈴木健一 54 佐藤太郎 8 田中一郎 9 このエクセルシートにコマンドボタンを付け、VBAでコマンドボタンを押した場合 指定したエクセルファイル”kekka.xls”に 田中一郎 19 鈴木健一 62 佐藤太郎 32 と言うように、名前別でその氏名の横の数字の合計を表示させたいと考えています。 何卒お知恵をお貸しください、お願いします。
- ベストアンサー
- Visual Basic
- エクセルVBAについて教えて下さい。
エクセルVBAの質問です。 (1)の一覧から「出張」の項目のみを抽出し、別シートへ(2)のような形で記載したいのですが、VBA初心者なのでこれが出来るのかもよく分かりません。もし出来るならやり方を教えてください。 (1) A B C D E F G H I JOB NO 内容 担当者 日付 日数 行先 時間 02AAA001 出張 田中 2/2 ~ 2/4 3日間 名古屋 日勤 02AAA002 出張 佐藤 2/3 ~ 2/4 2日間 大阪 夜勤 02AAA003 作業 鈴木 2/5 ~ 2/8 4日間 工場 日勤 02AAA004 出張 吉田 2/4 ~ 2/6 3日間 東京 夜勤 ・ ・ ↓↓ (2) A B C D E F 佐藤 田中 鈴木 吉田 2/1 日 2/2 月 名古屋 2/3 火 *大阪 名古屋 2/4 水 *大阪 名古屋 *東京 2/5 木 *東京 2/6 金 *東京 2/7 土 ・ ・ ☆出張の場合のみ(2)表に記載する ☆日付、曜日、氏名は既に入っていて、日付と氏名の交差する所に行先を入れる。 ☆夜勤の場合、行先の前に『*』を入れる。 説明が下手ですみません。分かる方いらっしゃいましたらお願い致します。
- ベストアンサー
- オフィス系ソフト
- Excel行毎に項目列数の違う表を行列変換したい
A列に何かしらの名称、B列以降に文字列値があるとします。 鈴木|あああ|いいい|ううう| 佐藤|えええ| | | 田中|ううう|かかか| | ・・・ という表を、 鈴木|あああ 鈴木|いいい 鈴木|ううう 佐藤|えええ 田中|ううう 田中|かかか ・・・ というように変換したいのですが、うまい方法ありませんか?
- ベストアンサー
- その他MS Office製品
- excelデータの切り貼りマクロ
excelマクロの初心者です。 データの切り貼りをするマクロについて教えてください。 以下のような担当者と会社名の入った縦に大きなデータを 担当 社名 佐藤 A社 佐藤 B社 佐藤 C社 田中 D社 田中 E社 田中 F社 鈴木 G社 鈴木 H社 鈴木 I社 高橋 J社 高橋 K社 高橋 L社 最終的に 佐藤 田中 鈴木 高橋 A社 D社 G社 J社 B社 E社 H社 K社 C社 F社 I社 L社 このように一番上に担当者、下に該当する社名を羅列されるように切り貼りをしたいと思っています。 ファイルがいくつもあり、また行数はファイルごとに異なり一定ではありません。 マクロでどのように書いたらよいかご教授頂けないでしょうか。 よろしくお願いいたします<(_ _)>
- ベストアンサー
- Excel(エクセル)
- エクセルでの集計関数No.2
前回の質問より複雑なデータの集計が飛び込んで困っています。 例 A B C D E F G H I J 1 鈴木 田中 佐藤 八木 石島 須藤 徳間 遠藤 伊藤 斉藤 2 田中 八木 田中 遠藤 鈴木 伊藤 佐藤 佐藤 鈴木 徳間 3 石島 鈴木 徳間 鈴木 伊藤 .... といったデータが存在しています(A1:J3)の範囲内で最頻値の文字列を検出する関数の組み合わせを教えてください。回答例 鈴木 しかも、鈴木 佐藤が同一の場合メッセージを表示させるには..とほほです。よろしくお願いします。
- ベストアンサー
- Windows系OS
お礼
tom04様 事細かにご説明いただき、ありがとうございます! とてもわかりやすい解説で無事理解出来ました! これで作業を進めることが出来ます。 本当に助かりました!