Excelワークシート内の二つのシートのセルの値(文字列)を共有する方法

このQ&Aのポイント
  • Excelのワークシート内の二つのシートのセルの値(文字列)を共有する方法を教えてください。
  • 具体的には、ワークシート内に|31日|30日|・・・|2日|1日|7月|とタブがあります。7月のシートのA1が1(日付)のとき、B1にあらかじめ入力した1日のシートのB1(文字列)を表示させる方法がありますか?
  • また、7月のB1セルに直接=1日!B1と入力すると出来たのですが、これだとA1が28(日付)の時も1日のB1を表示させてしまう問題があります。7月のシートのA1の値が28(日付)の時には28日のシートのB1、A1の値が11(日付)の時には11日のシートのB1を表示する方法を教えてください。初心者なのでうまくできません。
回答を見る
  • ベストアンサー

Excelのワークシート内の二つのシートのセルの値(文字列)を共有する

Excelのワークシート内の二つのシートのセルの値(文字列)を共有する方法を教えて下さい。 具体的には、ワークシート内に|31日|30日|・・・|2日|1日|7月|とタブがあります。 7月のシートのA1が1(日付)のとき、B1にあらかじめ入力した1日のシートのB1(文字列)を 表示させる方法があるのでしょうか。 7月のB1セルに直接=1日!B1と入力すると出来たのですがこれだとA1が28(日付)の時も1日のB1を表示させてしまいうまくいきません。 7月のシートA1の値28(日付)の時に28日のシートのB1、A1の値11(日付)の時は11日のシートのB1を表示という具合にしたいのですが初心者なのでうまくできません。 どなたか詳しく教えていただけませんか。 宜しくお願い致します。

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

  • ベストアンサー
  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.7

ユーザー定義関数は通常、直接参照しているセルの値が変更されないと再計算されません。この場合だと、日付セルの値が変更されれば再計算されるのですが。 対処方法ですが、Ctrl+Alt+F9キーを押すと強制的に再計算されます。 これが面倒であれば、裏技を使う方法があります。 ユーザー定義関数の1行目を次のように変更します。 Function 日付別参照(日付セル As Range, 参照セル As String, 現在 As Date) 7月集計シートのH79、H80、H81、I79、I80、I81には、次の数式を入力します。 H79 =日付別参照(A79,"M11",NOW()) H80 =日付別参照(A79,"M12",NOW()) H81 =日付別参照(A79,"M13",NOW()) I79 =日付別参照(A79,"O11",NOW()) I80 =日付別参照(A79,"O12",NOW()) I81 =日付別参照(A79,"O13",NOW()) NOW関数は常に再計算される関数ですから、これをダミーとして数式に含めれば、どこかのセルの値が変更される度に再計算されます。

kirenjay
質問者

お礼

補足で何度も教えていただきありがとうございます。 丁寧に教えていただきまして本当に助かりました。 また何かわからない事があったときに投稿しますので そのときは宜しくお願いできれば幸いです。 どうもありがとうございました。

kirenjay
質問者

補足

回答ありがとうございます。 早速回答のとおり入力したらうまくいきました。 再計算を行う関数があったとは知りませんでした。 今の状態で7月集計シートの入力内容を27日シート に出力させるという逆のことはできますか? 例として7月集計シートの27日欄のC19,C20,C21と D19,D20,D21に入力したものを27日シートのM16, M17,M18とO16,O17,O18に出力させ、7月集計シー トの28日欄に入力したものは28日シートに出力する という具合にしたいのですがどのようにしたらよい でしょうか。宜しくお願い致します。

その他の回答 (6)

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.6

再度、ユーザー定義関数を変更します。 Function 日付別参照(日付セル As Range, 参照セル As String) Dim 日付 As Integer 日付 = Day(日付セル.Value) 日付別参照 = Worksheets(CStr(日付) & "日").Range(参照セル).Value End Function 7月集計シートのH79、H80、H81、I79、I80、I81には、次の数式を入力します。 H79 =日付別参照(A79,"M11") H80 =日付別参照(A79,"M12") H81 =日付別参照(A79,"M13") I79 =日付別参照(A79,"O11") I80 =日付別参照(A79,"O12") I81 =日付別参照(A79,"O13")

kirenjay
質問者

補足

再度ご指導ありがとうございます。 ユーザー定義関数を変更して7月集計シートに数式を入力したら 表示するようになりました。 でも、27日シートに入力しても表示されずに7月集計シートのH79 をダブルクリックしてEnterを押さないと表示しないのですが 27日シートに入力して7月集計シートを開いたら表示されている ようにはできないでしょうか。 よい方法があれば教えていただきたいです。 宜しくお願い致します。

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.5

おかしいですね。#VALUE!になるはずはないのですが。 2010/7/1や2010/7/31と入力してもそうなるのでしょうか?

kirenjay
質問者

補足

初心者のわたしにいろいろ教えていただきありがとうございます。 補足の内容はわたしのミスでしたすみません。セルの表示形式がユーザー定義 になっていたので日付にしたらうまくいきました。 ずれるのも、シートが一つ余計に入っていたためでした。本当にすみません。 もう一つ教えていただきたいのですが、1日につき表示させたいセルが複数あり 例として、27日シートに入力したM11,M12,M13とO11,O12,O13を7月集計シートのH79, H80,H81とI79,I80,I81の2列、3行に出力させるには Case 27 参照セル = "M11" をどのように変更すればよいでしょうか。 宜しくお願いします。

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.4

日付形式に対応させる場合は、5行目を次のように変更します。 日付 = Day(日付セル.Value)

kirenjay
質問者

お礼

初心者のわたしにいろいろ教えていただきありがとうございます。 補足の内容はわたしのミスでしたすみません。セルの表示形式がユーザー定義 になっていたので日付にしたらうまくいきました。 ずれるのも、シートが一つ余計に入っていたためでした。本当にすみません。 もう一つ教えていただきたいのですが、1日につき表示させたいセルが複数あり 例として、27日シートに入力したM11,M12,M13とO11,O12,O13を7月集計シートのH79, H80,H81とI79,I80,I81の2列、3行に出力させるには Case 27 参照セル = "M11" をどのように変更すればよいでしょうか。 宜しくお願いします。

kirenjay
質問者

補足

回答ありがとうございます。 早速5行目の 日付 = 日付セル.Value を 日付 = Day(日付セル.Value) に 変更しましたが7月集計シートのH79は#VALUE!になってしまいます。 直接7月集計シートのセルA79に27と入力する(表示は日付形式なので数式バーには 1900/1/28と表示されています)とシート27日ではなく1日ずれたシート28日のセル M11が表示されます。 7月集計シートの日付は旬日ごとのとりまとめなのでUserFormの入力から反映する ようにしているので2010/7/27のときにシート27日のM11が表示できるようにした いので宜しくお願いします。

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.3

まず、Visual Basic Editorを開きます。 左側にあるVBAProject (ファイル名)を右クリックし、挿入→標準モジュールの順にクリックします。Module1という標準モジュールが作成される筈です。ユーザー定義関数はここに定義します。 条件に合うようにユーザー定義関数を変更しました。 Function 日付別参照(日付セル As Range) Dim 日付 As Integer Dim 参照セル As String 日付 = 日付セル.Value Select Case 日付 Case 1 参照セル = "B1" Case 2 参照セル = "B1" Case 3 参照セル = "B1" Case 4 参照セル = "B1" Case 5 参照セル = "B1" Case 6 参照セル = "B1" Case 7 参照セル = "B1" Case 8 参照セル = "B1" Case 9 参照セル = "B1" Case 10 参照セル = "B1" Case 11 参照セル = "B1" Case 12 参照セル = "B1" Case 13 参照セル = "B1" Case 14 参照セル = "B1" Case 15 参照セル = "B1" Case 16 参照セル = "B1" Case 17 参照セル = "B1" Case 18 参照セル = "B1" Case 19 参照セル = "B1" Case 20 参照セル = "B1" Case 21 参照セル = "B1" Case 22 参照セル = "B1" Case 23 参照セル = "B1" Case 24 参照セル = "B1" Case 25 参照セル = "B1" Case 26 参照セル = "B1" Case 27 参照セル = "M11" Case 28 参照セル = "B1" Case 29 参照セル = "B1" Case 30 参照セル = "B1" Case 31 参照セル = "B1" End Select 日付別参照 = Worksheets(CStr(日付) & "日").Range(参照セル).Value End Function Function~End FunctionをModule1にコピーしてください。 なお、27日以外は参照セルを仮に"B1"としています。実際の参照セルに変更してください。 7月集計シートのH79には、次の数式を入力します。 =日付別参照(A79)

kirenjay
質問者

補足

回答の通りに入力したら、うまくできました。 ありがとうございます。 もう一つ教えて下さい。 日付ですが、日付形式(2010/07/27)だと 「#VALUE!」と表示されますが、日付形式のときは どのようなユーザー定義関数になりますか。 何度もお手数掛けますが、宜しくお願いいたします。

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.2

ANo.1を訂正します。 「もし7月のC1セルに各月のC1セルを表示させたいときは」は「もし7月のC1セルに各日のC1セルを表示させたいときは」の誤りでした。

  • hananoppo
  • ベストアンサー率46% (109/235)
回答No.1

VBAで次のようなユーザー定義関数を作成します。 Function 日付別参照(日付セル As Range, 参照列番号 As Long) As String 日付別参照 = Worksheets(CStr(日付セル.Value) & "日").Cells(日付セル.Row, 参照列番号).Value End Function 7月のB1セルには、次の数式を入力します。 =日付別参照(A1,2) もし7月のC1セルに各月のC1セルを表示させたいときは、次の数式を入力します。 =日付別参照(A1,3) また、これらの数式を2行目以降にコピーすれば、各々の行の参照もできます。

kirenjay
質問者

お礼

回答ありがとうございます。 初心者のため理解できないのでもう少し教えてください。 ユーザー定義関数はどこで作成したらよいのでしょうか? Visual Basic Editorの7月集計に Function 日付別参照(日付セル As Range, 参照列番号 As Long) As String 日付別参照 = Worksheets(CStr(日付セル.Value) & "日").Cells(日付セル.Row, 参照列番号).Value End Functionを入力して7月集計シートのセルB1に=日付別参照(A1,2)と入力したら「NAME?」と 表示されうまくいかないので実際のシート・セル名でもう一度教えていただけませんか。 27日の場合、日付は7月集計シートのセルA79です。27日シートのセルM11を7月集計シートの H79に表示させたい場合についてもう一度よろしくお願いします。

関連するQ&A

  • EXCELの参照先ワークシートのセルにおける文字列への変換

    恐縮ですが、MS-EXCELの次の操作方法をご教示下さい。 同じブックの中であるワークシートAの特定のセルaの文字列を他のワークシートBの特定のセルbで参照している場合、 このセルbにおいて、参照した文字列を、参照の形でなく、セルbの文字列に変換するには、どういう操作をすればよいのでしょうか?

  • 特定の文字列のみ表示させない。

    どなたか教えて頂けないでしょうか? AシートのA1セルに文字列が入力されます。入力される文字列は決まっていて、  ああああ  いいいい  うううう  ええええ の4つが入ります。 BシートのB2セルに、AシートのA1セルの値を表示させたいのですが、 この時”うううう”と”ええええ”のみ表示させないようにしたいです。 簡単にまとめるとこんな感じです AシートA1セルの値   →   BシートB2セルの値 ああああ        →    ああああ いいいい        →    いいいい うううう        →    表示なし ええええ        →    表示なし どのようにしたらいいのでしょうか? よろしくお願いいたします。

  • エクセル セル内での文字列と別シートからの引用につ

    ひとつのセル内に文字列と他のシートの引用を下記のように入れています。 「="あいうえお"&別シート!A1&"かきくけこ"」 このとき、別シートのA1が日付(和暦)の値なのですが、引用すると数字で表示されて しまいます。 これを別シートと同様に日付(和暦)表記させるにはどうしたらよいでしょうか? 表示形式のユーザー定義でやろうとしたのですが、うまくできませんでした。 よろしくお願いします。

  • エクセルで他のシートのセル(文字列)を自動的に参照したい

    シートAセルに、シートBのセルを参照する方法を教えて下さい。 シートBのセルに入力した文字列がシートAのセルに自動的に 反映されるようなことを試していますがうまくいきません。。。

  • エクセルのワークシート間のデータ共有について

    教えてください。エクセルなんですが、ワークシート1のセルA1にデータを入力し、ワークシート2のセルB2にそのデータが出るように、関数を埋め込んでいます。そこまでは良いのですが、そこからワークシート2のセルB2に新しくデータを入力して、ワークシート1のセルA1に反映させることは出来るのでしょうか?分かりづらく申し訳ありませんが、イメージとして現在データ入力をA→Bとなっているところを、A<=>Bにしたいのです。

  • ExcelVBAで文字列編集後別シートのセルにコピーしたいのですが

    Excel2000を使用しています。作業中のブックのSheet1の後ろに別のファイルをコピーすることができました。そこから(コピーできたファイル)から文字列を編集してSheet1の特定のセルに貼り付けたいのですが、未熟者でできません。以下の操作をVBAマクロで実行したいのですが解る方教えてください。 (1)コピーしたファイルのA4セルにある文字列をMID(A4,6,10)で取り出しSheet1のB21セルに貼り付ける。(日付) (2)(1)が日付なのでそれから曜日を取得し、Sheet1のE21に表示する。 (3)コピーしたファイルのA5セルにある文字列をMID(A5,8,1)で取り出し(一桁の数字)1の時は福岡、2の時は佐賀、3の時は長崎、4の時は熊本、5の時は大分、6の時は宮崎、7の時は鹿児島、8の時は沖縄とSheet1のB24セルに表示する。 (4)コピーしたファイルのA6セルにある文字列をMID(A6,8,2)で取り出し(二桁までの数字)その後ろに"本"をつけてSheet1のB24セルに表示するB28に表示する。例)12本 (5)コピーしたファイルのA2セルにある文字列をMIDB(A2,20,6)で取り出し(時刻)Sheet1のE30セルに表示させる。 (6)コピーしたファイルのA12セルにある文字列をMID(A12,11,5)で取り出し(時刻)Sheet1のE34セルに表示させる。 (7)(6)の15分前の時刻をE36セルに表示させる。 よろしくお願いいたします。

  • エクセルのワークシート関数でA、B列不同数取得

    エクセルのワークシートA列とB列にデータがあります。 データは数値、文字列、空白です。エラー値はありません。 A列のセルと同じ行のB列のセルの値が同一でないA列データの個数(またばB列データの個数)を求めるワークシート関数はないでしょうか?(空白同士は同一とみなします。) C列などに作業列を作ってA、Bの比較をして求める方法はすぐに思いつきますが、作業列なしで求めたいのです。

  • Excelのマクロを使ってワークシート1にワークシート2のセルの値をコ

    Excelのマクロを使ってワークシート1にワークシート2のセルの値をコピーするマクロを作りたいと思っています。 例えば、ワークシート2のA1~A30のセルには1~30の値が順に入っているとします。 それをA1から3の倍数分、つまりA1,A3,A6,A9,・・・,A27,A30の値を ワークシート1のA1~A11のセルに自動で挿入してくれるマクロってどう作ればいいのでしょうか? わかりにくいかもしれませんが、よろしくお願いします。

  • エクセルのワークシートAの1列目(A列)の日付と、ワークシートBの1列

    エクセルのワークシートAの1列目(A列)の日付と、ワークシートBの1列目(A列)の日付を一致させて1つのワークシートに纏める方法を探しています。 2つの時系列データがあるのですが、データA(為替データ)とデータB(株式データ)のデータ管理方法が下記のように異なっています。 データA(為替データ)・・・1週間のうち6日間(月曜から土曜まで) データB(株式データ)・・・1週間のうち5日間(月曜から金曜まで) おのおのワークシートのA列に日付が入っています。 データAは月曜から土曜までなので、1週間に6行要します。データBは月曜から金曜なので1週間に要するのは5行です。従って、単純にこの2つのデータを張り合わせるだけでは(データBをデータAのシートに張り合わせた時)、1週間に要する行数が違うので1行ずつずれてしまいます。 1週間に要する行数の違いだけでなく、マーケットが休みの日はデータそのものがないため日付が存在しません。(マーケットの休みもおのおの別の日でバラバラです。) これらの理由により、ただ単に張り合わせるだけだとずれが広がるばかりです。 そこでデータAの日付とデータBの日付を認識して一致させる関数を教えて欲しいと思います。 データAの構成はA1=日付、B1=始値、C1=高値、D1=安値、E1=終値で、データBの構成も同じです。 データAのF1にデータAのA1と同じ日付のデータBの行を貼り付るように設定したいと思っています。 説明が分かり辛い場合は補足しますので、その際はご指摘下さい。 宜しくお願いします。

  • 【エクセル】文字列として入力した複数セルの日付を範囲指定して書式を変えても全部一ぺんに西暦表示に変わってくれない。

    いつもお世話になってます。 例 A列に「昭和12年3月4日」「昭和34年5月6日」「大正14年3月8日」「平成8年10月24日」などと”文字列”で入力されています。 これをB列に値のみコピーペーストします。 B列の値の入ったセルを範囲指定し、セルの書式を「日付」に変えても、1937/3/4などと全て変わりません。 セルごとに一旦ダブルクリックでグレーに変えてEnterを押すと1937/3/4と表示が変わる。 文字列として入力した日付の値を、別の場所に貼り付けた時、一括して日付に変える方法を教えてください。 よろしくお願いします。 不明な点があれば補足いたします。(エクセル2003)

専門家に質問してみよう