質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

3回答

1049閲覧

VBAで特定の文字から文末までを削除したい。

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/02/12 05:53

A列には【2020年01月02日(THU)】【2020年01月03日(FRI)】...と入っています。
そのうち【日】から後ろ(文末まで)を削除したいと思っています。
上記ですと【日(THU)】【日(FRI)】までを削除するという感じです。

これを正規表現でやろうとしているのですが、うまくいきません。
エラーは起きていなく正常に動いているのですが、変化はないという感じです。

正規表現は、「日.*$」を使いました。

Dim list01 As Object Set list01 = CreateObject("VBScript.RegExp") For j = 2 To ws_list.Range("A" & Rows.Count).End(xlUp).Row list01 = ws_list.Range("A" & j).Value list01 = Replace(list01, "日.*$", "")

正規表現以外でもやっていみたのですが、うまくいきませんでした。
なるだけなら正規表現でやりたいのですが、もしよろしければご教授頂けますと幸いです。

'list01 = Left(r, Len(r) - InStr(1, r, "日")) 'list01 = Replace(list01, Right(list01, 6), "")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

RegExpの使い方が決定的に違います。
オブジェクトに値を入れちゃダメ(x_x)
こんな感じになるかと。

VBA

1Dim reg As Object 2Set reg = CreateObject("VBScript.RegExp") 3With reg 4 .Pattern = "日.*$" 5 .IgnoreCase = False 6 .Global = True 7End With 8 9For j = 2 To ws_list.Range("A" & Rows.Count).End(xlUp).Row 10 ws_list.Cells(j, 1).Value = reg.Replace(ws_list.Cells(j, 1).Value, "") 11Next 12

投稿2020/02/12 06:07

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/12 06:49 編集

ありがとうございます。うまくできました。 いろいろと調べたつもりだったのですが、まだまだダメでした。 この辺り勉強したいと思います。
guest

0

RegExpの使い方が間違っています。下記を参考に書き直してください。

【VBA入門】正規表現で文字列を抽出、置換する方法(RegExp)

あるいは、この程度なら、RegExpを使うまでもないです。

確認用コード

vba

1 Dim s As String 2 s = "2020年01月02日(THU)" 3 s = Split(s, "日")(0) 4 MsgBox s

セル更新コード例

vba

1For j = 2 To ws_list.Range("A" & Rows.Count).End(xlUp).Row 2 ws_list.Cells(j, 1).Value = Split(ws_list.Cells(j, 1).Value, "日")(0) 3Next

投稿2020/02/12 06:06

編集2020/02/12 06:24
hatena19

総合スコア34084

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/02/12 06:50

ありがとうございます。わざわざ使うまでもないんですね。勉強になります。
guest

0

正規表現を用いて実装することも可能ですが
日付を分解して分解してjoinでつなげて
いらないものを捨てるという考え方もできますよ。
参考
DatePart関数を使って日付データを分解するという部分をぱくって
joinでつなげるというだけです。

投稿2020/02/12 06:05

nanami12

総合スコア1015

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2020/02/12 06:33 編集

残念なことに"2020年01月02日(THU)"というように曜日まで入っているとVBAでは日付として認識してくれません。よって、Year関数とかFormat関数とかDatePart関数を使うには、曜日を削除して"2020年01月02日"にする必要があります。
nanami12

2020/02/12 06:37

自分でも確認しました。曜日まで入っていると 認識されないんですね。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問