アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるソフトからwaveって名前の画像が連番で作成されるのですが、その作成されたwaveの並びが画像の様になっているため、VBAでファイル名を抽出した結果が画像の状態です。
そのため、出力されたテキストデータから、一致したwave番号の名前変更が困難な状態なので、お助け願います。

■画像の詳細■
上側VBAで抽出したファイル名
下側テキストファイルないの情報
写真が切れてるため分かりにくいですが、写真に写ってるwave2はグループの最後です。(3行でで1つの情報を持ってます)

■やりたい事■
1.VBAで抽出したファイル名を用いて、テキストファイル内の文字列から検索を行う。
※テキストファイルが出力される場所は同じで、出力されるデータの中身の順番は下側の画像と同じ
2.上側で抽出したデータの.pngを対象に入れずwave1やwave10等を検索する文字列にし、テキストファイル内3行目から検索し1行目内のM16ケミカルから1行目の最後まで取り出し、A列と同じ名前の横のB列へ代入。
3.代入後、拡張子.pngを付けフォルダ内をリネーム

■問題点■
テキストファイル内を検索する時.pngが付いているため、テキストファイル内の3行目にあるwave番号と一致確認ができない。

仮に一致確認が出来ても、リネームしたいデータが1行目のお尻の方であるため、文字列検索が困難。

といった問題を抱えているため、お助け願います(´。・д人)シクシク

「Microsoftの異常?リネームが出来」の質問画像

A 回答 (13件中1~10件)

ファイルのリネームが出来ないのか、テキストファイルの文字列を変更できないのか、良くわかりません。



仮に後者であればReplace関数を用いて
http://officetanaka.net/excel/vba/function/repla …

.png を "" に置換して検索をするとかですが、そもそもあろうがなかろうが『検索方法』がどうなっているかわからないけど、
InStr関数とかLike演算子(ワイルドカード使用)とか正規表現など方法はあると思いますが・・・
    • good
    • 0

>3.代入後、拡張子.pngを付けフォルダ内をリネーム



フォルダってファイルの事?
無論取り出した文字列は『全てファイル名として使用可能な文字を使っている』のですよね?

写真じゃわかりにくいからキチンと書いてくれてたら良かったのですが、

wave?.png → M16ケミカル~.png

としたいって事?

>テキストファイル内3行目から検索し1行目内のM16ケミカルから1行目の最後まで取り出し

写真から推測すると『wave?』が1行目で『M16ケミカル』は2行目か3行目に感じる。
この辺も例として写真に頼りすぎない記載方法で説明が欲しい所ですね。
本当に1行目『wave』と同じ行なのですか?
    • good
    • 1
この回答へのお礼

返信ありがとうございます。
まず、フォルダ内にはwave?.pngのファイルが複数存在します。
複数存在するwave?.pngと言うファイル名をM16ケミカル~.pngにリネームがしたいで合ってます。

テキストファイル内のデータですが、写真では上の部分が切れてしまってwaveが1行目に思えますが、その部分は3行目に当たります。

言葉足らずで申し訳ありません。

お礼日時:2018/01/10 10:20

No.2です。



今一つ確認ですが。

>写真に写ってるwave2はグループの最後です。(3行でで1つの情報を持ってます)

3行1セット又は2セットがどのようになっているのか、ダミーでも良いので記載は出来ませんか?
特にテキストファイルの先頭からどうなっているのか?が良くわかりませんし。
『wave?』も左側に何があるのか『:(全角?半角?)』で区切れるのか否か(右側は改行されているのか)等、
検証するダミーファイルをその写真からは作成できないです。

実際のファイルを見られれば他の方も回答は難なく出来る位の物だと思いますよ。
    • good
    • 1

【考えている手段】


1.テキストファイルを1行目から1行毎に読み込む。
2.読み込んだ行が『M16ケミカルから文末まで』が一致するPatternを持つ物か正規表現で判定する。
3.判定した結果Trueであれば『M16ケミカルから文末まで』を正規表現にて抜き出す。
4.1行読み込む(ダミー)
5.1行読み込み『wave?』を何とかして取り出す。⇒★ここが現在不明確な状況。
6.『wave?』をキーに『M16ケミカルから文末まで』を値としてDictionaryオブジェクトに放り込む。
7.シートのA列の値を順次取得しながら『.png』を削除した文字をキーとしてDictionaryのキーに存在するか確認し、存在していたら値をB列に書き込む。
8.Nameステートメントを用いA列の値をDictionaryの値 & ".png" で名前の変更を行う。⇒保存されているディレクトリは適当に書いてしまうけど。

こんな感じになるんじゃないかな?
    • good
    • 0

No.4の追記。



先にテキストファイルのデータをDictionaryオブジェクトに放り込むためのテキストの読み込みを全て終わらせてから、Excelのシートを使った処理に移行します。
    • good
    • 1
この回答へのお礼

明日、会社に到着したら一部分になりますが、詳細なテキストファイル内のデータを送ります。

仕事が終わったばかりで、もうテキストファイルのデータを見ることが出来ないのです(´。・д人)シクシク…

お礼日時:2018/01/10 18:58

ちょっと気になったので。



『あるソフトから吐き出された画像ファイル名を取り敢えずExcelシートのA列に書き出した。』
とするのなら、そもそも同時に吐き出されるテキストファイルを元に名前の変更が出来るのなら、
B列への書き出しは必要なのかな?

リスト作成って事でやってるのなら必要なんでしょうけど、順番がわかりにくい感じはしますね。
その時は別の列(C列?)にA列の値を置換により数字部分を数値にして書き込み、
その列を基準に昇順でA~C列を並び替えると言う手段もありますよ。

または

A列をコピーしてC列に書き出してC列を選択しツールバーの置換で
置換前:wave
置換後:(何も入力しない)

置換前:.png
置換後:(何も入力しない)

でも数値だけが残るかもですが。
    • good
    • 0

現在までの認識の確認・検証結果を連絡します。



・Dドライブにtestと言うフォルダを作成しsample.txtと言うテキストファイルを作成
・テキストファイルの中身は、

ああああああM16ケミカル・・・あなたのNo.は1です
ここはダミーです。
ああああああ:wave1
かかかかかかかM16ケミカル・・・あなたのNo.は2かな?
ここもダミーです。
かかかかか:wave2
さささささM16ケミカル・・・あなたのNo.は3かも?
こここそダミーです。
ささささささささ:wave3

です。
・新規Bookを用意しSheet1のA列に
wave1.png
wave2.png
wave3.png
と打ち込みました。
・B列に『M16ケミカル・・・』を書き出すコード

Sub try()
Dim FSO As Object, myReg As Object, myDic As Object
Dim r As Range, key As String, v As Variant, ReadData As String
Dim PathName As String, OldName As String, NewName As String

Set FSO = CreateObject("Scripting.FileSystemObject")
Set myReg = CreateObject("VBscript.RegExp")
Set myDic = CreateObject("Scripting.Dictionary")

myReg.Pattern = "^.+?(M16ケミカル.+)$"

PathName = "D:\test\" ' テキストファイル等のあるフォルダ

With FSO.OpenTextFile(PathName & "sample.txt")
While Not .AtEndOfStream

ReadData = .ReadLine
If myReg.Test(ReadData) Then ' M16ケミカル・・・ の判定でTrueなら
.SkipLine ' 1行飛ばす
v = Split(.ReadLine, ":") ' ":"(半角文字)で区切る
' Dictionaryに『wave?』をキーに『M16ケミカル・・・』を値として入れる
myDic.Add v(1), myReg.Execute(ReadData)(0).SubMatches(0)
End If
Wend
.Close
End With

With Worksheets("Sheet1")

For Each r In .Range("A1", .Cells(Rows.Count, 1).End(xlUp))
key = Replace(r.Value, ".png", "")
r.Offset(, 1).Value = myDic(key)
Next

End With

Set myDic = Nothing
Set myReg = Nothing
Set FSO = Nothing
End Sub

を実行し結果は以下のように。

リネームについてはまだですけど。
「Microsoftの異常?リネームが出来」の回答画像7
    • good
    • 0
この回答へのお礼

返信が遅くなりました。。。
やりたいことは近いですが、A列のセルに入る値は何とか取ることが出来ましたが、B列に入る値がどうしても取れないですね。

テキストファイルの詳細な中身は、
あああああM16ケミカル.txt
あああああFFT_1002_20170329-M1
あああああ ウェーブ:wave1

かかかかか基礎ボルト・・・.txt
かかかかかFFT_1002_20170329-M1
かかかかか ウェーブ:wave106

と言ったように欲しい情報は固定ではないのです

お礼日時:2018/01/12 12:42

No.7のお礼に対して。



まるで『え?』と言う感じです。
画像と合わせてみてコード化してみたのに、根本から違ってた訳ですよね。
しかもリネームするのに『拡張子』がついていて、『.png』のままでいくのか『.txt』に変更するのかもファイル管理から見ても疑問視です。

それに
>あああああM16ケミカル.txt
>かかかかか基礎ボルト・・・.txt
これですと『取り出したい明確な基準』がありません。
Excelは『人が目で見て判断する』事を自身ではやってくれませんよ。
取り出したい文字列とそうでない文字列の区切りが『ある基準で区分けできる』と言うのでなければ、
どうしようもないですね。

基準とは
・『wave?』のように":"など『ある文字』で分けられる
・頭文字から何文字は必要のないものである。
とかですかね。
面倒な方法になれば『どんな言葉から始まれば良いか』のリストを作成し、1行に対して該当するか否かを何度もループで比較すると言う
かなりの手間もあり得るかも。

他の基準を作成するには『実際のテキストファイル』を見てみないと検討も困難と思います。
上司等と相談の上、外注委託を考えた方が宜しいのでは?
守秘義務などもあるでしょうし、仮に『それほどの物ではない』にしても公の場で出せるものでもないでしょう。
    • good
    • 0

と言うよりも、実際にリネームしようと作業される方は『どうやって新しいファイル名』と識別しているのですかね?

    • good
    • 0

No.8に追記。



>M16ケミカル.txt
>基礎ボルト・・・.txt

これらのテキストファイル名は、吐き出された.pngに対になって吐き出されるテキストファイル名という事はないのでしょうか?
仮にそうだとするとそのファイル名をリスト化し、画像のテキストファイルを1行読み込んではリストと照合して合致したら『wave?』を
取得するように出来る『かも』ですね。

もしテキストファイルとして吐き出されないのならお手上げかもしれませんが、そちらで『何故リネームの名前を判断できるのか?』と
考えてみると、
・出力する際にファイル名の一部をソフトに入力している
・上記のように『対になったファイル』が存在している
辺りかと思いまして。
    • good
    • 0
この回答へのお礼

waveのファイル名は、こちらで作成したマクロを実行すると、順番にファイル名をwave1、wave2etc、且つ拡張子は.pngを付けてフォルダに出力されるよう作ってます。

次に必要となる作業が、現在フォルダ内はwaveと言った名前なので、それをリネームしてあげないといけないのでが、リネームするにはwave1とはなんの名前をwave1に置き換えたのか特定しないといけないので、その情報は上記の作業実行時、同時に出力されるテキストファイル内に存在するので、そのファイルを開き、いらない情報を置換と区切り文字を使用しバラバラにしたあと、VLOOKUPで紐付けをしリネームしています。
まずこの作業が手動で行っている作業になります。

上記の作業を自動化させるのが今回の問題点です。。。

お礼日時:2018/01/12 18:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!