長いですが、ソースを見て頂いた方が分かりやすいかと思います。
vb
1Sub test() 2 Dim ws As Worksheet 3 Dim rng1 As Range 4 Set ws = Workbooks("hoge.xls").ActiveSheet 5 6 '処理データ 7 Set rng1 = ws.Range(ws.cells(9, 1), ws.cells(9, 7)) 8 9 'get_meisai() では、rng1に合致するデータを 10 'fuga.csv から検索して、検索一致したRangeオブジェクトを取得する 11 'fuga.csv は、マスターから出力された、一次情報に近いデータ 12 Dim rng2 As Range 13 Set rng2 = get_meisai(rng1) 14 15 'fmt_meisai() では、rng2の内容を元とした 16 'rng1のフォーマットのRangeオブジェクトを取得したい。。。 17 Dim rng3 As Range 18 Set rng3 = fmt_meisai(rng1, rng2) 19 20End Sub 21 22 23Function fmt_meisai(ByVal in_rng As Range, ByRef in_rng2 As Range) 24 25 Dim rng As Range 26 Set rng = in_rng 27 28 rng(1, 1) = in_rng2(1, 12) 29 rng(1, 2) = in_rng2(1, 13) 30 rng(1, 3) = in_rng2(1, 14) 31 rng(1, 4) = in_rng2(1, 16) 32 rng(1, 5) = in_rng2(1, 33) 33 rng(1, 6) = in_rng2(1, 2) 34 rng(1, 7) = in_rng2(1, 7) 35 36 set fmt_meisai = rng 37 38End Function 39
fmt_meisai()
で、rng1
に含まれるデータ内容を一次情報に近いデータに書き換えたいです。
ただし、rng1
には手を加えず、rng3
を作成したいです.
fmt_meisai()
では、ByVal
キーワードで、rng1
のコピーを渡しているつもりですが、test()
でfmt_meisai()
が実行されると、rng1
があるワークシートで値の書き換えが起こってしまいます(参照している)
##知りたいこと
fmt_meisai()
内のrng
が値で渡るにはどうすればいいでしょうか?- 何故こうなってしまうでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/10 00:04