戻る  □一般操作のサロン  □ 使用方法  □ 新着記事  □ 新規に質問する!  □ トピック一覧  □ 検索  □ 過去ログ
[ 最新記事及び返信フォームをトピックトップへ ]
このトピック参照回数 :
一月前のシート名を求めるユーザー関数

    [195873] 一月前のシート名を求めるユーザー関数-

    ■親トピック/記事引用/メール受信=OFF■

    □投稿者/ 雲谷歳三 -(2023/08/18(13:34))
    □U R L/
      シート名が「8月」のひと月前のシート名は「7月」だとすると
      アクティブシートの名前から一月前のシート名を求めるユーザー関数を作成しています
      
      以下では上手くワークシートでは作動しません。
      どう変更すれば良いでしょうか ?
      
      Option Explicit
      
      Function BeforSheet()
      Dim AsName As String
      Dim BsName As String
      
      AsName = ActiveSheet.Name
      BsName = Left(AsName, 1) - 1
      BsName = BsName & "月"
      
      End Function
      
      ---- windows11, Office 2021 ------
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他



      ++++++++++++++++++++
      OS      ⇒OTHER
      Version⇒OTHER
      ++++++++++++++++++++




    [195874] Re[1]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ 雲谷歳三 -(2023/08/18(14:01))
    □U R L/
      すいません。
      
      以下に訂正します
      
      
      Function BeforSheet()
      Dim AsName As String
      Dim BsName As String
      
      AsName = ActiveSheet.Name
      BsName = Left(AsName, 1) - 1
      BeforSheet = BsName & "月"
      
      End Function
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [195875] Re[2]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ MK -(2023/08/18(14:17))
    □U R L/

      10~12月は数字部分が2桁になるのでLeftで切り出すのは
      不適切です。
      Replaceで「月」を置換して数字部分を取り出して数値化し、
      その数値から-1し、-1したら0になったら12とする、という考えで
      いいと思います。




    [195876] Re[3]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ MK -(2023/08/18(14:35))
    □U R L/
      無理やり案です。
      
      Sub test()
       Dim WsNameA As String
       Dim WsNameb As String
         WsNameA = "1月"
         WsNameb = Format(DateSerial(Year(Date), Replace(WsNameA, "月", "") * 1 - 1, 1), "m月")
         MsgBox WsNameb
      End Sub


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [195877] Re[4]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ MK -(2023/08/18(14:41))
    □U R L/
      無理やりではない案です。
      
      Sub test()
       Dim wsA As String
       Dim wsB As String
        wsA = "1月"
        wsB = BeforSheet(wsA)
        MsgBox wsB
      End Sub
      
      Function BeforSheet(ByVal wsName As String) As String
       Dim tuki As Integer
        tuki = Replace(wsName, "月", "") - 1
        If tuki = 0 Then tuki = 12
        BeforSheet = tuki & "月"
      End Function
      


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [195878] Re[5]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ 雲谷歳三 -(2023/08/18(15:33))
    □U R L/
      MKさん、アドバイスありがとうございます。
      
      月が10-12月の場合、Leftで1個を取り出す案は採用出来ないですね。
      
      コードを修正しました。
      
      セレクトシート(アクティブシート)でユーザー関数(BeforeWsName)を利用したいので
      コード中に「 ActiveSheet.Name」を必ず含めたいと思います。
      この場合は、ユーザー関数(BeforeWsName)の引数が必要ないので
      ユーザー関数としてワークシート上で利用する場合は、
      BeforeWsName()と入力することになると思いますが違っていますか ?
      
        wsさんはAsubからfunctionを呼び出すのを想定していますが
        私は、ワークシート上で利用する事を想定しています。
      
      
      もう一つ疑問点があります。
      
      シート名の月以外の数値部(1-12)は全て全角ですが
      修正後のコードで問題ないでしょうか ?
      
      
      
      Function BeforeWsName()
            Dim WsNameActive As String
            Dim WsNameBefore As String
           
            WsNameActive = ActiveSheet.Name
           
            WsNameBefore = Left(WsNameActive, Len(WsNameActive) - 1) - 1
            If WsNameBefore <> 0 Then
                  BeforeWsName = WsNameBefore & "月"
            Else
                  BeforeWsName = 12 & "月"
            End If
           


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [195879] Re[6]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ 雲谷歳三 -(2023/08/18(15:35))
    □U R L/
      すいません。
      前回の書き込みで文字化けがありました。
      以下に訂正します
      
      
      wsさんはAsubからfunctionを呼び出すのを想定していますが


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [195880] Re[7]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ 雲谷歳三 -(2023/08/18(15:37))
    □U R L/

      なぜだか?

      文字化けがしてしまします。

      サブからファンクションを呼び出す

      とご理解ください。




    [195881] Re[8]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ マナ -(2023/08/18(18:52))
    □U R L/

      数式ではだめですか
      (2023/8/18 20:13修正)

      =JIS(TEXT(EDATE(TEXTAFTER(CELL("filename"),"]",-1)&"1日",-1),"m月"))





    [195882] Re[9]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ MK -(2023/08/18(19:57))
    □U R L/
      ↓で試した限りは問題ないようです。月の数字部分が全角でも半角でも前の月を取得してくれました。
      返ってくるのは半角数字+「月」ですけど。
      
      Sub test()
       Call BeforeWsName
      End Sub
      
      Function BeforeWsName()
            Dim WsNameActive As String
            Dim WsNameBefore As String
           
            WsNameActive = ActiveSheet.Name
           
            WsNameBefore = Left(WsNameActive, Len(WsNameActive) - 1) - 1
            If WsNameBefore <> 0 Then
                  BeforeWsName = WsNameBefore & "月"
            Else
                  BeforeWsName = 12 & "月"
            End If
           MsgBox BeforeWsName
      End Function


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [195883] Re[10]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ 雲谷歳三 -(2023/08/19(06:42))
    □U R L/

      マナさん、数式をおしえていただきありがとうございます。

      早速、お試しで8月のシートの適当なセルに数式を入力しましたが
       =JIS(TEXT(EDATE(TEXTAFTER(CELL("filename"),"]",-1)&"1日",-1),"m月"))

       #Name? とエラー表示となりました。

       使い方が間違っていると思われますが
        この関数は、どうやって利用するのかサンプルあればお願いします。

      =======================================================================

      MKさん、検証ありがとうございます。

      >半角数字+「月」ですけど。

      であれば、ワークシートではこのユーザー定義関数を利用した数式では利用できないと思われます。
      (ワークシート名を全角数字+「月」ではなく、半角数字+「月」に治す必要がある)

      対策を模索中ですがアドバイス有ればお願いします。




    [195884] Re[11]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ マナ -(2023/08/19(08:41))
    □U R L/
      2021ではTEXTAFTERが使用できませんでした。
      
      =LET(
          p,CELL("filename"),
          sn,RIGHT(p,LEN(p)-FIND("]",p)),
          JIS(TEXT(EDATE(sn&"1日",-1),"m月"))
      )
      




    [195885] Re[12]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ 雲谷歳三 -(2023/08/19(12:01))
    □U R L/

      マナさん、修正された関数をありがとうございます。


      8月のシートの適当なセルに数式を入力して7月と表示されました。

      TEXTAFTERは、Office365でないと利用できない関数ですね。




    [195886] Re[13]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2023/08/19(14:13))
    □U R L/
      未解決なんですか?
      
      Function preWsName()
          Dim temp
          temp = Application.Caller.Worksheet.Name
          temp = Replace(temp, "月", "") + 10
          preWsName = StrConv((temp Mod 12) + 1, vbWide) & "月"
      End Function


      この記事にはVBAのコードが含まれています。

      緑の太文字→注釈
      茶色の太文字→条件分岐
      赤の太文字→ループ
      青の太文字→その他




    [195888] Re[14]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ MK -(2023/08/19(16:53))
    □U R L/

      2023/08/19(06:42のレスへの返答です。

      ひと手間かかりますがStrConvが使えます。

      ht tp://officetanaka.net/excel/vba/function/strconv.htm




    [195889] Re[15]: 一月前のシート名を求めるユーザー関数-

    記事引用/メール受信=OFF■

    □投稿者/ 半平太 -(2023/08/19(17:18))
    □U R L/
      >コード中に「 ActiveSheet.Name」を必ず含めたいと思います。
      
      ところで、その方針って大丈夫なんですか?
      他のシートに入れたのも同じ月に変わる気がするんですが。
      




    [195894] Re[16]: 一月前のシート名を求めるユーザー関数-

    解決!!ありがとうございました! / 記事引用/メール受信=OFF■

    □投稿者/ 雲谷歳三 -(2023/08/21(06:44))
    □U R L/

      皆さん、ありがとうございます。

      何とか、アドバイスで解決しました。



このトピック内容の全ページ数 / [0]

このトピックに書きこむ
Name/
E-Mail/

└>このツリーのレス記事をメールで受信しますか? YES/ NO/
Title/
URL/
Comment/ 通常モード->  図表モード-> (←の場合適当に改行を入れて下さい)
タグが使用できます。例 ⇒ <font color="blue">文字</font>
解決!!ありがとうございました! 解決       保留中です・・・ 保留        迷宮入りorほかあたって見ます・・ 迷宮入       すいませ〜ん。誰か〜! Help! ←※回答者専用
解決したらチェック       保留(コードテスト中など・・)         解決不可orレスが全く付かなくてほかのサイトに行くときなど・・
削除キー/
(半角8文字以内) 


- Child Forum -
Edit:ゆう-G