• 締切済み

エクセルのVBA 相対参照についての質問です。

エクセルのVBA 相対参照についての質問です。 VBA初心者ですが、困っております。 難しいのですが、詳しい方にご教示頂けると幸いです。 【分らない点】 アクティブセルに対応して、別のシートからそのアクティブセルと同じ列にあるセルの値を参照する。 【前提設定】 (1)工事金額のデータベースとなるシート(数か月分の工事金額・階数が記載)、予定表となるシートがある。 (2)予定表にはデータベースから値を参照したいが、いつ工事が発生するか、どの階数なのか、は分からない。 (3)予定表の○月・○階数の部分にセルを置き、VBAを実行すると、その階数に対応する工事金額を、そのアクティブセルの位置から貼り付けたい。 【具体例】(アンダーバーは無視してください) データベースシート __1カ月 2カ月 3カ月 4カ月 1階_12_13__14__15 2階_25_26__27__28 3階_31_32__33__34 4階_44_45__46__47 予定表シート __1月 2月 3月 4月 5月 6月 1階 2階___25 26 27 28 3階 4階___ _44 45 46 47 ※上は理想イメージで、予定表の2月の2階にアクティブセルを置き、マクロを実行したとき、データベースの2階の1カ月目~4カ月目の工事金額のデータを参照した場合。 4階は3月から工事が発生し、対応する4階の工事金額を参照した場合。 データベースは常に1カ月目からの参照が必要です。 【不明な点】 『アクティブセルと同じ列』での『異なるシート』からの参照ができません。 アクティブセルの位置は変わるのに、自分でマクロを組むと、異なるシートの同じ位置から常に参照されてしまいます。 自分でも試したのですが、うまく参照されません。 わかり辛い例ですが、ご教示頂けると幸いです。 よろしくお願い致します。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

>相対参照についての質問 大げさで、内容を反映していない質問表題。早退参照のはなしではなかろう。 2階ってなに?2階の建築関係工事のこと?世の中建築関係者ばかりじゃない。前置きでもないと、部外者には情況がわかりにくい。 ーー (1)ほしいデータ(見出し)は「予定表」のセルをアクチブにして示し、そのデータを採るタイミングは、コマンドボタンのクリックのタイミングの時にするのが良かろう。 セルのSelectionChangeイベントなどあるが、意図しない偶発的な選択が行われて混乱するだろうから。 普通は月、階は数字で入力して指定させるとか、リストボックスから選ばせる場合が多いのでは。質問者の思いついた方法に拘っているとおもう。この方法だけでないし、適当かどうか疑問を持つ。 (2)予定表で選択する情報は ・何月か ・何階か の2つか。工事対象ビルの選定(指定)はどうなる?沢山の工事の予定があるだろうから、記述が無い点不完全では?。 本当は ・工事ビル も含めて3点ではないか? ーー ボタンをクリックしたとき(クリックイベントで) その行のA列から何階か その列の第1行(これは実情による)から、月数字を得る。 さらに工事現場は何処に示されているのか(必要ないのか) ーーー それで ・その工事現場シートを上記予定表の工事現場名から特定(選択)する。 ・そして階数と月数を指定して交点にあるデータを採る。  Range(・・).Cells(U,V)で取れる。U,Vの数は 「データ」シートの月数行(第1行?)で「X月」という文字列をFind関数で探せばデータがある列Vが判る。 データシートの階数列(A列?)で「Y階」という文字列をFind関数で探せば行Uが判る。 >アクティブセルの位置は変わるのに、自分でマクロを組むと、異なるシートの同じ位置から常に参照されてしまいます。 そんなはず無い。マクロ(VBA)実例でも挙げないと理由も説明できない。よく自分のコードにはよほど自信があるような質問者が多いが、少し深い理解が足りない場合が多いのに、実情をさらけ出さないのはどうして。

  • soixante
  • ベストアンサー率32% (401/1246)
回答No.3

良く分かりませんが、ご参考まで。 つまりは、アクティブセルのところを起点にして、データベースシート当該階のデータを引っ張ってくる、ってことですかね。 Sub aaa() Dim r As Integer, c As Integer Dim p As Integer, q As Integer Dim WsDB As Worksheet, WsYotei As Worksheet Set WsDB = Worksheets("データベース") Set WsYotei = Worksheets("予定表") r = ActiveCell.Row c = ActiveCell.Column Range(Cells(r, 2), Cells(r, 256)).ClearContents q = 2 Do    WsYotei.Cells(r, c).Value = WsDB.Cells(r, q).Value   q = q + 1   c = c + 1 Loop While WsDB.Cells(r, q) <> 0 Set WsDB = Nothing Set WsYotei = Nothing End Sub

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

処理の内容が理解出来ていませんが。。。 色々と言葉で書くのも良いですが、不具合の起きている部分のコードを提示することも大切です。 >『アクティブセルと同じ列』での『異なるシート』からの参照ができません。 同じ列ならActiveCell.Columnで取得できます。 >アクティブセルの位置は変わるのに、自分でマクロを組むと、異なるシートの同じ位置から常に参照されてしまいます。 トラブルの内容が理解出来ていませんが、マクロの動作を頭に入れてプログラムを組む必要があります。 また、正しく動作させるためにもシート指定などを明確に行って行かないと、予定のシートで動作しない場合もあります。

  • TNK787
  • ベストアンサー率17% (25/141)
回答No.1

自分が書いたコードを提示するのが先!

関連するQ&A

  • エクセルを使っての参照に関しての質問です

    シート1には日々の出席状況、シート2には日ごとの統計表をつくりたいと考えています。シート1には行に名前、列に日にちが入っています(こうしないと、オートフィルを使って、抜き出しができないので)。シート2には日ごとですから50行とか離れていて、うまくシート1を参照できません。当然、毎日の参照位置を書き換えればできるのですが、何か方法があったら教えて下さい。お願いします。

  • エクセルVBAの質問です

    エクセル2000で勤務表を作成しています 2009年7月というシートに2つの表があり、「表1」はC列に10名の氏名があり 各行の(F~AJ)には6月21日~7月20日までの毎日の出退勤(○、休、半等) を記入します。 「表2」は「表1」を暦月に変換するため7月1日~7月31日(F~AJ)となっていて、 表1を作成するとC列の氏名及び7月1日~7月20日(Q~AJ)までの出退勤も(F~Y)へ 同時に入力されるようにしてあります。 さて、新規シート2009年8月を作り「表1」に氏名(入退社で増減等の変更が あります)と1ヶ月分の出退勤を入力後、以下のことをVBAで行いたいと思います。 ボタンにより、2009年7月シートの「表2」と氏名がマッチする行に「表1」の7月21日~7月31日(F~P) の出退勤のみを「表2」の(Z~AJ)にコピーするようにしたいのですが可能でしょうか。 皆様のお力添えをお願いできればと存じます。

  • EXCEL VBAでの質問です。

    EXCEL VBAでの質問です。 集計用のファイル1つと参照するファイルが30あります。 参照するファイルは基本的に書式は全部同じで数値だけが違い、参照させたいセル位置は全て同じです。 そしてAにある表にこのように順次下に転記させたいです。 B 1 2 4 6 2 5 C 4 5 3 7 8 4 D 2 3 7 5 3 2 この時いちいち別のコードで1つ1つのファイルを転記させるのではなく30のファイルをひとまとめに転記させるコードを作りたいと思っています。 もしわかる方がおりましたらコードをよろしくお願いします。

  • Excel VBA で表の参照先を一気に変更させるには?

    複数のsheetに規則正しくデータと表が配置されているとします。で以下のようなデータの縦棒の表があるとします。 *データ* A B 1 4 2 2 3 8 4 5 5 1 『グラフ』 - 『元のデータ』で参照先を見ると… =Sheet1!$A$1:$B$6 追加で 例>+5件のデータが加わったとします。 ※一部のsheetだけではなく、全てのsheetで追加です。 *データ追加* 6 3 7 3 8 1 9 8 10 7 グラフの参照先 =Sheet1!$A$1:$B$11 複数のsheetにまたがると、手作業で追加データを追加していて大変手間が食ってしまい困っています。Excel VBA で表の参照先を一気に変更させる方法ありますでしょうか? アドバイスよろしくお願い致します。  

  • EXCEL 一覧シートから各シートへ参照

    現在シートが 一覧、1、2、3、 とあります。 一覧シートには、 シート名(A1) 名前(B1) 1(A2) 山田(B2) 2(A3) 鈴木(B3) 3(A4) 木村(B4) と記載されております。(カッコ内は、セルの位置です) シート 1 のA1には、山田 シート1のB2を参照 シート 2 のA1には、鈴木 シート1のB3を参照 シート 3 のA1には、木村 シート1のB4を参照 とシート 一覧から参照して表示されるようにしたい と考えております。 数字の名前のシートが数個であればシート毎に入力すれば済む話ですが、 予定では、順次増え、最終的には100位になる予定です。 数式、マクロ VBA 等を使って  一覧シートに名前を入力すると該当のシートのA1セルに参照させる事は可能でしょうか? よろしくお願いいたします

  • Excelで違うファイルのデータを参照する

    EXCELで違うファイルにあるワークシート上のセルを参照することはできるのでしょうか。 巨大データベースから必用なデータをピックアップして表示したいのですが データベースが大きい為、全てを読み込むのに時間がかかります。 データを表示するファイル上に条件を入力すると、データベースの対応するワークシート上のデータを表示できるようにしたいのですが。。。

  • EXCELでグラフの元データを相対参照にしたい

    色々調べたのですが自力解決できないため質問させていただきます。 EXCELで同一book sheet 内でページ割り当てをし1ページ目から順に1月、2月と12ページまで作り1ページ目に表とその表を元データにしたグラフを作りました。 因みに表の中のデータは別シートで計算したものを参照(相対・絶対の混在)しています。1ページ目を丸ごと(元データの表もグラフも)コピー&ペーストで2ページ目を作るのですが、2ページ目のグラフの元データがどうしても絶対参照になってしまい困っています。勿論、新しくデータ範囲を指定したりすれば良いのでしょうが、系列やその他のグラフオプションが複雑なためその都度膨大な時間を消費してしまいます(12ページだけではなくもっとページも増やしたいのです)。上記のような状況で「元データである表とグラフを含めてコピペする時又は作成時にグラフ元データを相対参照にする」方法はありますか?宜しくお願いします。

  • エクセルのVBA初心者です。教えてください。

    エクセルVBAの勉強を始めたばかりのものです。無知を自覚しながら質問させていただきます。 宜しくお願い致します。 下のようにエクセルの表があります。 B列の中から例えば5月13日が今日だとして本日の日付のものを探し、見つけたらその隣の列の A列の通番を参照しピックアップしたら、別のシートに作ってある番号ばかりのシート表の中のその通番のセルを塗りつぶすという一連の作業のVBAを作りたいのですがどうしたらいいのでしょうか? 問題の説明不足で意味が通じるかが心配なのですが、本日の日付をB列から見つけてその通番 をピックアップするVBAを教えて頂けたらとおもい、質問しました。 ちなみに日付は5/13の形式で入力しています。 A B 1 5月13日 2 3 4 5 5月13日 6 6

  • VBA 写真の挿入 回転

    お世話になります。 工事写真を("工事写真台紙")シートに挿入するVBAを組みました。 アクティブセルの Left Top と写真の Left Top を合わせて 所定の位置に貼り付ける事が出来ています。 ところが1つ問題が出てきました。 デジカメを横(右90度)にして撮影した写真(縦長の写真)を貼り付ける必要が出てきたので VBAで貼り付ける際、Rotation = 90# で回転させましたが アクティブセルの Left Top と写真の Left Top を合わせても セルと写真の左上は合いません。 写真を回転させても、位置情報としての写真の Left Top は変らないみたいです。 見た目の左上を合わす事が出来ません。 座標を取得すれば・・?sin.cos.tan・・? セルの width と 写真の width・・? Increment で移動して・・? 煮詰まってどうにもなりません。 どなたかご教授下さい。

  • エクセル2010VBA での質問です。

    VBAはやったことないので全く初心者です。 町内の諸費用をエクセルで管理しています。 年度が変わる度、当番も変わってデータを引き継いで管理するのですが、最初に連続印刷のVBAを作ってくれた人がもういないので、今まで、前年度のものをコピーし、中のデータを書き換えて使っていたようなのですが・・・ どのような設定がされているか把握するために質問させて頂きます。 エクセルを開き、マクロで作ってある印刷ボタン?を押すと、Sheet1にあるデータベース約100人分 (B列に100人分の名前・2行目にいくつかの項目・各項目の下に金額)が別のSheetにある個人請求書に連続印刷されるというものですが、添付していますVBAの内容を把握したい事が一つ目です。 年度が変わるごとにそのシートをコピーして中のデータを書き換えて使っているのですが、問題は有りますでしょうか?(二つ目です) 添付しております、ファイルのVBAを自分はわからないのですが、このBOOKを開いた時に ”このブックには、ほかのデータソースへのリンクが含まれています。 ・リンクを更新するとエクセルは最新のデータを取り込もうとします。 ・リンクを更新しないと、以前の情報が使用されます。 注意:データリンクは許可なく機密情報にアクセスして共有するのに使用される可能性があります。また、その他の問題を起こす可能性のある操作に使用される場合があります。このブックの作成元が信頼できない場合にはリンクを更新しないでください。   更新する・更新しない・ヘルプ ” というメッセージが出てきますが、このBOOKが入っているフォルダ以外のデータも参照されているのでしょうか?(三つ目) 情報が少なくて済みません。 宜しくお願い致します。