- ベストアンサー
ユーザ定義関数がうまく動かない!2月のA1セル値が1になっている問題の解決方法は?
- ユーザ定義関数がうまく動かない!2月のA1セル値が1になっている問題の解決方法を教えてください。
- シート名が1月から12月の各シートで、A1セルには「=sheetname()」、B1セルには「月のチェックシート」と入っています。
- VBAの設定で、Function SheetName() As Stringという関数が使われています。Len(ActiveSheet.Name)が3の場合、SheetName関数はActiveSheet.Nameの最初の2文字を返し、それ以外の場合は最初の1文字を返します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
「ActiveSheet」になっているからです。 「=sheetname()」が各シートのA1に入力されてあったら、関数が更新されるたびにすべてのシートの「=sheetname()」の答えは、アクティブでないシートの答えもアクティブなシート名から答えを出すので当然です。 どこかセルを参照するようにした方がよいです。 「=sheetname(B1)」のように入力します。 Function SheetName(C As Range) As String Application.Volatile If Len(C.Parent.Name) = 3 Then SheetName = Left(C.Parent.Name, 2) Else SheetName = Left(C.Parent.Name, 1) End If End Function
その他の回答 (2)
- hallo-2007
- ベストアンサー率41% (888/2115)
既に回答がでていましたので 一般関数を使ってみました。 =MID(CELL("filename",C1),FIND("]",CELL("filename",C1))+1,FIND("月",CELL("filename",C1))-FIND("]",CELL("filename",C1))-1) の関数をセルに入れておいて、シート名を色々と変更してみてください。 関数の更新も簡単でしょう。
お礼
回答ありがとうございます! これもいいですね。勉強になりました。
- tadagenji
- ベストアンサー率23% (508/2193)
VBAを実行しているのは、SHEET1ですね。 だから 変数sheetnameには1が入っていますよ。 どの時点で、2や3に替えるのですか? VBAを使わずに単純にsheet1!A1に入れた数値から+1づつしたらいいのでは。
お礼
回答ありがとうございます。 そうですね。確かに+1ずつしていけばすみますね。 各シート(1月~12月)に同じ式を貼り付けたかったので、 ユーザ定義関数でどうにかならないものか考えていました。 これも勉強になりました。 また機会がありましたら、よろしくお願いします。
お礼
ばっちりです!ありがとうございます!