• 締切済み

エクセルの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/17070)
回答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/1245)
回答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