質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

4回答

3662閲覧

VBA 数式の参照先のセルのアドレス取得方法

uho1234

総合スコア11

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/08/02 06:16

VBA 数式の参照先のセルのアドレス取得方法

シート3のB5,B6,B7セルには数字が入っています
C5,C6,C7セルには手動で入力した単語が入っています。変更等で変わる場合があります。

シート4のE列4セルには、='シート3'!$C$5 のように数式を入れて参照させています。
同様にシート5のE列4セルには、='シート3'!$C$6 
シート6のE列4セルには ='シート3'!$C$7 のように数式を入れて参照させています。

今回やりたいことはシート3のB5セル+C5セルの値をシート4のシート名 例 1.1ゴリラ
B6セル+C6セルの値をシート5のシート名      1.2りんご
B7セル+C7セルの値をシート6のシート名   1.3時計
にしたいです。

シート4、5,6のE列4セルからそれぞれ参照先のセル(C5,C6,C7)のアドレスを取得してその隣のセル(B5,B6,B7)のアドレスを取得してと考えているのですが可能でしょうか?
ややこしいですがどうにかしてこの方法で実現したいのですが詰まってしまったためよろしくお願いします。

Sub N()

Dim q As String
On Error Resume Next

o = Sheets("シート2").Index
p = Sheets("シート7").Index

Do While o < p

SheetName = Sheets(o)
SheetName.Activate

q = Worksheets(o).Cells(4, 5).Value

Worksheets(o).Name = q

o = o + 1

Loop

End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

質問のようなセル参照でしか使えませんが、Application.Evaluate メソッド (Excel) を使うのも手かもしれません。

単純なセル参照であれば、参照先のセルのRangeオブジェクトを取得できます。

Sub N() 'https://teratail.com/questions/139224 Dim wb As Excel.Workbook Set wb = Excel.ActiveWorkbook Dim ws2 As Excel.Worksheet Set ws2 = wb.Worksheets.Item("シート2") Dim ws7 As Excel.Worksheet Set ws7 = wb.Worksheets.Item("シート7") Dim o As Long For o = ws2.Index To ws7.Index - 1 Dim tgtWs As Excel.Worksheet Set tgtWs = wb.Worksheets.Item(o) Dim E4Cell As Excel.Range Set E4Cell = tgtWs.Range("E4") '数式が単純なセル参照とかで無ければエラー(424:オブジェクトが必要です。) Dim srcRng As Excel.Range Set srcRng = Excel.Evaluate(E4Cell.Formula) With srcRng tgtWs.Name = .Offset(, -1).Text & .Text End With 'srcRng Next o End Sub

投稿2018/08/02 12:08

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uho1234

2018/08/03 00:27

ありがとうございました! 助かりました
guest

0

ベストアンサー

vba

1Option Explicit 2Sub N() 3Dim o As Long 4Dim p As Long 5Dim q As String 6Dim r() As String 7Dim s As Range 8 o = Sheets("シート4").Index 9 p = Sheets("シート7").Index 10 Do While o < p 11 q = Sheets(o).Cells(4, 5).Formula 12 r = Split(Mid(q, 2), "!") 13 Set s = Sheets(r(0)).Range(r(1)) 14 Sheets(o).Name = s.Offset(ColumnOffset:=-1).Value & s.Value 15 o = o + 1 16 Loop 17End Sub

投稿2018/08/02 07:34

iruyas

総合スコア1067

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uho1234

2018/08/03 00:28

ありがとうございました! できました!
guest

0

VBAなら、
Range.DirectPrecedents プロパティRange.Offset プロパティメソッドですね。

追記
よく考えたら、DirectPrecedents は他のシートのセルの参照は取得できませんでした。

投稿2018/08/02 07:32

編集2018/08/02 08:27
hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

数式の INDIRECT、OFFSET を使えばできるかと。
後はご自分で考えてください。

投稿2018/08/02 07:11

ExcelVBAer

総合スコア1175

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問