Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 11 Pro : Microsoft 365)
シート名を取得して数式を作成
投稿日時: 24/05/01 22:14:19
投稿者: kkodin
メールを送信

こんばんはODINと申します。
下記のように書いたところ
アプリケーション定義またはオブジェクト定義のエラーですと出てしまいました。
===================================================================================
Dim i As Integer
Dim mysc As Integer
Dim ii As Integer
0
Sub myloop()
mysc = Sheets.Count
ii = 1
    For i = 3 To mysc
        Sheets(1).Cells(ii, 1).Formula = "=" & Sheets(i).Name & "!a1&" & Sheets(i).Name & "!b1&"
        Sheets(1).Cells(ii, 2) = "=" & Sheets(i).Name & "!j52"
        ii = ii + 1
    Next
End Sub
===================================================================================
 
セルの 「='18路線'!A1&'18路線'!B1」と入力したいだけなのですが
うまくいかなの買ったので、もしよろしければ
正しい方法を教えていただけないでしょうか
 
よろしくお願いします。

回答
投稿日時: 24/05/01 23:08:43
投稿者: simple

こういう場合は、地道に設定しようとしている式が正しいか確認してください。
以下のようにして、イミディエイトウインドウにどんな式が出力されたか確認してください。
 

Dim i         As Integer
Dim mysc      As Integer
Dim ii        As Integer
Sub myloop()
    Dim s As String
    
    mysc = Sheets.Count
    ii = 1
    For i = 3 To mysc
        s = "=" & Sheets(i).Name & "!a1&" & Sheets(i).Name & "!b1&"
        Debug.Print s
        Sheets(1).Cells(ii, 1).Formula = s
        Sheets(1).Cells(ii, 2) = "=" & Sheets(i).Name & "!j52"
        ii = ii + 1
    Next
End Sub

回答
投稿日時: 24/05/02 08:18:46
投稿者: WinArrow

引用:
"=" & Sheets(i).Name & "!a1&" & Sheets(i).Name & "!b1&"

は、
引用:

='18路線'!A1&'18路線'!B1」

にはならないと思いますが・・
よく確認してみてください
 
 

回答
投稿日時: 24/05/02 12:48:46
投稿者: simple

■問題点
1. 末尾に不要な&がついていること(妥当な数式ではないので、必ずエラーになります)
2. シングルクォーテーション(以下、sq)が抜けていること。
   ・なお、18路線のような数値で始まるシート名は sqをつけなくても、
     Excel側で自動補完されるようです。
   ・また、Sheet3のようにsqが本来不要なものにsqをつけても、自動で消されるので
     問題ありません。
   ・ただし、シート名に空白を含む場合などは、sqは自動補完されないので、
     必ずsqで囲む必要があります。
 
■こんな風に書きますか

Sub myloop()
    Dim k      As Long
    Dim j      As Long
    Dim shName As String
    Dim s      As String
    
    j = 1
    For k = 3 To Sheets.Count
        shName = "'" & Sheets(k).Name & "'"
        s = "=" & shName & "!A1 & " & shName & "!B1"
        Sheets(1).Cells(j, 1).Formula = s
        Sheets(1).Cells(j, 2).Formula = "=" & shName & "!J52"
        j = j + 1
    Next
End Sub

トピックに返信