[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAでのOffset使用について』(ミシェル)
ファイル「C.xlsm」のシート「D」のセル「B2:AM2」の値の中にファイル「A.xlsm」のシート「B」のセル「C4」と同じ値がある場合、セル「B2:AM2」と合致するセルの3つ下に数式「VLOOKUP(B5,'[A.xlsm]B'!$A$4:$C$300,3,0)」を入れるというものを作りたいのですが、MyR〜の行で実行時エラー438「オブジェクトは、このプロパティまたはメソッドをサポートしていません」というエラーとなってしまいます。
誤っている箇所がお分かりでしたらご指摘頂けますでしょうか?
Dim MyR As Range
With Range("B2:AM2").Select
For Each MyR In Selection
If Workbooks"A.xlsm").Worksheets("B").Range("C4") = MyR Then
MyR.Cells.Offset(3, 0).Formura = "VLOOKUP(B5,'[A.xlsm]B'!$A$4:$C$300,3,0)"
End If
Next MyR
End With
< 使用 Excel:Office365、使用 OS:Windows10 >
でうごきませんか?
(no_name) 2021/05/31(月) 13:29
私は書式:標準のセルに数式を説明したとおりに入れた動きました。
Formuraは数式を取得する場合に使うものではなかったでしょうか?
(no_name) 2021/05/31(月) 14:24
>MyR.Cells.Offset(3, 0).Formura = "VLOOKUP(B5,'[A.xlsm]B'!$A$4:$C$300,3,0)" MyR.Cells.Offset(3, 0).Formula = "=VLOOKUP(B5,'[A.xlsm]B'!$A$4:$C$300,3,0)"
Formura → Formula VLOOKUP → =VLOOKUP
(半平太) 2021/05/31(月) 14:50
この数式を最終行までコピペして#N/Aを空欄にしたいのですが、
誤っている箇所お分かりでしたら教えて頂けますでしょうか?
(ActiveCell.Copy Paste = xlPasteValues)のところでエラーとなってしまいます。
Dim MyR As Range
With Range("B2:AM2").Select For Each MyR In Selection If Workbooks"A.xlsm").Worksheets("B").Range("C4") = MyR Then MyR.Cells.Offset(3, 0) = "=VLOOKUP(B5,'[A.xlsm]B'!$A$4:$C$300,3,0)" ActiveCell.FillDown ActiveCell.Copy Paste = xlPasteValues Selection.Replace What:="#N/A", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2 End If Next MyR End With
(ミシェル) 2021/05/31(月) 15:34
(砂糖) 2021/05/31(月) 15:51
下記の通り修正致しましたが
オブジェクトが必要ですというエラーとなってしまいました。
.FillDown
.copy
.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
.Replace What:="#N/A", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
Selectionにしたところエラーは起きなかったのですが、
正しくコピペされておりませんでした・・・
MyR.Offset(3, 0)を選択セルにしたいのですが、
Selectionでは駄目なのでしょうか?
(ミシェル) 2021/05/31(月) 16:51
Sub 名も無きマクロ() Dim MyR As Range Dim bufRNG As Range
For Each MyR In Workbooks("C.xlsm").Worksheets("D").Range("B2:AM2") If Workbooks("A.xlsm").Worksheets("B").Range("C4").Value = MyR.Value Then If bufRNG Is Nothing Then Set bufRNG = MyR Else Set bufRNG = Union(bufRNG, MyR) End If End If Next
If Not bufRNG Is Nothing Then bufRNG.Offset(3).Formula = "=VLOOKUP(B5,'[A.xlsm]B'!$A$4:$C$300,3,0)" End If
End Sub
■1
上記の数式において、B5セルというのは、相対参照であってるんですか?
相対参照であってる場合、B2セルが条件を満たした(AブックのBシートのC4セルの値と一致した)場合すべてが循環参照(数式を書き込むセルと検索値が書かれているセルが同じになってしまう)になりますよね?
さらに、B2セルで条件を満たさなかったら循環参照にはならないでしょうが、今度は、見つかったセルの列とB列の関係性が固定できないため、少なくともB列は絶対参照が正しいのではありませんか?
(その場合、B列から判定対象にすると前述のとおり循環参照になるから"C2:AM2"にすべきではありませんか?
■2
後半の部分になりますが、Selection.FillDown だとすれば↓ということになりますが
Workbooks("C.xlsm").Worksheets("D").Range("B2:AM2").FillDown
この場合、【1行】しかないですが、FillDownは何のために行っているのですか?
場合によっては、せっかくの数式を消しちゃいませんか?
(もこな2) 2021/05/31(月) 20:58
■1
数式のB5セルですが、B列のみ絶対参照で数字部分は相対参照になります。
数式だと$B5に変更すればよろしいのでしょうか?
■2
数式が入ったセル(bufRNG.Offset(3))よりその数式をB列の最終行までコピペするために、
FillDownを使っておりました。
前のマクロになりますが、下記に変更しても動きませんでした。
MyR.Cells.Offset(3, 0).FillDown
その他活用できる数式ございましたらご教授よろしくお願いいたします。
(ミシェル) 2021/06/01(火) 09:40
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.