アプリ版:「スタンプのみでお礼する」機能のリリースについて

タイトルがわかりにくくてすみません。

やりたいことは、例えば一つのブックにシート名が1~10までとA1~A10まであるとします。
シートA○のセルA1とセルA2に数字を入力したら、シート○のA1にシートA○のセルA1とセルA2の合計が自動入力されるようにするには、どのようなコードを書けばよいのでしょうか。
更に、できれば参照元であるシートA○を削除してもシート○に自動入力されたデータが消えないようにならないかと考えています。

今まではVBAを使わずに、CELL関数のfilenameからシート名を調べてINDIRECT関数で対応するシートのセルを参照するという方法を使ってきましたが、関数が長くなるうえに、参照元のシートを削除してしまうとエラーになってデータが消えてしまいます。


今回、報告には大まかなデータを入力するフォームで提出するが、こちらで詳細なデータをとっておきたいという状況が生まれたため、詳細なデータをシートA○に入力したら、大まかなデータがシート○に自動入力され、報告時にシートA1~A10を削除してそのまま報告できるようなフォームができないかと考え調べ始めました。

しかしVBAはコピペでしか使ったことが無く、自力で調べるにも適切な検索ワードを選択する能力すらありません。
出来る限り自力で調べようと思ったのですが、初心者の状態でやりたいことだけをピックアップして学ぶのは相当難しいと痛感して終わりました。もしかしたら「こんなことわざわざ聞くんじゃねーよ」と思われる様な内容かもしれませんが、是非教えてください。

A 回答 (1件)

とりあえず以下で如何でしょう?


マクロfooを実行すると、選択されているブックの各シートA○のセルA1とセルA2の合計を、対応するシート○のセルA1に書きます。シート○が存在しない場合はメッセージを表示します。


> シートA○のセルA1とセルA2に数字を入力したら、シート○のA1にシートA○のセルA1とセルA2の合計が自動入力される

数字を入力したら自動で計算・入力させる様にするには、各A○シートにコードを記入する必要があります。ですから、そのシートを削除することにある用途での使用は現実的でないと思います。

-----------------------------------------------------
Sub foo()
Dim dic As Object
Dim ws As Worksheet
Dim name As String

Set dic = CreateObject("Scripting.Dictionary")

With ActiveWorkbook
' A無しシートの存在チェック
For Each ws In .Worksheets
If Left(ws.name, 1) <> "A" Then
dic(ws.name) = True
End If
Next
' 計算&記入
For Each ws In .Worksheets
If Left(ws.name, 1) = "A" Then
name = Mid(ws.name, 2)
If Not dic.Exists(name) Then
MsgBox name & "シートがありません", vbExclamation
Else
.Worksheets(name).Range("A1").Value _
= ws.Range("A1").Value + ws.Range("A2").Value
End If
End If
Next
End With
Set dic = Nothing
End Sub
    • good
    • 1
この回答へのお礼

ありがとうございます!
あとは書いていただいたコードを調べて、実際に使うフォームに当てはめていきます。

足がかりが全く分からなかったので、ほんとに助かりました。

お礼日時:2015/12/27 12:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!