- ベストアンサー
テキストファイルの更新について
お世話になっております。お教え下さい。 テキストファイルの中に *09A01234QQQQ *09A01235QQQQ というデータがあると仮定したとき、頭4桁を CNいうデータに、後ろ4桁を削除して保存したい時、エクセルVBA で作った場合、どのようなソースになるのでしょうか? VBA初心者なもので、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
それではExcelで行う方法を具体的に書きます。2種類書くので、やりやすい方法でやってみてください。 <Excelでテキストファイルを読み込む方法> ・Excelを起動します。 ・「ファイル」>「開く」を選択します。 ・ファイル選択のダイアログが出るので、「ファイルの種類」で「すべてのファイル」を選択します。 ・変換したいテキストファイルを選択して開きます。 ・「テキストファイルウィザード」という画面が出ますが、そのまま「完了」を押します。 これでテキストファイルをExcelで開くことができたはずです。 ・シートタブ(通常はSheet1などシート名が書いているところ。今はテキストファイル名になっていると思います)を右クリックして「コードの表示」を選択 ・VBAの画面が開くので、右側の画面に、No.1のVBAをコピーして貼り付ける。 ・F5キーを押してマクロを実行する。 ・Alt+F11でExcelの画面に戻ると、変換が行われている(はず) ・そのまま「ファイル」>「ファイル名をつけて保存」 ・保存ダイアログが出て、現在のファイル名が「ファイル名」の欄に入っているので、上書き保存をするときはそのまま「OK」を、元のファイルを取っておいて別名で保存したいときはファイル名を書き換えて「OK」を押す。 ・「~には互換性のない機能が含まれている可能性があります。~」というようなダイアログが出るが、そのまま「はい」をクリック ・そのままExcelを閉じる。閉じるときに再度「変更を保存しますか?」と出るが、ここは「いいえ」でかまわない。 これでテキストファイルをメモ帳で開くと、変換されているはずです。 <Excelにテキストファイルの内容だけ貼り付ける方法> ・Excelを起動します。 ・Sheet1のシートタブを右クリックして「コードの表示」を選択する。 ・VBAの画面が開くので、右側の画面に、No.1のVBAをコピーして貼り付ける。 ・メモ帳でテキストファイルを開き、Ctrl+Aで全部を選択し、Ctrl+Cでクリップボードにコピーする。 ・Excelの画面に戻り、A1セルを選択し、Ctrl+Vで貼り付ける。 ・テキストファイルの内容が貼り付けられるので、Alt+F8でマクロの実行画面を出し、Sheet1.Macro1を実行する。 ・変換が行われるので、Ctrl+Aでセル全体を選択し、Ctrl+Cでクリップボードにコピーする ・メモ帳に戻り、Ctrl+Aで全部を選択した状態にして、Ctrl+Vで貼り付ける。 ・Excelを閉じる。ファイルは保存しなくてもいいが、適当に名前をつけて保存しておけば、また同じ作業をするときにマクロを使い回せる。そのときは、Sheet1のをCtrl+A、Ctrl+Cでクリアしておく方がよい。 こんな感じですが、おわかりいただけたでしょうか。
その他の回答 (2)
- ham_kamo
- ベストアンサー率55% (659/1197)
エクセルVBAで作った場合、と質問文に書いてあるのですが、テキストファイルなのですね? エクセルでそのファイルを開いて、(あるいはエクセルを起動して、そのテキストファイルをエクセルにドラッグ&ドロップする)、No.1のマクロを実行して保存すればいいでしょう。 あるいはVBSでやるなら、 Do Until WScript.StdIn.AtEndOfLine strInput = WScript.StdIn.ReadLine WScript.Echo "CN" & Mid(strInput,5,Len(strInput)-8) Loop という内容のファイルを作って Test01.vbs とか名前をつけて保存し、 コマンドプロンプトから、 cscript Test01.vbs < 入力ファイル名 > 出力ファイル名 とやってもいいでしょう。
補足
ham_kamoさん、早速の回答ありがとうございます。 初心者のため、VBSというのがよくわかりません。 (すみません)先ほどの回答をベースに、エクセル マクロ上でテキストファイルの自動更新がしたいの ですが・・・。ややこしいことを言ってすみません。
- ham_kamo
- ベストアンサー率55% (659/1197)
VBAでなく関数でもできると思いますが、とりあえずVBAで書くと、こんな感じでしょうか。A1から下にデータが入っていると仮定しています。 Sub Macro1() Dim i As Integer Dim LastRow As Integer LastRow = Range("A1").SpecialCells(xlCellTypeLastCell).Row For i = 1 To LastRow Cells(i, 1).Value = "CN" & Mid(Cells(i, 1).Value, 5, Len(Cells(i, 1)) - 8) Next End Sub
補足
すいませんエクセルではなく メモ帳に書いてある文字です。 言葉が足りませんでした。 あるいはエクセルでなくとも 適用可能なのでしょうか?
お礼
早々のレス、ありがとうございます。 1番目の方法でいけそうです。ありがとうございました。 欲を言わせてもらえば、マクロボタンを作ってそれを押すと 全自動で上書き保存までされれば完璧なんですが(^^; 後は何とかがんばって見ます。ご協力、感謝です。