いつもお世話になっております
下記のコードを見つけたのです。
Msgboxに表示させるコードですが、
range("A1") に2005-5/23が入力されているとして
A1からA31まであり日付はすべて違います。
range("B1") 2005 range("C1") 5 range("D1") 23
と表示させたいです。
わかる方おしえてくれませんでしょうか
Dim objRegExp, objMatches, x
Dim str
str = "2005-5/23"
Set objRegExp = CreateObject("VBScript.RegExp")
objRegExp.Pattern = "(\d+)"
objRegExp.Global = True
Set objMatches = objRegExp.Execute(str)
For Each x In objMatches
MsgBox x
Next
No.3ベストアンサー
- 回答日時:
.Test プロパティで取得して Split で区切って放り込むってのもある。
Sub megu()
Dim R As Range
For Each R In Range("A2", Cells(Rows.Count, "A").End(xlUp))
With R.Offset(, 1).Resize(, 3)
.Value = Split(R.Text, "/")
.Value = .Value
End With
Next
End Sub
どうしても正規表現なら、
Sub megu()
Dim myReg As Object
Dim r As Range, i As Integer
Dim Matches
Set myReg = CreateObject("VBScript.RegExp")
myReg.Pattern = "\d+"
myReg.Global = True
For Each r In Range("A2", Cells(Rows.Count, "A").End(xlUp))
For i = 0 To myReg.Execute(r.Text).Count - 1
With r.Offset(, i + 1)
.Value = myReg.Execute(r.Text)(i)
.Value = .Value
End With
Next
Next
Set myReg = Nothing
End Sub
こんな感じ?
いつも有難うございます。
With R.Offset(, 1).Resize(, 3)
.Value = Split(R.Text, "/")
.Value = .Value
End With
とても素晴らしいです。
For Each R In Range("A2", Cells(Rows.Count, "A").End(xlUp))
R.Offset(, 1) = Year(R)
Next
わたしが書くとどうしてもアナログ的になってしまいます。
あ--なんとかしたいです。
ありがとうございました。
No.2
- 回答日時:
No1です
>Excelの標準モジュールに~~
ということはVBSではなくVBAということですよね?
ご提示の表を見ると、多分A列の値はシリアル値になっているのではないかと推測しますが、その場合は正規表現で行うよりも、そのまま YEAR() などで年月日を取得した方が遥かに簡単です。
例えば、
For Each c In Range(Cells(2, 1), Cells(Rows.Count, 1).End(xlUp))
c.Offset(, 1).Value = Year(c.Value)
c.Offset(, 2).Value = Month(c.Value)
c.Offset(, 3).Value = Day(c.Value)
Next c
VBAでなくともシート関数で同様のことが可能です。
一方で、ご提示の様に正規表現を用いたければ、一旦、文字列に変換するために
Format(Range().Value, "yyyy/m/d")
などのよう、「/」形式の日付文字列に変換してから行う必要があります。
あるいは、ご提示の図のようにセルの表示書式が「/」形式で設定されているのなら、
Range().Text
で、表示のままの文字列形式の値を取得できますので、そちらを用いることも可能でしょう。
(多分違うとは思いますが)A列の値が文字列になっている場合は、上記のような変換は必要なく(変換しようとすると却ってエラーになります)、そのままのセルの値を正規表現にかければよいことになります。
また、文字列操作で求める場合であっても、今回のように「/」で分割するだけであれば、Split関数を用いて分割する方が簡単でしょう。
https://docs.microsoft.com/ja-jp/office/vba/lang …
No.1
- 回答日時:
こんにちは
>VBScript Cellの書き出し
って、タイトルにありますが、「 .VBS」ファイルを直接実行している環境でしょうか?
ご質問文にはいきなり「range("A1")に~」などと記載がありますが、上記の環境なら、まず「エクセルへのインスタンスを生成してファイルを開く」ことから始めないと・・・
(このあたりの情報がまったく欠落しているので、これ以上はなんとも…)
エクセル操作の例としては、こんな感じでしょうか
https://garafu.blogspot.com/2018/09/vbscript-exc …
エクセルへアクセスできれば、あとはVBAとほぼ同じ操作でできるはずです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Excel(エクセル) 指定文字列が該当するA列をアクティブセルにするには 3 2022/08/17 13:18
- Excel(エクセル) vbaで列幅について 1 2022/11/15 08:31
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Excel(エクセル) vba シート名の一覧を2列に分けるには 5 2023/04/24 08:56
- Excel(エクセル) ハイパーリンクの削除について 2 2022/11/10 07:32
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6.0の「vbFromUnicode」はVB....
-
VBでUTF-8で出力
-
16進をASCIIコードに変換する...
-
2進数から10進数へ変換
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
2の補数の計算について
-
16進コード文字列を文字列に変換
-
n進数の値を10進数の値に変換す...
-
文字型を日付/時刻型に変換する...
-
VBScript Cellの書き出し
-
vb6の桁数指定
-
C#でListとDictionaryの判別方法
-
VB6.0 String型→Long型変換方法...
-
ASPでVBのFormat関数のような機...
-
c++ CString char* BSTR textbo...
-
VBA 変数名に変数を使用したい。
-
INT64対応のprintf系関数はあり...
-
C#でbyte配列から画像を表示さ...
-
vba フィルター 複数条件 3つ以...
-
DataTableに特定のフィールドが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0の「vbFromUnicode」はVB....
-
VB.NETで1→A、2→B、26→Z、27→AA...
-
C++ 文字列変数と16進数の比較
-
16進をASCIIコードに変換する...
-
バイト型のデータをLong型に変換
-
16進コード文字列を文字列に変換
-
WORD型をCString型に変換する方法
-
textbox.textやlabel.captionの...
-
2の補数の計算について
-
Boolean型変数の値を反転する方法
-
vb6の桁数指定
-
VC++ std::stringからLPCWSTRに...
-
VB6.0 String型→Long型変換方法...
-
n進数の値を10進数の値に変換す...
-
【C++/CLI】int型からString型...
-
エクセルでメールヘッダーを解...
-
C#でListとDictionaryの判別方法
-
2進数から10進数へ変換
-
VB6 case文について
-
文字型を日付/時刻型に変換する...
おすすめ情報
申し訳ございません
Excelの標準モジュールに
書いています。
画像添付しました。
お忙しいところ恐縮ですが
よろしくお願いいたします。
最初のは下記でしたが
"2005-5/23"
2020/5/1です。
また、
For Each R In Range("A2", Cells(Rows.Count, "A").End(xlUp))
R.Offset(, 1) = Year(R)
Next
でもいけますがよろしくお願いいたします。