- ベストアンサー
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
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
両側から数値で切ると下記でいいんじゃない?もっと良い方法があるような気がするけど。 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
その他の回答 (1)
- n-jun
- ベストアンサー率33% (959/2873)
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 こんな感じでしょうか?
お礼
いやーこんなふうにしてできるんですね。 びっくりしました。これから解読してみますが、 こういうことなんですね。どうもありがとうございました。 希望通りの動作です。 ーーーーーーーーーーーーーーーーーーーーーー メタ文字とエスケープシーケンス ^ 文字列の先頭 $ 文字列の末尾 \n 改行 . 改行を除く任意の1文字 * 直前のパターンの0回以上の繰り返し + 直前のパターンの1回以上の繰り返し ? 直前のパターンが0回または1回現れる \d 任意の数値 \D 任意の数値以外の文字 \s 任意のスペース文字 \S 任意のスペース以外の文字 () パターンのグループ化 | パターンの論理和 [] キャラクタクラス
お礼
これも正常動作を確認しました。 これから解読してみます。 こちらは、コードを認識してやるということで回答1と2のやり方をマスターすればこの手の問題は解けると思います。 力作とても感謝いたします。