Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
繰り返し処理での相対参照について
投稿日時: 20/01/05 04:06:27
投稿者: OkabeS

度々すみません。
前回教えていただいた以下「選択範囲の既存の値 + 計算式(+10の部分)」の以下のコードですが、
実際の処理は、選択範囲の計算式の部分は、特定のセル(同じ行の違う列)から
引っ張ってきています。
この時、計算式の部分は、相対参照にしたいのですが(A2 A3 A4等)、絶対参照になってしまいます。
(Cells(Activerow, alt).Address(False, False)と書いています)
なにか方法は無いでしょうか?
 
 
■前回ご質問&教えていただいたコード
 Dim r As Range
  For Each r In Selection
      r.Value = r.Value + 10
  Next
 
 
■私が作成しているコード
Sub Macro1()
 
Activerow = ActiveCell.Row
stock = Rows(1).Find("STOCK").Column
alt = Rows(1).Find("alt").Column
LastRow = Range("A" & Rows.Count).End(xlUp).Row
first = Range("A2:A" & LastRow + 1).SpecialCells(xlCellTypeVisible).Areas(1).Cells(1).Row
 
Range(Cells(2, stock), Cells(LastRow, stock)).SpecialCells(xlCellTypeVisible).Select
  
  For Each r In Selection
        r.Value = "=" & r.Value & "+VLOOKUP(" & Cells(Activerow, alt).Address(False, False) & ",A:BZ," & stock & ",0)"
    Next r
 
End Sub

回答
投稿日時: 20/01/05 09:14:14
投稿者: 佳

こんにちは。
 
あれ?
絶対参照とは、$A$1のように$マークが付いているものですが
本当に付いていますか?
作成された数式をここにアップしていただけますか?

回答
投稿日時: 20/01/05 10:18:01
投稿者: WinArrow
投稿者のウェブサイトに移動

絶対参照、相対参照
という言葉の使い方が間違っています。
 
ActiveRowは、最初に選択してあるセルの行番号を取得してモノです。
数式の中の参照しているセルが変わらないだけの話ではないでしょうか?
 
まず、
セルを選択することを止めましょう。

回答
投稿日時: 20/01/05 11:00:37
投稿者: よろずや

For Each r In Selection
    r.Formula = "=" & r.Value & "+VLOOKUP(" & Cells(r.Row, alt).Address(False, False) & ",A:BZ," & stock & ",0)"
Next r
 
って話かな。

回答
投稿日時: 20/01/05 11:08:07
投稿者: WinArrow
投稿者のウェブサイトに移動

VLOOKUP関数が奇異な(検索されるセルと、結果を格納するセルが同じにみえる)感じがします。
・・・気のせいかな?
 
参照範囲がA〜BZ列です。
STOCK列は、当然、この中に存在します。
 
(1)Alt列のセルで、参照範囲の最左列(A列)を検索します。
 これも理解できない・・・・
 
(2)結果を格納するセル(「r」)は、STOCK列のセルですよね
  VLOOKUPで、取得するセルもSTOCK列セルになっています。
 この解釈はあっていますか?

投稿日時: 20/01/05 14:04:16
投稿者: OkabeS

佳様
WinArrow様
よろずや様
 
ご回答ありがとうございます。
 
・相対/絶対参照という表現を間違えておりました。
 数式の中の参照しているセルが変わらない。という話です。
 よろずや様から教えていただいた「Cells(Activerow→Cells(r.Row」に
 変更後、希望通り動きました。
 
・WinArrow様にご指摘頂いたVlookupの参照先自体は、
 合っていました。(参照先の背景がややこしく本題では無いため省略しましたが、)
 いつも細部をアドバイス頂き、感謝いたします。
 
特定のセルを選択する。という関数的な発想を強く持っていましたが、
VBA的な動的な発想が段々分かってきました。
 
ありがとうございました。