一月前のシート名を求めるユーザー関数 | |
---|---|
[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 |
[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/ 皆さん、ありがとうございます。 何とか、アドバイスで解決しました。 |
このトピックに書きこむ |
---|