![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
VBAを4月から習おうと講座に申込んだり準備をしていたところ
それを聞いた上司が前勉強でツールを作れ、と無茶ぶりしてきました。しかも期限がすごく短くて焦ってます。
まだ勉強前で右も左もわからないので、本を読んだりWEBで調べたりしたのですが、
どうしてもよく作れない部分があります。教えてください。
うまくいかない部分
社内システムに投入するテキストファイルを作成したいです。
①作成ボタンを押したら投入する文章の書かれたテキストdefault.txtを呼び出す
②そのテキスト内の決まった項目(C1、C2,C3)をそれぞれActiveSheetのA1、A2、A3
に置換する
③shinki.txtという名前で書きだす
スクリプト?ランタイムを使うといいと聞きましたが、よくわかりません。
Private Sub SakuseiButton_Click()
References.AddFromFile "C:\Windows\system32\scrrun.dll"
Call ReplaceFromFile("C:\default.txt", "C1", "A1")
Call ReplaceFromFile("C:\default.txt", "C2", "A2")
Call ReplaceFromFile("C:\default.txt", "C3", "A3")
Call ReplaceFromFile("C:\shinki.txt", vbCrLf)
End Sub
すみません、上のをどう直せばいいのでしょう?
周りはVBAのツールを使ったことはあっても作ったことのある人はいません…
助けてください!
No.2ベストアンサー
- 回答日時:
私のように、下手くそなVBAなど書いて人に教えないほうがよいのかもしれませんが、ちょっと興味を持ちました。
その「scrrun.dll」の方法から組み立てるというのは難しいですね。
私自身も、Microsoft Office を教わりにいって、VBAもやりたいと言ったら、そこの講師の先生から、FOM(富士通の緑のテキスト)の本だけで、その日に合計を出すプログラムを作りなさい、という宿題だけで、これも無茶ぶりでした。それに、家にはパソコンがないから、紙の上でシミュレート(^^; でも、それでVBAの授業は終わりでした。たった1日の授業でした。
>References.AddFromFile
これって、参照設定を呼び出す方法ですが、Excel VBAでは一生使わないと思います。Accessの単体化させるときに、使うぐらいではないかと思います。
scrrun.dll →Scripting Runtime → FileSystemObject
です。
それと、
https://www.moug.net/tech/acvba/0090005.html
Access VBAをご覧になったかとは思うのですが、
>Call ReplaceFromFile("C:\default.txt", "C1", "A1")
VBAやVBというのは、本来、こうした関数型プログラムではありませんから、このようには書かないほうがよいでしょう。Access の場合は、もともとが、関数型で書くようなスタイルになっているので、このようなスタイルにならざるを得ないのです。
以下のマクロは、ファイルの取り扱いの制限があったと思います。理論上は、2G 程度までですが、その10分の1ぐらいが安全で使える限度かもしれません。
Range("C1", Cells(Rows.Count, 3).End(xlUp))
は、C1 からずっと間を入れずにデータを入れます。C列が検索値で、A列が置換値です。同じ行のA列を参照しています。
FName = ThisWorkbook.Path & "\" & "Default.txt"
ThisWorkbook.Path は、実体がないファイル(保存前)では、取れません。一旦、マクロ入りブックを保存し、そのブックと同じフォルダの中のテキストファイルを探すように出来ています。
.CreateTextFile(NewFile, True, True) 'File名, True=上書きOK, True/False=Unicode/s_jis
'//--------
Option Explicit
Sub TestMacro1() '←ボタンに変えてください。
Dim FName As String
Dim NewFile As String
Dim myAllTxt As Variant
Dim Fn As String
Dim c As Range
FName = ThisWorkbook.Path & "\" & "Default.txt"
NewFile = ThisWorkbook.Path & "\" & "Shinki.txt"
If Dir(FName) = "" Then
MsgBox "ファイルがありません。", vbExclamation
Exit Sub
End If
With CreateObject("Scripting.FileSystemObject")
With .GetFile(FName).OpenAsTextStream
myAllTxt = .ReadAll
.Close
End With
For Each c In Range("C1", Cells(Rows.Count, 3).End(xlUp))
If Trim(c.Value) <> "" Then
myAllTxt = Replace(myAllTxt, c.Value, c.Offset(, -2).Value)
End If
Next c
If Dir(NewFile) <> "" Then
Kill NewFile
End If
With .CreateTextFile(NewFile, True, True) 'True=上書きOK
Fn = Dir(NewFile)
If Fn = "" Then
MsgBox "新規ファイル作成に失敗しました。", vbCritical
Exit Sub
End If
.Write myAllTxt
.Close
End With
End With
Beep
End Sub
'//
仕事では、できるかぎり、VBAはしないほうがよいかと思います。変な期待されても、できるものではありませんから。私だけかもしれませんが。
No.3
- 回答日時:
>References.AddFromFile "C:\Windows\system32\scrrun.dll"
使いたいのはわかりますが、VBAレベルではかなり上級ですよね。
これからVBA講座を受けられても、この内容までは出てこないと思います。
一案ですが
default.txt が固定した内容であれば
新しいシートのコピーしておく。
C1,C2,C3の部分をActiveSheetのA1、A2、A3に置き換えるマクロを考える。
置き換えたシートをTxtの形式で保存してみて
ご希望のシートにならないか試してみる。
これで良ければ、ほとんどがマクロの記録で出来ると思います。
もし、default.txtが時に変更があり場合は別途
default.txtのシートへの貼付けのボタンを別途準備するなどが
考えられます。
講座のなかでも、初歩の部分で出来ると思います。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_04.png?5a7ff87)
No.1
- 回答日時:
操作は以下のようになります。
default.txtをエクセルで開き、ワークシートに並べる
(C1, C2, C3)を別シートの(A1, A2, A3)に置換する。
ファイルを保存し閉じる
default.txtを開く際に、区切り文字を指定する必要があります。例えばCSVファイルならカンマ「,」です。スペースとかタブとかあります。ここではカンマにします。置換したいデータのあるシートをアクティブにした状態でマクロ起動して下さい。
Sub myReplace()
Dim ws As Worksheet
Set ws = ActiveSheet
Workbooks.OpenText Filename:=ThisWorkbook.Path & "\default.txt", comma:=True
Cells(1, "C").Value = ws.Cells(1, "A").Value
Cells(2, "C").Value = ws.Cells(2, "A").Value
Cells(3, "C").Value = ws.Cells(3, "A").Value
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\default.txt", FileFormat:=xlCSV
ActiveWorkbook.close savechanges:=False
Application.DisplayAlerts = True
End Sub
期限があるから急ぐ気持ちは分りますが、内容理解して下さいね。マクロは配布した後が忙しくなるのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/02/05 09:55
- Excel(エクセル) ExcelVBA メモ帳を起動し名前を付けて指定フォルダに保存 2 2022/04/18 13:15
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- その他(プログラミング・Web制作) ファイル名の一部をbatで変更したい batファイルを使って、以下のようにファイル名の一部を変更した 3 2023/02/21 20:09
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) エクセルVBAでメールの自動作成の モジュールを作ったのですが、txtファイルから読み込んだ本文が文 2 2022/07/20 15:01
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
拡張子を元に戻す
-
.txtではなく.logの方が良いの...
-
多数のサブディレクトリ内のフ...
-
COPYコマンドで結合すると余計...
-
wikiでローカルファイルのリン...
-
Windowsのバッチファイルを利用...
-
バッチファイルからVBAに引数を...
-
psqlでエラーログをとりたい
-
バッチファイル 複数ファイル...
-
エクセルの各セルの内容をそれ...
-
特定の文字を含まないファイル...
-
VBAで困ってます
-
FTPのコマンド「mput」について
-
コマンドプロンプトでのディレ...
-
テキスト(txt)→ワード(docx)へ...
-
テキストファイルで提出とは?
-
MATLABで行列を配列に格納する方法
-
ファイルを処理中に次の処理に...
-
フォルダ階層のあるzipファイル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
.txtではなく.logの方が良いの...
-
拡張子を元に戻す
-
多数のサブディレクトリ内のフ...
-
COPYコマンドで結合すると余計...
-
forfilesで検索したファイルを...
-
テキストファイルのファイル名...
-
テキストファイルで提出とは?
-
ファイルの最後に文字列挿入
-
バッチファイル 複数ファイル...
-
Windowsのバッチファイルを利用...
-
バッチファイルからVBAに引数を...
-
psqlでエラーログをとりたい
-
renameコマンドについて
-
VBAでエクセルをtxtに変換する...
-
バッチファイルで文字列削除に...
-
cshでファイルサイズ取得
-
テキスト(txt)→ワード(docx)へ...
-
ファイル内容の修正、行削除に...
おすすめ情報