• ベストアンサー

excel VBA

excel VBA 下記のようなwwwww.xlsの形の文字列xで、 xは英字 数字_数字 英字.klsの形式で_はひとつだけ xの処理で 質問1 文字変数Xを処理して変数yを求めるマクロコードのヒントを     (つまり.xlsを除き、続いて文字や_を取り去る) 質問2 文字変数Xを処理して変数zを求めるマクロコードのヒントを     (つまり文字のみを取り去る) (例)x=FILE20041211_1212system.xls    y=FILEsystem    z=20041211_1212.xls   

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

  • ベストアンサー
  • suz83238
  • ベストアンサー率30% (197/656)
回答No.1

両側から数値で切ると下記でいいんじゃない?もっと良い方法があるような気がするけど。 Sub XYZ() x = "FILE20041211_1212system.xls" x1 = Replace(x, ".xls", "") For i = 1 To Len(x1) a = Asc(Mid(x1, i, 1)) If a >= 48 And a <= 57 Then Exit For Next i y = Left(x1, i) For j = Len(x1) To 1 Step -1 a = Asc(Mid(x1, j, 1)) If a >= 48 And a <= 57 Then Exit For Next j y = y & Right(x1, Len(x1) - j) z = Mid(x1, i, j - i + 1) MsgBox x MsgBox y MsgBox z End Sub

taktta
質問者

お礼

これも正常動作を確認しました。 これから解読してみます。 こちらは、コードを認識してやるということで回答1と2のやり方をマスターすればこの手の問題は解けると思います。 力作とても感謝いたします。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.2

Sub test()  Dim x As String  Dim y As String  Dim z As String    x = "FILE20041211_1212system.xls"  With CreateObject("VBScript.RegEXP")       .Pattern = "^(\D*)(\d+\_\d+)(\D*)\b.xls\b$"       If .test(x) Then          y = .Replace(x, "$1") & .Replace(x, "$3")          z = .Replace(x, "$2") & ".xls"       End If       MsgBox x & vbLf & y & vbLf & z  End With End Sub こんな感じでしょうか?

taktta
質問者

お礼

いやーこんなふうにしてできるんですね。 びっくりしました。これから解読してみますが、 こういうことなんですね。どうもありがとうございました。 希望通りの動作です。 ーーーーーーーーーーーーーーーーーーーーーー メタ文字とエスケープシーケンス ^ 文字列の先頭 $ 文字列の末尾 \n 改行 . 改行を除く任意の1文字 * 直前のパターンの0回以上の繰り返し + 直前のパターンの1回以上の繰り返し ? 直前のパターンが0回または1回現れる \d 任意の数値 \D 任意の数値以外の文字 \s 任意のスペース文字 \S 任意のスペース以外の文字 () パターンのグループ化 | パターンの論理和 [] キャラクタクラス

関連するQ&A

専門家に質問してみよう