- ベストアンサー
エクセルの参照先セルの選択について
こんばんは マクロ初心者の者です。 あるセルに別シートを参照する式が 入力されています。 「=Sheet2!A1」←こんな感じです。 その参照先セルを選択したいのですが どうすればいいでしょうか? どなたか、教えてください お願いします。 m(_ _)m
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
あるセルに書かれた式「=Sheet2!A1」という情報から、Sheet2のA1セルを取得したい。 という事だと思うのですが、良いですか? Dim cel As Range Dim fx As String Dim sheetName As String Dim celName As String Dim pos As Integer Set cel = [あるセル] fx = cel.Formula これでfxという文字列変数に、あるセルに書かれた式「=Sheet1!A1」が取れます。 '先頭の「=」を除去します。 fx = Mid(fx, 2) '「!」の位置を検索 pos = InStr(fx, "!") '参照先のシート名決定 sheetName = Left(fx, pos-1) '参照先のセル名決定 celName = Mid(fx, pos+1) '取得した参照先のセルを取得。 Set 参照先のセル = ThisWorkbook.Worksheets(sheetName).Range(celName) 実際に動かしてないのでエラーが起きるかも?
その他の回答 (2)
- papayuka
- ベストアンサー率45% (1388/3066)
同一シート内なら Precedents で良いようですが、別シートとなると簡単に出す方法が解りませんでした。 同一ブック内の別シート参照限定です。(他ブックへの参照は不可) 「a'''''''[]’’!! 一応↑こんなシート名でも拾うようにしたつもりですが、まだダメパターンがあるかも。 Sub Test() Dim r, sName As String, rAdd As String Dim cnt As Integer On Error Resume Next If Not Selection.HasFormula Then Exit Sub Set r = Selection.Precedents If Not IsEmpty(r) Then r.Select Else sName = Selection.Formula For cnt = Len(sName) To 1 Step -1 If Mid(sName, cnt, 1) = "!" Then Exit For Next cnt rAdd = Mid(sName, cnt + 1, Len(sName)) sName = Mid(sName, 2, cnt - 2) If Right(sName, 1) = "'" Then sName = Mid(sName, 2, Len(sName) - 2) sName = Replace(sName, "''", "'") sName = Replace(sName, "’’", "’") End If Worksheets(sName).Activate Range(rAdd).Select End If End Sub
お礼
早速のお返事ありがとうございます。 同一シートであればPrecedents でとれるんですね! 勉強になります。 色々なパターンを考えてコードを作成して頂いて ありがとうございます。 Formulaを使えば式がとれる事がわかりましたので 作成してみます。 ありがとうございましたm(_ _)m
- imogasi
- ベストアンサー率27% (4737/17069)
私には意味不明だが 関数ではSheet2!A1と表現するのをVBAでは、どう書くかなら Worksheets("Sheet1").Cells(1,"D")=Worksheets("Sheet2").Cells(1,"A") でしょう。Sheet2のA1の「値」を、Sheet1のD1にいれる。 上記で違うなら、質問の「=Sheet2!A1」の部分を日本語の文章で表現してみてください。
お礼
早速のお返事ありがとうございます。 わかりにくい質問でごめんなさい セルの式に「=Sheet2!A1」など、別シートの内容を 参照するの式が入力されているんです。 その参照するセルを選択したかったのです。 Set cel = [あるセル] fx = cel.Formula でとれることが分かったので、 やってみます。 ありがとうございました。
お礼
早速のお返事ありがとうございます。 コメントを入れて頂いたので とても分かりやすかったです。 Formula使って作成してみます。 ありがとうございましたm(_ _)m