• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルで別シートの情報の拾う方法)

エクセルで別シートの情報の拾う方法

このQ&Aのポイント
  • エクセル2007で、データシートの情報を別のカレンダーシートへの転記する方法をご教示頂けますでしょうか?
  • エクセルの案件シートとカレンダーシートにおいて、特定の日付に該当する情報を転記し、条件に応じて分類ごとに表示する方法が分かりません。
  • sumproductやvlookupでデータを拾おうとしましたが、条件分けがうまくできませんでした。VBAを使えば解決できる可能性もあると聞いたのですが、自力で複雑なVBAを書く自信がありません。VBAでの解決方法を教えていただけますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 回答番号:ANo.2の続きです。  次に、Sheet2のD3セルに次の数式を入力して下さい。 D3=IF(ROWS($2:3)-MATCH(MAX($A$3:$A3),$A$3:$A3)>COUNTIF(Sheet1!$E:$F,MAX($A$3:$A3)),"",INDEX(Sheet1!$A:$A,SUMPRODUCT(ROW(OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E)))*((OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))=MAX($A$3:$A3))+(OFFSET(Sheet1!$F$1,,,MATCH(9^9,Sheet1!$E:$E))=MAX($A$3:$A3))>0)*((COUNTIF(OFFSET(Sheet1!$E$1,,,ROW(OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))),2),MAX($A$3:$A3))-(OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))=OFFSET(Sheet1!$F$1,,,MATCH(9^9,Sheet1!$E:$E)))=ROWS($2:3)-MATCH(MAX($A$3:$A3),$A$3:$A3))+(COUNTIF(OFFSET(Sheet1!$E$1,,,ROW(OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))),2),MAX($A$3:$A3))=ROWS($2:3)-MATCH(MAX($A$3:$A3),$A$3:$A3))>0))))  次に、Sheet2のE3セルに次の数式を入力して下さい。 =IF(ROWS($2:3)-MATCH(MAX($A$3:$A3),$A$3:$A3)>COUNTIF(Sheet1!$E:$F,MAX($A$3:$A3)),"",INDEX(Sheet1!$C:$C,SUMPRODUCT(ROW(OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E)))*((OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))=MAX($A$3:$A3))+(OFFSET(Sheet1!$F$1,,,MATCH(9^9,Sheet1!$E:$E))=MAX($A$3:$A3))>0)*((COUNTIF(OFFSET(Sheet1!$E$1,,,ROW(OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))),2),MAX($A$3:$A3))-(OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))=OFFSET(Sheet1!$F$1,,,MATCH(9^9,Sheet1!$E:$E)))=ROWS($2:3)-MATCH(MAX($A$3:$A3),$A$3:$A3))+(COUNTIF(OFFSET(Sheet1!$E$1,,,ROW(OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))),2),MAX($A$3:$A3))=ROWS($2:3)-MATCH(MAX($A$3:$A3),$A$3:$A3))>0))))  次に、Sheet2のB3~E3の範囲をコピーして、Sheet2のB4~E4の範囲に貼り付けて下さい。  次に、Sheet2のA4~E4の範囲をコピーして、同じ列の5行目以下に貼り付けて下さい。  後は、Sheet2のA3セルに、 2011/2/2 という具合に、年月日(必ず年も入力して下さい)を入力すると、自動的にカレンダー表が、表示されます。(A3セルに「2011/2/2」と入力しますと、セルのデータは自動的に「2011/2/2」を表すシリアル値自動的に変換され、表示自体は「2/2」と表示されます)  尚、複数の案件が重なる日の場合は、自動的に次の日の日付を表示する行をずらして、複数行に渡って案件が表示されます。

gawa00264
質問者

お礼

kagakusuki様 ご回答ありがとうございます!! お礼が遅くなり大変失礼致しました。 offsetやrow関数にこんな使用方法があると知らず知識不足でした。。 ご教示頂きありがとうございます! 教えて頂いた数式をもとにエクセルを修正して利用したいと思います。

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

その他の回答 (2)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

 関数を使った方法です。  今仮に、(1)のシートのシート名がSheet1、(2)のシートのシート名がSheet2であるものとします。  まず、Sheet2のA3セルとA4セルの書式設定をm/dにして下さい。  その方法は、次の通りです。 Sheet2のA3~A4の範囲を選択   ↓ 選択範囲を示している黒い太枠の内側にカーソルを合わせ、マウスを右クリック   ↓ 現れた選択肢の中から、[セルの書式設定]を選択してクリック   ↓ 現れた[セルの書式設定]ウィンドウの[表示形式]タグをクリック   ↓ [分類]欄の選択肢の中から、[日付]を選択してクリック   ↓ [種類]欄の選択肢の中から 3/14 或いは、月/日形式で記されている日付のものを選択してクリック   ↓ [セルの書式設定]ウィンドウのOKボタンをクリックする  次に、Sheet2のB3セルの書式設定をaaaにして下さい。  その方法は、次の通りです。 Sheet2のB3セルを選択   ↓ 選択範囲を示している黒い太枠の内側にカーソルを合わせ、マウスを右クリック   ↓ 現れた選択肢の中から、[セルの書式設定]を選択してクリック   ↓ 現れた[セルの書式設定]ウィンドウの[表示形式]タグをクリック   ↓ [分類]欄の選択肢の中から、[ユーザー定義]を選択してクリック   ↓ [種類]欄に aaa と入力する   ↓ [セルの書式設定]ウィンドウのOKボタンをクリックする  次に、Sheet2のA4セルに次の数式を入力して下さい。 =IF(ISNUMBER($A$3),IF(ROWS($2:4)-MATCH(MAX(A$3:A3),A$3:A3)>COUNTIF(Sheet1!$E:$F,MAX(A$3:A3)),MAX(A$3:A3)+1,""),"")  次に、Sheet2のB3セルに次の数式を入力して下さい。 =IF($A3="","",$A3)  次に、Sheet2のC3セルに次の数式を入力して下さい。 =IF(ROWS($2:3)-MATCH(MAX($A$3:$A3),$A$3:$A3)>COUNTIF(Sheet1!$E:$F,MAX($A$3:$A3)),"",IF(SUMPRODUCT((OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))=MAX($A$3:$A3))*(COUNTIF(OFFSET(Sheet1!$E$1,,,ROW(OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))),2),MAX($A$3:$A3))-(OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))=OFFSET(Sheet1!$F$1,,,MATCH(9^9,Sheet1!$E:$E)))=ROWS($2:3)-MATCH(MAX($A$3:$A3),$A$3:$A3)))>0,"締切 ","")&IF(SUMPRODUCT((OFFSET(Sheet1!$F$1,,,MATCH(9^9,Sheet1!$E:$E))=MAX($A$3:$A3))*(COUNTIF(OFFSET(Sheet1!$E$1,,,ROW(OFFSET(Sheet1!$E$1,,,MATCH(9^9,Sheet1!$E:$E))),2),MAX($A$3:$A3))=ROWS($2:3)-MATCH(MAX($A$3:$A3),$A$3:$A3)))>0,"発注締切","")) ※長過ぎる数式が他にもあり、回答欄に入力可能な文字数を超えてしまうため、このサイトの規約には少々反しますが、残りは次の回答に記させて頂きます。

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

こんばんは! なかなか他の方からの回答がないようなので・・・ お示しの画像を拝見するとSheet1(上側のSheet)に同じデータが複数行あるように思われますが、 これは当方の見間違いでしょうか? それから、同日の場合が複数あるようなので1行で表示するというより、複数列で同日の日数分だけデータを表示してはどうでしょうか? 一例ですが、↓の画像のようにSheet2の配置を変えてみました。 同日データがある場合は右方向へ3セルずつ表示するようにしています。 VBAになってしまいます。(Sheet1の重複する行は削除するコードも入れています) Alt+F11キーを押します。 VBE画面が表示されますので、画面左側にSheet1・Sheet2・・・ThisWorkbook とあるはずです このThisWorkbookをダブルクリックし↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行)です Sub test() 'この行から Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("sheet1") '←Sheet名の「sheet1」は適宜変更 Set ws2 = Worksheets("sheet2") '←こちらのSheet名も適宜変更 For i = ws1.Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 If ws1.Cells(i, 1) = ws1.Cells(i - 1, 1) And ws1.Cells(i, 3) = ws1.Cells(i - 1, 3) And _ ws1.Cells(i, 4) = ws1.Cells(i - 1, 4) And ws1.Cells(i, 5) = ws1.Cells(i - 1, 5) And _ ws1.Cells(i, 6) = ws1.Cells(i - 1, 6) Then Rows(i).Delete (xlUp) End If Next i For i = 2 To ws1.Cells(Rows.Count, 1).End(xlUp).Row For j = 3 To ws2.Cells(Rows.Count, 1).End(xlUp).Row If ws1.Cells(i, 5) = ws2.Cells(j, 1) Then With ws2.Cells(j, Columns.Count).End(xlToLeft).Offset(, 1) .Value = ws1.Cells(1, 5) .Offset(, 1) = ws1.Cells(i, 1) .Offset(, 2) = ws1.Cells(i, 3) End With End If If ws1.Cells(i, 6) = ws2.Cells(j, 1) Then With ws2.Cells(j, Columns.Count).End(xlToLeft).Offset(, 1) .Value = ws1.Cells(1, 6) .Offset(, 1) = ws1.Cells(i, 1) .Offset(, 2) = ws1.Cells(i, 3) End With End If Next j Next i Dim k As Long k = ws2.UsedRange.Columns.Count For k = 1 To k ws2.Columns(k).AutoFit Next k End Sub 'この行まで 尚、一旦マクロを実行すると元に戻せませんので別Sheet・または別Bookにコピー&ペーストしてマクロを試してみてください。 以上、参考になればよいのですが 外したいたらごめんなさいね。m(__)m

gawa00264
質問者

お礼

tom04様 早速のアドバイスありがとうございます! やはりVBAを使った処理がスムーズなのですね。 重複している行は…説明が下手で申し訳ないです…。 「レインボーペイント」の「花色ニュータウン」案件では ピンクの塗料が100缶、下地塗料が40缶必要、と言うように (F列)発注締切の右以降に商品詳細や金額をインプットしようとしています。 また、上記のようにすると締切日が拾えないかと思い、B列に案件の連番を入れました。 tom04様に教えて頂いたVBAの、削除命令部分の代わりに B列に入力されていることを条件分岐に入れさせて頂きます。 いつもエクセルは手探りで四苦八苦していましたが、今回は解決が早そうです。 ご回答大変参考になりました。ありがとうございます!!

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

関連するQ&A

  • エクセルのデータを別のシートに

    今日は。 シート(1)にある日付(1~31)の後の複数のデータをシート(2)に作ったカレンダーに反映したいのですが、その方法を教えていただけないでしょうか? 例えば、シート(1)のEの列(E2)に18を入れると、シート(2)に作ったカレンダーの18日のセルの中にE3~E5の複数の情報が反映されるという具合です。 よろしくお願い致します。 kyshtoo

  • 【エクセル関数】別シートから複数列のデータを一度に挿入する方法

    はじめまして。 エクセル関数について下記ご教示願います。 ●Sheet1のE列を基準にSheet2のデータをSheet1に挿入 ●Sheet2から挿入する列は複数ある ●Sheet2の複数列に対応するSheet1の列も複数ある  ⇒Sheet2の複数列データをSheet1の対応する列に一度に挿入したい [Sheet2]  A     B      C     D       E     F 1番号  品名     規格名 アイテム番号  メーカー  発売日 2 1  バラ     A2354   5673      山田  12/12  3 2  キク    B6899 8239      田中 12/23 4 3  ラン    C1432 3324     中田 12/24 [Sheet1]  A    B    C    D    E   F 1番号 規格名  メーカー  品名  アイテム番号 発売日 2 1               5673 3 2               8239 4 3               3324  ◆Sheet2のデータをSheet1に挿入ということで、 [Sheet2][Sheet1]    C ⇒⇒ B    E ⇒⇒ C    B ⇒⇒ D    F ⇒⇒ F この複数列のデータ挿入を一気に行う方法はあるのでしょうか。 よろしくお願い致します。

  • エクセルで検索して別シートに抽出したい

    エクセル2003で顧客リストを作成しています。 そのリストの中から特定の文字列を検索し(あいまい検索)、その項目が含まれる行ごと 別シートに抽出をしたいです。 ほかの方のご質問も参考に試してみたのですが、上手くいきません。 1行目に各項目名 A日付 B担当1 C担当2 D管理番号 E顧客名 2行目からデータです。 ほぼ担当1か顧客名で検索し、検索結果は複数になることがほとんどです。 どなたかよろしくお願いいたします。

  • 複数のシートを一つのシートにまとめる(エクセル)

    こんにちは 10日あるいは一週間毎に区切られた 複数のシートを一つのシートにまとめたいのですがうまくいきません。 sheet1、2にそれぞれ 列A 列B 列C があったとすると  列A 列B 列C 列D 列E 列F  と表示するようにするにはどうしたらいいですか?

  • エクセルの1シートを項目別に別シートへ分ける方法

    エクセル2010で1シートのデータを項目別に別シートへ自動的に分割する方法で困っています。 検索するとマクロを使うと書いていますが、マクロはほとんど使ったことが無いのもあって、わかりませんでした。 シート1 A列(日付8ケタ+商品番号6ケタ) B列(売上額) 20130515000004           300 20130515000006           100 20130518000004           300 20130519000001           500 20130519000004           300 ・・・                   ・・・ をA列の日付部分上8ケタを使って日別にシートを分け、 シート名をuriage20130515(uriageと日付8ケタ)という名前にしシート名+CSV形式で保存したいです。 シート2 シート名:uriage20130515 A列         B列 20130515000004 300 20130515000006 100 シート3 シート名:uriage20130518 A列         B列 20130518000004 300 シート4 シート名:uriage20130519 A列         B列 20130519000001 500 20130519000004 300 このように自動で別シートに分割した上で、シート名CSV形式で保存まで自動でできるとありがたいです。 自動化できるならシートを分割するマクロ、シート名でCSV保存するマクロが一つのマクロになっていても、分かれていてもOKです。 このようなことはできますか? よろしくお願いします。

  • 【Excel VBA】別シートへの反映方法

    こんばんは。 現在月間&日ごとのスケジュール表をVBAで作成しています。 そこで質問です。 Sheet1のA列に日付、B列に予定、C列に人の名前 があります。 Sheet1のC列の人の名前を各日付ごとの シート(シート名は1日、2日、3日・・・)のセル「E5」へ 反映させたいのですが、どうしても分かりません。 分かり難い質問で、大変申し訳ありませんが、アドバイスよろしくお願いします。

  • シート1の情報をシート2に移動させる

    シート1 100社 .... A B C D 1 A社 100 東京 2 B社 50 大阪 3 C社 200 東京 4 D社 10 福岡 5 E社 300 東京 6 F社 150 大阪 シート2 100社のうちの50社 ...... A B C D 1 A社 佐藤社長 Aランク 2 C社 鈴木社長 Bランク 3 F社 山田社長 Aランク 簡単な例でご説明します。 上記のシート1は、すべての客先が入っています。 それに対し、シート2は重要客先だけに絞った(抽出した)別のデータです。 例えば100社あったら50社。 シート2はシート1にない情報も含まれているため、そのシート2だけにあるB列の山田社長、鈴木社長及びC列のAランク、Bランクなどの情報をシート1の、A、B、C、D社のD列、E列に追加で入力したいという考えです。 シート1とシート2がそれぞれ100社であれば、シート2のB列及びC列の情報をまとめてコピーペーストで移せるのですが、シート1とシート2の1行、2行、3行の行が異なる為、簡単にコピーペーストだけではできない状況です。。 このような場合、どのようにすれば簡単にシート2の情報をシート1に移せるか、教えて頂けますか。

  • excel 別シートへのデータの転記

    sheetが二枚あります。 sheet1 元データ sheet2 転出先(三種類あります) sheet1のA列に〇がついていたらsheet1Q列のシート名を見て、 転出先に同じデータがあるか?無ければ新規作成をするか? 新規作成をする場合には以下のように、 そのシート名の各セル番地にデータを転記。 sheet1のA列2行目移行同じ繰り返しで○があるか見に行く。 sheet1の1行目は項目名になります。 A2に○が付いていてQ列のシート名が100だった時 A2のデータを以下のように。 sheet1   sheet2(シート名は100) P列の値 → A7へ C列の値 → A8へ H列の値 → A9へ I列の値 → A10へ F列の値 → E5へ L列の値 → D6へ M列の値 → D7へ K列の値 → F9へ J列の値 → D8へ 続けてA4に○が付いていてQ列のシート名が100だった場合。 sheet1   sheet2(シート名は100) P列の値 → A12へ C列の値 → A13へ H列の値 → A14へ I列の値 → A15へ F列の値 → E10へ L列の値 → D11へ M列の値 → D12へ K列の値 → F14へ J列の値 → D13へ 以上のようなことがしたいのですが、 参考書でサンプルなどを見てやっているのですが、 なかなかうまくいきません。 コードのご教示をお願いたします。

  • エクセルのマクロで行いたいのですが。シート1からシート3(ジャンル別の

    エクセルのマクロで行いたいのですが。シート1からシート3(ジャンル別の商品データ)にあるデータを入荷した商品名で検索し、その検索結果の行を入荷した数量分コピーして、シート4(印刷)に上から順に貼り付けます。その結果をバーコードラベルで印刷し、商品に貼り付けていきたのですがどなたか教えてください。現在は、いちいちシート毎で「Ctrl+F」で検索画面を出し、商品名を検索し、なければ別のシートで検索し、該当するものが見つかれば選択して、行をコピーして印刷シートに貼り付けています。とても時間がかかっています。 シート1から3の構成は、ジャンル別で分かれていますが、 A列:商品名、B列:メーカーコード、C列:自社コード、D列:売価、E列:原価、F列:登録日 です。バーコード印刷のマクロは出来てます。 複数のシートから検索し、コピーして、印刷シートに貼り付けるマクロです。 エクセルは2003で、OSはXPのSP3です。

  • Excelで日付別の集計を取るやり方

    実際の内容とは違いますが例えとして、 添付の画像のように、A列に日付が並んでいます。注文が入り次第下に追記していくので日にちはランダムです。 B列に商品名がそれぞれ並びます。 ここからが質問で、 上記シートの隣に集計用シートを作りたいと思っています。 集計用シートでは、日付が1列にカレンダーのように並んでいて、そこに商品の数を拾って出したいと思っています。 縦軸にカレンダー(日付) 横軸にA,B,C,D それぞれ日毎の数量をカウントするようにしたいです。 どのような関数、操作になりますでしょうか? 初級者のため、易しく教えていただければ幸いです。 よろしくお願いします。

専門家に質問してみよう