• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ユーザ定義関数がうまく動きません。 )

ユーザ定義関数がうまく動かない!2月のA1セル値が1になっている問題の解決方法は?

このQ&Aのポイント
  • ユーザ定義関数がうまく動かない!2月のA1セル値が1になっている問題の解決方法を教えてください。
  • シート名が1月から12月の各シートで、A1セルには「=sheetname()」、B1セルには「月のチェックシート」と入っています。
  • VBAの設定で、Function SheetName() As Stringという関数が使われています。Len(ActiveSheet.Name)が3の場合、SheetName関数はActiveSheet.Nameの最初の2文字を返し、それ以外の場合は最初の1文字を返します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

「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

ddtqp
質問者

お礼

ばっちりです!ありがとうございます!

その他の回答 (2)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

既に回答がでていましたので 一般関数を使ってみました。 =MID(CELL("filename",C1),FIND("]",CELL("filename",C1))+1,FIND("月",CELL("filename",C1))-FIND("]",CELL("filename",C1))-1) の関数をセルに入れておいて、シート名を色々と変更してみてください。 関数の更新も簡単でしょう。

ddtqp
質問者

お礼

回答ありがとうございます! これもいいですね。勉強になりました。

  • tadagenji
  • ベストアンサー率23% (508/2193)
回答No.1

VBAを実行しているのは、SHEET1ですね。 だから 変数sheetnameには1が入っていますよ。 どの時点で、2や3に替えるのですか? VBAを使わずに単純にsheet1!A1に入れた数値から+1づつしたらいいのでは。

ddtqp
質問者

お礼

回答ありがとうございます。 そうですね。確かに+1ずつしていけばすみますね。 各シート(1月~12月)に同じ式を貼り付けたかったので、 ユーザ定義関数でどうにかならないものか考えていました。 これも勉強になりました。 また機会がありましたら、よろしくお願いします。