• 締切済み

エクセル 初心者。

エクセルで「全シートから、指定した日付と入力文字を検索し その入力文字がある場合、指定のシートに情報を返す」ということはできるのでしょうか? 例えばですが… 日付  来客名  担当  売上  現金  未払い 4/2  AAA   山下  2000  1000 1000 こんな表で「山下」を全シートから 検索して、日付と来客名と売り上げと現金と未払いの情報を 別のシートに列単位で順に羅列するというようなことです。 マクロでも関数でもいいのですが こういった場合はどのようにすればよいのでしょうか? 初心者の質問で理解しづらいかと思いますが わかる方御教え願えますでしょうか? よろしく御願いします。

みんなの回答

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.7

シートまたいでとかでは、関数で行うのは現実的じゃありません。 手順: ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1()  dim who as string  dim w as worksheet  dim c as range  dim c0 as string ’誰を集計するのか問う  who = inputbox("WHO")  if who = "" then exit sub ’シートを準備する  on error resume next  application.displayalerts = false  worksheets(who).delete  application.displayalerts = true  worksheets.add after:=worksheets(worksheets.count)  activesheet.name = who ’各シートの「C列」から集める  for each w in worksheets  if w.name <> who then   with w.range("C:C")   set c = .find(what:=who, lookin:=xlvalues, lookat:=xlwhole)   if not c is nothing then   c0 = c.address   do    c.entirerow.copy worksheets(who).cells(range("C65536").end(xlup).row + 1, "A")    set c = .findnext(c)   loop until c.address = c0   end if  end with  end if  next ’以下はオプション  range("C:C").delete shift:=xlshifttoleft  worksheets(1).range("1:1").copy range("A1") end sub ファイルメニューから終了してエクセルに戻る マクロを実行する。 #あなたの「たとえば」に応じた例えばのマクロです。 ご自分のエクセルの「正しい姿」に合致するよう、当然ですがご自分ででキチンと手直して利用してください。

wonderinc777
質問者

補足

ご回答ありがとうございます。 すごく理想に近いように仕上がりました! 不躾で申し訳ないのですが もう少し教えて頂きたいのですが ・このVBAだと新たにファイルが出来てしまうのですが 指定したシート名にコピーはどのようにして行うのでしょうか? ・こちらの表の隣に違う表があるため(雑費などの計算表) コピーする範囲をしていしたいです。 ・こちらを実行すると、同時にシート内の指定範囲2カ所もコピーしたいのですが (片方は教えて頂きました名前を特定する範囲ともう片方は単純にセルを指定してコピー) 上のVBAに追加でできるのでしょうか? 初心者のため説明自体が解りづらいかと思いますが すごく解りやすくしていただいたので もう少しお付き合いいただけましたら幸いでございます。

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.6

No.4・5です。 補足に >計算表は1日集計にしております。 (シート1が1日の売り上げ、シート2が2日の売り上げ) とありますが、一番肝心なところです。 どのSheetに書き出すか?によって当然コードは変わってきます。 補足にも「どのSheetに書き出すか」が明記されていませんので、 一応最後のSheetに書き出す場合のコードにしてみました。 Sub Sample2() 'この行から Dim i As Long, k As Long, str As String, wS As Worksheet Set wS = Worksheets(Worksheets.Count) '←Sheet見出しの最後のSheet i = wS.Cells(Rows.Count, 1).End(xlUp).Row If i > 1 Then wS.Rows(2 & ":" & i).ClearContents End If str = InputBox("担当者名を入力してください。") For k = 1 To Worksheets.Count - 1 '←Sheet見出しの一番左側から最終Sheetの一つ前まで With Worksheets(k) .Range("A1").AutoFilter field:=3, Criteria1:=str i = .Cells(Rows.Count, 1).End(xlUp).Row If i > 1 Then .Rows(2 & ":" & i).Copy wS.Cells(Rows.Count, 1).End(xlUp).Offset(1) End If .AutoFilterMode = False End With Next k End Sub 'この行まで ※ VBAの場合Sheet順・各シートの行・列の配置が一つ違っただけでも めちゃくちゃな表示になってしまいますので、実際のデータに合わせて適宜変更してみてください。m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.4です。 画像の添付を忘れていました。 どうもごめんなさい。m(_ _)m

全文を見る
すると、全ての回答が全文表示されます。
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんにちは! VBAでの一例です。 検索結果を表示させるSheetはSheet1で Sheet見出しの2番目以降にデータがあるとします。 Alt+F11キー → メニュー → 挿入 → 標準モジュール → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) 尚、全Sheetとも↓の画像のようにレイアウトになっているという前提です。 Sub Sample1() 'この行から Dim i As Long, k As Long, str As String, wS1 As Worksheet Set wS1 = Worksheets("Sheet1") '←「Sheet1」は実際のSheet名に! i = wS1.Cells(Rows.Count, 1).End(xlUp).Row If i > 1 Then wS1.Rows(2 & ":" & i).ClearContents End If str = InputBox("担当者名を入力してください。") For k = 2 To Worksheets.Count With Worksheets(k) .Range("A1").AutoFilter field:=3, Criteria1:=str i = .Cells(Rows.Count, 1).End(xlUp).Row If i > 1 Then .Rows(2 & ":" & i).Copy wS1.Cells(Rows.Count, 1).End(xlUp).Offset(1) End If .AutoFilterMode = False End With Next k End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m

wonderinc777
質問者

補足

丁寧な解説誠に感謝致します。 説明でいい忘れておりましたが、 計算表は1日集計にしております。 (シート1が1日の売り上げ、シート2が2日の売り上げ) この場合でも同じ記述でできますでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • k-josui
  • ベストアンサー率24% (3220/13025)
回答No.3

質問を斜め読みですが、単純にピボットテーブルでできませんか? この方が余程簡単ですが・・・     http://www4.synapse.ne.jp/yone/excel2010/excel2010_pivot1.html http://hamachan.info/excel/piboto.html

全文を見る
すると、全ての回答が全文表示されます。
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

関数で対応するのでしたら次のようにします。 マクロの場合と違って関数の場合には各シートにデータが追加されれば自動的にまとめのシートにデータが反映されます。 例えばシート1からシート3にデータが有るとして、山下のデータをシート4にまとめて表示させるとしたら次のようにします。 シート1からシート3までのシート見出しをCtrlキーを押しながらクリックします。これでシート1からシート3までが作業グループになります。そこでH2セルに次の式を入力して下方にドラッグコピーします。 =IF(C2="","",C2&COUNTIF(C$2:C2,C2)) 次にまとめのシートのA1セルには担当の文字を入力し、B1セルには山下などの担当名を入力します。 B2セルから右横方向にはSheet1,Sheet2などとシート名を入力します。 B3セルには次の式を入力して右横方向にドラッグコピーします。 =IF(B2="","",COUNTIF(INDIRECT(B2&"!C:C"),$B$1)) 各シートに担当者名の行が何行あるのかが表示されます。 A4セルには0を入力します。B4セルには次の式を入力して右横方向にドラッグコピーします。 =IF(B3="","",A4+B3) 以上でお望みの表を作成するための準備作業は終わります。 A6セルから右横方向にはシート1などでの項目名をコピーして貼り付けます。 A7セルには次の式を入力して右横方向にドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(OR(ROW(A1)>MAX($4:$4),A$6=""),"",INDEX(INDIRECT(INDEX($2:$2,MATCH(ROW(A1)-0.1,$4:$4,1)+1)&"!A:F"),MATCH($B$1&(ROW(A1)-INDEX($4:$4,MATCH(ROW(A1)-0.1,$4:$4,1))),INDIRECT(INDEX($2:$2,MATCH(ROW(A1)-0.1,$4:$4,1)+1)&"!H:H"),0),COLUMN(A1))) A7セルから下方にはシリアル値が表示されますのでそれらの行を右クリックして「セルの書式設定」の「表示形式」からお望みの日付に変更します。

全文を見る
すると、全ての回答が全文表示されます。
  • soixante
  • ベストアンサー率32% (401/1246)
回答No.1

マクロで対応可能でしょう。 シート1から100までデータが入っているとし、 アウトプットするシートをシート999とするならば、 For i=1 to 100 でシート1から100まで回し、 その中に Do while ~Loop で、最終行まで「山下」を検索し、 それで、 If ~ then で、山下にヒットしたら、 シート999の最終行 Worksheets("Sheet999").Cells(Rows.count,1).End(xlup).Row+1 にコピペしたらいいんではないでしょうか。 なお、Application.ScreenUpdating はFalseにしといたほうがいいと思います。

wonderinc777
質問者

補足

ご回答ありがとうございます。 おそらくある程度使える人にはわかるように 書いて頂いてると思うのですが お手数でなければ、実際にVBAに記述する 書き方で書いて頂けませんでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • あるエクセルシートにA行に顧客名、B行に売上が日付順に羅列されているの

    あるエクセルシートにA行に顧客名、B行に売上が日付順に羅列されているのですが、ある特定の顧客だけの売り上げのみを指定の日付の範囲で集計したい場合の手段についてお教え下さい。どのような手段があるでしょうか? よろしくお願い申し上げます。

  • エクセル

    シート1~5まであります。別に情報シートを作成しています それぞれ同じ原本から作成しています 全部のシートにA1~A10のセルに日付、B1~B10のセルに文字など入力がするところがあります 入力はA1から順番に入れていきます 例えば 保存ボタンを作成しておく シート1のA1に日付、B1に”文字”を入力し、保存ボタンをおす 情報シートに日付と内容が一致する情報がなければ、 情報シートのA列にシート名、B列に日付、C列に入力した内容が 空白のところに出力される こんな感じに作成できないでしょうか?

  • エクセルで検索

    エクセルシートに商品名が1000種類くらいあります。 そのなかからaaaの文字列を持つものをすべて検索し、検索結果の中からaaa-xxを特定のセルに表示させたいのです。 現在は、編集→検索→aaaを入力→すべて検索→aaa-xxを選択→上の入力欄に表示されたものをコピーして特定のセルにペースト という手順でやています。 この操作をもっと単純にできないでしょうか。 ご存知の方よろしくお願いいたします。 (特定のセルに商品名をペーストすると、その商品の月別売上が表とグラフになるようになっています。)

  • エクセル関数について

    エクセルで複式簿記の為に現金元帳と預金元帳を作成しました。 現金元帳と預金元帳を参照して売上元帳を作ろうと考えています。 現金元帳と預金元帳は   A      B        C             D      E      F  日付   勘定科目   摘要(企業名など)   借方    貸方    残高  となっており1月~12月のシートを作ってあります。 売上元帳を    A         C           D        日付    摘要(企業名など)   借方(売上)   このような表にしたいのですが 企業名を検索値にして VLOOKUPで作成しようとしたのですがその場合、D列の借方(売上)金額は表示できるのですが C列の左側のA列はエラー表示になってしまいます。 LOOKUPでも試しましたが日付がすべて同じ日付になってしまいます。 どのようにしたら上手く行くのか知恵を貸してください。 因みに 現金元帳で1ファイル(12シート) 預金元帳で1ファイル(12シート) 売上元帳で1ファイル(12シート) で作成しようとしています   

  • エクセルについて

    初心者です。呆れる質問かもしれませんがよろしくお願いします。毎日一つのシートに売上を入力しているのですが、別のシートで日付や期間また個人名などを指定して合計や平均などを表示させたいのですが方法や手順がわからないのです。初心者ですので単語の意味がわからないことが多いので、できるだけわかりやすく説明していただけると助かります。よろしくお願いします。

  • エクセルで複数シートをまとめる

    エクセル初心者です。店舗ごとにシートを分けて現金出納を入力しています。 日付  科目   入金   出金   残高 2/1 普通預金      1    1 2/1 売上    1         2 2/2 売上    1         3 上記のように店舗が16あるので16シートづつ入力してしています。これを一つのシートにそのまま自動転記させ1枚で印刷したいと思っています。できれば、自動転記させたものを日付ごとに印刷したいと思いますがエクセルで可能でしょうか。初心者の私にはできませんでした。どうか詳しい方教えてくださいお願いします。

  • エクセルについての質問です。

    エクセルについての質問です。 Aとういうブックから(以後A)Bというブック(以後B)にデータを吸出し、Aに入力されているデータのうち数個をBに集めた際、 Bに吸い出したデータの中から、セルに入力されたデータの右から3個の文字がこの文字だったらシート2へとか左から幾つめがこの文字だったらシート3へとかって出来るのでしょうか・・・?分かりづらいかもですが例を挙げさせて頂きます・・・ 例) ブックA←毎日データを入力(フォーマット等が専用で有り、会社として使用方法が決められているブック) ブックB←Aに入力されたデータのうち幾つかを集め他店と共有して情報を読み取る Aのシート1に入力されているデータ ↓ Bのシート1へ='[ブックA]シート1'!$A1等を使用しデータの吸出し A B C D E F 1 日付 氏名 伝票No. 品番 品名 数量 2 10/1 山本 001 123 aaa a 2 3 10/2 佐藤 002 122 aaa b 1 4 10/3 加藤 003 213 a ccc 1 ←AからBのシート1に集められるデータの内容 5 10/4 田中 004 312 a ddd 1 (投稿の仕様上?でスペースが無くなって行列が合わなくなってますが・・・) : : : : ここからE列に入力されたデータを判別してシート2以降に振り分けをしていきたいのですが・・・ aaaという商品にはaaa a、aaa b、aaa cがあり、aという商品にはa ccc、a dddとある場合、 E列に入力されていくデータの前後の文字列を判別して、D、E、Fをシート2以降に振り分けていくことは可能なのでしょうか・・・? E列に入力された文字列の前3つがaaaだった場合、同一行のD、E、Fをシート2へとか、 E列に入力された文字列の後ろ3つがcccだった場合、同一行のD、E、Fをシート3へ等の 振り分けをしたいのですが・・・・ 質問の仕方が悪すぎてとても分かりづらいですが、これかなって思われる方・・・ご回答お願いします・・・ 補足 品名に半角スペースありだったり半角スペースなしで10文字くらいの文字だったりとランダムです・・・ LEFT、MID、RIGHT関数を使用しようと思ったのですが上手くいかずで・・・

  • エクセル複数シートの検索とVBA

    エクセルVBA初心者です。 今エクセル2007で、下画像の上段・中段のような売上げシートを ブックの中に複数シート作成しています。 シートは売上げのあった日毎に作成しており、シート名は「1.1」のように日付にしています。 売上日はシートの左上のA1セルに入力しています。 ここでしたい処理なのですが、画像の下段のように検索用の シートを1枚作り、そこに売上内容を入力し、マクロコードを実行すれま、自動的に 該当するデータ(売上内容から支払い方法まで)を表示するコードはあるのでしょうか。 今は手作業で、シートを目視で確認しているので大変になってきました。 よろしくお願いします。

  • エクセル関数

    エクセル2010を使っていますが、1つのシートAには販売時の日付、品番、数量、単価、販売額が記されており、同一ファイル内には別のシートBで指定した日付の売上明細を表記したいと思っていますが、うまく関数が組めません。どのような関数を組めば表記できますでしょうか?ちなみにシートAは1か月継続して使うため最大ラインがおおよそ1000行くらいで、シートBは最大50行くらいの表記が可能である必要があります(A5~A55行目) 指定した日付の売上明細(シートB)に表記が必要なので品番、数量、金額になります 指定する日付ですが、シートBの先頭行A1かB1に日付を入力し、A5行目から開始しようと思っています。A5は品番、B5は数量、C5は数量、D5は単価、D6は合計を表記したいと思っています

  • 他のシートへコピーしたときの文字化け

    EXCELで、ほかのシートのセルに書き込んだ文字をシート1のセルに反映するようにしました。文字と数字は、ちゃんと反映されているのですが、日付を入力するとシート1のセルには、よく解らない数字の羅列が表示されます。 日付がきちんと表示されるようにするには、どうしたらよいのでしょうか。

このQ&Aのポイント
  • HDDが破損したため、入れ替えと再インストールを行った際、過去に設定したスキャナー設定のユーザー定義サイズの情報はどこに保存されているのか気になります。バックアップしている以前の情報を利用できるのか知りたいです。
  • お使いの環境にはWindows10を使用しており、USBケーブルで接続されています。また、電話回線の種類はひかり回線です。
  • 閲覧していたFAQのタイトルは「インクジェット/レーザー プリンター」任意で用紙サイズを設定したい(ユーザー定義サイズ)|ブラザーでした。
回答を見る

専門家に質問してみよう