
【やりたい事】
以下画像をご覧ください
1C列に約5~10個のファイル名が並んでいる
2ファイル一覧から、売上一覧YYYYMMDDHHSS.xls 形式のファイル名をA2へ抽出(関数orマクロ)
3A2のファイル名前と、A4のシート名(変わらない)を変数に入れたいです
ご存じの方、アドバイスorコードを教えて下さい
宜しくお願いします


- 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
- 今の自分の気分スタンプを選ぼう!
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
>aaaaaaaaaaYYYYMMDDHHNNSS.csv
>aが10個です
修正しました。
Public Sub ブック名転記()
Dim ws As Worksheet
Dim wrow As Long
Dim lastrow As Long
Dim ret As Boolean
Set ws = ActiveSheet
lastrow = ws.Cells(Rows.Count, "C").End(xlUp).Row
ws.Range("A2").Value = ""
For wrow = 2 To lastrow
ret = CheckName(ws.Cells(wrow, "C").Value)
If ret = True Then
ws.Range("A2").Value = ws.Cells(wrow, "C").Value
Exit For
End If
Next
If ws.Range("A2").Value = "" Then
MsgBox ("aaaaaaaaaaYYYYMMDDHHNNSS.csv 形式のファイルはありません")
Exit Sub
End If
Dim book_name As String
Dim sheet_name As String
book_name = ws.Range("A2").Value
sheet_name = ws.Range("A4").Value
MsgBox (book_name)
MsgBox (sheet_name)
End Sub
Private Function CheckName(ByVal name As String) As Boolean
CheckName = False
'28文字でないならエラー
If Len(name) <> 28 Then Exit Function
'先頭10文字が aaaaaaaaaa でないならエラー
If Left(name, 10) <> "aaaaaaaaaa" Then Exit Function
'末尾の4文字が .csv(大文字可) でないならエラー
If LCase(Right(name, 4)) <> ".csv" Then Exit Function
'YYYYMMDDHHNNSSが日付・時刻として正しくないならエラー
Dim dt As String
Dim date_time As String
dt = Mid(name, 11, 14)
If IsNumeric(dt) = False Then Exit Function
date_time = Left(dt, 4) & "/" & Mid(dt, 5, 2) & "/" & Mid(dt, 7, 2) & " " & Mid(dt, 9, 2) & ":" & Mid(dt, 11, 2) & ":" & Mid(dt, 13, 2)
If IsDate(date_time) = False Then Exit Function
CheckName = True
End Function
No.4
- 回答日時:
>ちなみに
>aaaaaaaaaa20250420180001.xls
>※aは10個 変更
>の変更につき、以下コードを、変更しましたが動きませんでした
>他、変更する所があれば教えて下さい
修正しました。
Public Sub ブック名転記()は、
MsgBox ("aaaaaaaaaaYYYYMMDDHHNNSS.xlsx 形式のファイルはありません")
の行のみ修正しています。
Private Function CheckName(ByVal name As String) As Boolean
は、全面的に変更しています。
-----------------------------------------
Public Sub ブック名転記()
Dim ws As Worksheet
Dim wrow As Long
Dim lastrow As Long
Dim ret As Boolean
Set ws = ActiveSheet
lastrow = ws.Cells(Rows.Count, "C").End(xlUp).Row
ws.Range("A2").Value = ""
For wrow = 2 To lastrow
ret = CheckName(ws.Cells(wrow, "C").Value)
If ret = True Then
ws.Range("A2").Value = ws.Cells(wrow, "C").Value
Exit For
End If
Next
If ws.Range("A2").Value = "" Then
MsgBox ("aaaaaaaaaaYYYYMMDDHHNNSS.xlsx 形式のファイルはありません")
Exit Sub
End If
Dim book_name As String
Dim sheet_name As String
book_name = ws.Range("A2").Value
sheet_name = ws.Range("A4").Value
MsgBox (book_name)
MsgBox (sheet_name)
End Sub
Private Function CheckName(ByVal name As String) As Boolean
CheckName = False
'29文字でないならエラー
If Len(name) <> 29 Then Exit Function
'先頭10文字が aaaaaaaaaa でないならエラー
If Left(name, 10) <> "aaaaaaaaaa" Then Exit Function
'末尾の5文字が .xlsx(大文字可) でないならエラー
If LCase(Right(name, 5)) <> ".xlsx" Then Exit Function
'YYYYMMDDHHNNSSが日付・時刻として正しくないならエラー
Dim dt As String
Dim date_time As String
dt = Mid(name, 11, 14)
If IsNumeric(dt) = False Then Exit Function
date_time = Left(dt, 4) & "/" & Mid(dt, 5, 2) & "/" & Mid(dt, 7, 2) & " " & Mid(dt, 9, 2) & ":" & Mid(dt, 11, 2) & ":" & Mid(dt, 13, 2)
If IsDate(date_time) = False Then Exit Function
CheckName = True
End Function
大変、申し訳ございません。拡張子を間違っていました
お手すきな時、教えて下さい。宜しくお願いします
aaaaaaaaaaYYYYMMDDHHNNSS.csv
aが10個です
No.3
- 回答日時:
こんにちは
スピル機能が使えるバージョンなら、関数でも可能です。
A2セルに
=LET(a,REGEXEXTRACT(C2:C11,"^売上一覧[0-9]{4}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\.xls(x)?$"),INDEX(FILTER(a,NOT(ISERROR(a)),""),1))
とか。
日付、時刻のチェックを緩くしても良ければ、
=LET(a,REGEXEXTRACT(C2:C11,"^売上一覧[0-9]{14}\.xls(x)?$"),INDEX(FILTER(a,NOT(ISERROR(a)),""),1))
でも可能かと。
関数でのご指導ありがとうございます
質問なのですが、自宅パソコン→サブスクExcelにて普通にできましたが
他のパソコンで実施したら、出来ませんでした→関数の所に緑三角→エラーインジケーターがでます、バージョンは、以下です
以下バージョンでも使えるようにする
アドバイスありまたら、お願いします
バージョン
Microsoft 365 Apps for enterprise
No.2
- 回答日時:
以下のようにしてください
A2のファイル名は変数book_name に格納、
A4のシート名は変数sheet_name に格納しています。
それぞれ、メッセージボックスに表示しています。
Option Explicit
Public Sub ブック名転記()
Dim ws As Worksheet
Dim wrow As Long
Dim lastrow As Long
Dim ret As Boolean
Set ws = ActiveSheet
lastrow = ws.Cells(Rows.Count, "C").End(xlUp).Row
ws.Range("A2").Value = ""
For wrow = 2 To lastrow
ret = CheckName(ws.Cells(wrow, "C").Value)
If ret = True Then
ws.Range("A2").Value = ws.Cells(wrow, "C").Value
Exit For
End If
Next
If ws.Range("A2").Value = "" Then
MsgBox ("売上一覧YYYYMMDDHHNNSS.xlsx 形式のファイルはありません")
Exit Sub
End If
Dim book_name As String
Dim sheet_name As String
book_name = ws.Range("A2").Value
sheet_name = ws.Range("A4").Value
MsgBox (book_name)
MsgBox (sheet_name)
End Sub
Private Function CheckName(ByVal name As String) As Boolean
CheckName = False
'23文字でないならエラー
If Len(name) <> 23 Then Exit Function
'先頭4文字が 売上一覧 でないならエラー
If Left(name, 4) <> "売上一覧" Then Exit Function
'末尾の5文字が .xlsx(大文字可) でないならエラー
If LCase(Right(name, 5)) <> ".xlsx" Then Exit Function
'YYYYMMDDHHNNSSが日付・時刻として正しくないならエラー
Dim dt As String
Dim date_time As String
dt = Mid(name, 5, 14)
If IsNumeric(dt) = False Then Exit Function
date_time = Left(dt, 4) & "/" & Mid(dt, 5, 2) & "/" & Mid(dt, 7, 2) & " " & Mid(dt, 9, 2) & ":" & Mid(dt, 11, 2) & ":" & Mid(dt, 13, 2)
If IsDate(date_time) = False Then Exit Function
CheckName = True
End Function
すごい、コードの教授ありがとうございます
うまく、動きました
ちなみに
aaaaaaaaaa20250420180001.xls
※aは10個 変更
の変更につき、以下コードを、変更しましたが動きませんでした
他、変更する所があれば教えて下さい
CheckName = False
'23文字でないならエラー
If Len(name) <> 28 Then Exit Function
'先頭4文字が 売上一覧 でないならエラー
If Left(name, 10) <> "aaaaaaaaaa" Then Exit Function
'末尾の5文字が .xlsx(大文字可) でないならエラー
If LCase(Right(name, 4)) <> ".csv" Then Exit Function
No.1
- 回答日時:
補足要求です。
ファイル名は、
売上一覧YYYYMMDDHHSS.xls 形式
となっていますが、
実際の例は、
売上一覧YYYYMMDDHHNNSS.xlsx 形式です。
①正しい拡張子は、xlsなのかそれともxlsxなのかが不明です。(もしくは両方とも正しい)
②YYYYMMDDHHSSはYYYYMMDDHHNNSSの誤りと理解して良いでしょうか。(NNは分)
1→YYMMDDHHNNSS
→14ケタです→こちらの間違いです
2 xlsx yahoo.co.jp通常のExcel拡張子です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
算術演算子「¥」の意味について
Visual Basic(VBA)
-
【マクロ】開いているブックの名前を取得した後、名前をセルに1つづつ入力するには?
Visual Basic(VBA)
-
以下のプログラムの実行結果はどうなると思いますか? その理由も教えてください。
Visual Basic(VBA)
-
-
4
VBAの「To」という語句について
Visual Basic(VBA)
-
5
【マクロ】変数を使った、文字の種類の変更にて、エラーとなる。
Visual Basic(VBA)
-
6
VB.net 文字列から日付型へ変更したい
Visual Basic(VBA)
-
7
VBA 最終行の取得がうまくいかず上書きされてしまいます。
Visual Basic(VBA)
-
8
Excelで、すでに書いてある表を入れ替える方法を教えてくださいお願いします
Excel(エクセル)
-
9
vbaマクロについて
Visual Basic(VBA)
-
10
エクセルのVBAコードについて教えてください。
Visual Basic(VBA)
-
11
エクセルVBA 検索結果を隣のシートの最終行に転記したい。
Visual Basic(VBA)
-
12
改行文字「vbCrLf」とは
Visual Basic(VBA)
-
13
エクセルの改行について
Visual Basic(VBA)
-
14
Vba セルの4辺について罫線が有るかどうか調べたいのですが
Visual Basic(VBA)
-
15
エクセルのマクロについて教えてください。
Visual Basic(VBA)
-
16
質問58753 このコードでうまく動作しません。どうしたら良いですか Private Sub Wor
Visual Basic(VBA)
-
17
VBAについてです。 どなたかご教示いただけないでしょうか。 データのチェックシートを作成しています
Visual Basic(VBA)
-
18
ダブルクリックで貼り付けた画像からリンクのみ削除し、画像を残したい。
Visual Basic(VBA)
-
19
(EXCEL超初心者)EXCELの関数(またはマクロ)で質問です。
Visual Basic(VBA)
-
20
【マクロ】モジュール変数の記述時、Callにて、呼び出されたプロシージャから実行するとエラーとなる?
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ISO9001
-
【マクロ】売上一覧YYYYMMDDHHS...
-
Google ドライブに意図しないフ...
-
「最小化」したファイルが元の...
-
"~$[ファイル名].xlsx"というフ...
-
開かなくなった引き出しの開け方
-
VBA:ユーザーフォームのマルチ...
-
ChatGPT excel
-
WPSスプレッドシートでエラー。...
-
AUTOCAD
-
VBA 数値を文字列として貼付したい
-
FlukeのLANテスター flwファイ...
-
A4ファイルを綺麗に並べる方法...
-
ハーボットの食欲
-
メールに添付ファイル(エクセ...
-
WindowsXpの修正ファイルについて
-
cerファイル、pfxファイルの基...
-
777ファイルが開かない!
-
ファイルにセキュリティをかけ...
-
音楽用ファイルが開けない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Google ドライブに意図しないフ...
-
VBA:ユーザーフォームのマルチ...
-
cerファイル、pfxファイルの基...
-
VBA 数値を文字列として貼付したい
-
拡張子sfvってなんですか?
-
WPSスプレッドシートでエラー。...
-
AUTOCAD
-
FlukeのLANテスター flwファイ...
-
「最小化」したファイルが元の...
-
A4ファイルを綺麗に並べる方法...
-
開かなくなった引き出しの開け方
-
plgファイルの開き方
-
"~$[ファイル名].xlsx"というフ...
-
ギガファイル便で送ったzipファ...
-
BVE5で湖西線をプレイしたい
-
preAlloc Fileとは何ですか?
-
BIOSアップデート
-
Excel VBA 転記について
-
拡張子TKM
-
EXCEL2010でロータスのファイル...
おすすめ情報