EXCELVBA 別シート カレンダーを条件付参照

このQ&Aのポイント
  • Excel VBAを使用して、別のシートのカレンダーを条件付きで参照する方法について教えてください。
  • 特定の月とカレンダーシートで一致する日付の売上日を取得し、対応する期間と週を表示したいです。
  • 詳細な説明とともに、Excel2003とWindows XP SP3の環境での方法を教えてください。
回答を見る
  • ベストアンサー

EXCELVBA 別シート カレンダーを条件付参照

お世話になります。 以前にも同じ様な質問をさせていただきましたが、うまく値が持ってこれませんでしたため、あらためて質問させていただきました。 売上.xlsというブックがあります。 この中に[カレンダー]と[データ]という2つのシートがあります。(イメージを添付しました) やりたい事は [データ]シートに[計算]というボタンを設置してこのボタンがクリックされたら以下のアクションを実行 したいのです。 [データ]シートをA2からREADしてA??の年月と[カレンダー]シートのA??の値が同じであれば、次に同データの売上日(B??)を[カレンダー]シートの該当年月の期間1(B?-C?)、期間2(B?-C?)、期間3(B?-C?)、期間4(B?-C?)と照らし合わせて、存在する期間の週(黄色セル)を、[データ]シートのC??の売上週フィールドに表示、させたいのです。 例)売上日が130510のデータの場合 (1)[データ]シートの年月と[カレンダー]シートのA3が合致 (2)売上日が130510なので[カレンダー]シートの期間2(E3-F3)に該当するので"6~12"(G3)という表示を[データ]シートのC6に表示 以上です。 お忙しいところ恐れ入りますが、どなたかお知恵をお貸しいただけますでしょうか。 よろしくお願い致します。 補足 1年ごとにブックを分けるのでカレンダーは2013年4月~2014年3月(1304~1403)まで作成します。 [データ]シートのデータは変動ですが10,000件ほどです。 環境 Windows XP SP3 Excel2003

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 画像が小さくて詳細がよく判りませんが、おそらくこういうコトであろうと思い・・・ >[データ]シートに[計算]というボタンを設置してこのボタンがクリックされたら 「データ」Sheetにコマンドボタンを挿入してのコードです。 Private Sub CommandButton1_Click() Dim i As Long, j As Long, k As Long, wS As Worksheet Set wS = Worksheets("カレンダー") For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row k = WorksheetFunction.Match(Cells(i, "A"), wS.Range("A:A"), False) For j = 2 To wS.Cells(1, Columns.Count).End(xlToLeft).Column Step 3 If Cells(i, "B") >= wS.Cells(k, j) And Cells(i, "B") <= wS.Cells(k, j + 1) Then Cells(i, "C") = wS.Cells(k, j + 2) End If Next j Next i MsgBox "処理完了" End Sub ※ データ量が10000程度あるというコトですので、 そこそこ時間を要すると思います。m(_ _)m

yakkun2338
質問者

お礼

tom04さん、ご連絡ありがとうございました! ご教授いただきました方法で完璧に実現できました! 何度も申し訳ありません。 本当にいつもご丁寧なご説明をいただきまして本当にありがとうございます!!!

関連するQ&A

  • EXCELVBA 別シート カレンダーを条件付参照

    お世話になります。 質問させていただきます。 売上.xlsというブックがあります。 この中に[カレンダー]と[データ]という2つのシートがあります。(イメージを添付しました) やりたい事は [データ]シートに[計算]というボタンを設置してこのボタンがクリックされたら以下のアクションを実行 したいのです。 [データ]シートをA2からREADしてA??の年月と[カレンダー]シートのA??の値が同じであれば、次に同データの売上日(B??)を[カレンダー]シートの該当年月の期間1(B?-C?)、期間2(B?-C?)、期間3(B?-C?)、期間4(B?-C?)と照らし合わせて、存在する期間の週(黄色セル)を、[データ]シートのC??の売上週フィールドに表示、させたいのです。 例)売上日が130510のデータの場合 (1)[データ]シートの年月と[カレンダー]シートのA3が合致 (2)売上日が130510なので[カレンダー]シートの期間2(E3-F3)に該当するので"6~12"(G3)という表示を[データ]シートのC6に表示 以上です。 お忙しいところ恐れ入りますが、どなたかお知恵をお貸しいただけますでしょうか。 よろしくお願い致します。 補足 1年ごとにブックを分けるのでカレンダーは2013年4月~2014年3月(1304~1403)まで作成します。 [データ]シートのデータは変動ですが10,000件ほどです。 環境 Windows XP SP3 Excel2003

  • ExcelVBA シートコピーについて

    何度か試行錯誤したのですが、何故かうまくいかないので質問させていただきます。 エクセルで 「A」という名のBook内にSheet1にある値を参照して該当する値を返すSheet2があります。(ここまではVlookup関数などで処理できます。) このSheet2を全く新しいBookにコピーしてブック名を「B」、シート名をSheet2のB1の値にします。 このシートBにBook「A」のSheet2のA1の値を変化させたもの(添付画像のの場合だとだと1~3)をBook「B」のSheetの末に1つずつコピーしたいと考えています。 最終形はBook「B」に「山田」~「高梁」までのデータがシートごとに集約されたものを作りたいのですが、Sheetの貼り付けををする際にエラーが出てうまくいきません。 つたない説明で恐縮ですが、どなたかお知恵を拝借できないでしょうか。

  • 【ExcelVBA】条件付のシート作成

    設定シートの情報       A列     B列 1行目  開始年月  終了年月 2行目  201204   201303 3行目  4(A2の月だけを抜き取り) この2行目のA列B列の値を参照して、12ヶ月のシートを作成する事は可能ですか? 上記の場合は丁度12ヶ月ですが       A列     B列 1行目  開始年月  終了年月 2行目  201204   201210       A列     B列 1行目  開始年月  終了年月 2行目  201204   201310 と、12ヶ月に満たない場合、12ヶ月を超える場合もあります。 12ヶ月に満たない場合は、開始年月を起点として12ヶ月分の年月を記載。 12ヶ月を超える場合は1枚目のシートに開始年月から12ヶ月、2枚目のシートに13ヶ月目から(上記の例だと201304から)また12ヶ月分の値を入力したシートを作成したいです。 起点から12ヶ月単位のシート作成の場合、教わったコードで何とか可能なのですが Worksheets("設定シート").Activate Tsuki = Range("A3").Value Worksheets("12ヶ月").Activate Range("A1").Select Kaishi = Tsuki Do Selection.Value = Cstr(Tsuki) & "月" IF Tsuki = 1 Then Tsuki = 12 Else Tsuki = Tsuki - 1 Selection.Offset(0,1).Select Loop Until Tsuki = Kaishi この場合起点の月からの12ヶ月しか値を入れる事が出来ません。 13ヶ月以上に及ぶ指定範囲の場合、どのように変数に値を持てばいいのでしょうか?

  • 年月日を参照にして別のシートに抽出

    生年月日を参照して売上げ金額を探したいのですが 年  月  日  売上げ A1  B1  C1  D1 2001 3   1  2500円 2001 3   2  3200円 2001 3   3  1500円 2001 3   4  1800円 ~ 2008 12  30  2000円 2008 12  31  2100円 上記のようなデータが有り 別シートから 年、月、日 を入力したら 売上げを表示する方法はありますか? 例えばシート2にのセルに 2001 3  3 と入れたら 2001 3  3  1500円 と表記する方法が解りません どなたか 教えてください   

  • エクセルのシート名参照関数

    エクセル関数でいろいろ試したのですがうまくいかず困っています。 VBAは出来ないので(苦手なので)できましたら関数で教えてください。 12年1月~12年12月で別々のシートがあり、それぞれ別の『行』『列』に参照をしたい数字があります。 集計シート名『Sheet1』の『A1』に『検査値』、『B1』~『B12』に『12年1月』~『12年12月』、『C1』~『C12』に『該当する値』を表示したいと思います。 具体例 <シート名 : Sheet1> ---A-----B----C 1 リンゴ 12年1月 値 2 -----12年2月 値 3 -----12年3月 値 4 -----12年4月 値 5 -----12年5月 値 <シート名 : 12年1月> ---A----B 1 リンゴ 100 2 バナナ 50 3 メロン 10 4 スイカ 5 5 ミカン 1 <シート名 : 12年2月> ---A----D 1 パイン 10 2 バナナ 20 3 メロン 30 4 リンゴ 40 5 ミカン 50 <シート名 : 12年2月> ---A----F 1 パイン 10 2 バナナ 20 3 スイカ 30 4 リンゴ 40 5 ミカン 50 <シート名 : 12年3月> ---A----C 1 パイン 1 2 レモン 10 3 リンゴ 100 4 メロン 1000 5 イチゴ 10000 上記<シート名 : Sheet1>の『C列』に式を入れ、それぞれのシートから『A1』に該当する値を表示させたいと思います。 文書が下手ですのでわかりにくい内容で申し訳ありません。

  • 【Excel】 別のSheetの値を参照したい。

    Sheet1の A1に年 A2~A13に月 A14に翌年 A15~月・・・と続きます。 また、 B列に各月の値 があります。 Sheet2の A1に、Sheet1 B列の2008年の1月の値 A21に、Sheet1 B列の2008年の2月の値 A41に、Sheet1 B列の2008年の3月の値 ・・・を表示させていたのですが、 Sheet1の月と行間が違うため、 1~20行のコピーでは、2月以降の値が参照できません。 このような場合A列の式はどのようになるでしょうか。 単にセル位置を指定し参照するのではなく、 「2008年の1月の値」を表示したいと言うことです。 SUMIFなのかなぁ‥とも思うのですが、具体的な方法が分かりません。 Sheet1のA列の月は、 「1」「2」「3」と入力されているだけです。 シリアル値にしないといけないでしょうか。 また、その方法はどうしたら良いのでしょうか。 Excel2003です。 よろしくお願いいたします。

  • Excel 別シートのセル参照

    Excel で、二つのシート間でセル参照したいのですが、シートに書き込んでおくコマンドの書き方を教えてください。 (操作) Sheet2 でA列のどこかのセルをダブルクリックしたとき、B列およびC列の該当行の値を、Sheet1 の二つの固定セルにそれぞれ表示させる。 よろしくお願いします。

  • エクセルで別シートのデータを抽出

    ~シートA~   A B C D E F G  ┌─────────────┐ 1│ │10│20│30│40│50│60│  │ │───────────│ 2│ │11│21│31│41│51│61│  │4│───────────│ 3│月│12│22│32│42│52│62│  │ │───────────│ 4│ │13│23│33│43│53│63│  │ │───────────│ 5│ │14│24│34│44│54│64│  └─────────────┘ 6  ┌─────────────┐ 7│ │10│20│30│40│50│60│  │ │───────────│ 8│ │11│21│31│41│51│61│  │5│───────────│ 9│月│12│22│32│42│52│62│  │ │───────────│ 10│ │13│23│33│43│53│63│  │ │───────────│ 11│ │14│24│34│44│54│64│  └─────────────┘         ・         ・         ・ ~シートB~   A B C D E F G  ┌─────────────┐ 1│ ▽ │ │ │ │ │ │  │ │───────────│ 2│ │ │ │ │ │ │ │  │○│───────────│ 3│月│ │ │ │ │ │ │  │ │───────────│ 4│ │ │ │ │ │ │ │  │ │───────────│ 5│ │ │ │ │ │ │ │  └─────────────┘ ↑はリストボックスで1月~12月の値が入っている。 上記条件でシートBのリストボックスから選んだ月のデータをシートAの表から該当する月のデータを全て抽出したいのですが、どのようにすればよろしいでしょうか。

  • エクセルで、2つのセル値(2つの条件)から、別シートの表から該当する値を参照する方法

    シート(1)のA列とB列のセルに入力されている値を元に、 シート(2)の表を参照し、該当する値をシート(1)のC列に 表示させる方法があれば 教えて頂けると助かります。 なおシート(1)のA列は、参照するシート(2)の表の列タイトルに対応し、 シート(1)のB列は、シート(2)の行タイトルに対応するマトリックス表に なっております。 また、この列行タイトルの表記は「1から」または「1から9まで」 という範囲での表示になっています。 (例:シート(1)元データ) No| A列 | B列 | C列 | --------------------------------- 1 | 07  |  22  |  20 | ←C列は、シート(2)表を参照  2 | 18  |  15  |  30 |        3 | 01  |  09  |  05 |       4 | 21  |  03  |  30 |  5 | 30  |  28  |  35 |  (例:シート(2)参照する表) A列\B列 | 1~9| 10~19 | 20~29 | -----------------------------------   01~  | 05  |  10  |  20  |         05~  | 15  |  15  |  20  |           10~  | 20  |  25  |  30  |        15~  | 25  |  30  |  30  |    20~  | 30  |  35  |  35  |  現在、手作業でC列への入力を行っております。 何とか、作業効率を上げたいと思っておりますので、 ご指導下さいます様 宜しくお願い致します。

  • シート1から特定の条件でシート2に出力

    すみません、エクセルについてご教示ください。 シート1に入力したデータ中から条件にあったものを シート2に出力したいと思っています。 シート2の A3に該当月を指定(例)2012/09)することで、 シート1中から条件のあったデータをシート2中に出力することは可能でしょうか。 可能であれば関数などご教示いただけるとさいわいです。 ## エクセルに詳しくない社内の担当が、シート2のA3に該当月を入れるだけで ## 丸っとシート2をコピーして、必要なメールを作成できないかなあと考えています なお、条件にあるものが複数ある場合、該当するものをすべてシート2の 5行目以降に表示されるようにしたいと思います。 【シート1】                      行 __A__ __B___  __C__   ____D___  ____E____ 1  No. 該当月  管理番号 顧客名   備考 2  1  2012/09  11****  株式会社A  ちょめ 3  2  2012/09  23****  株式会社B  ちょめ 4  3  2012/10  27****  株式会社C  ちょい 5  4  2012/10  28*****  株式会社D  ちょい 【シート2】 行  __A__ ____B__ __C__ ____D____ __E__ 1  (ここにメールテンプレート) 2  (ここにメールテンプレート) 3  ★該当月★ の対応案件です。お願いします。 4 5  (以下 Sheet1 の B列で Sheet 2 A3 の該当月と一致するものの A~E列を出力。) 6 7

専門家に質問してみよう