• ベストアンサー

VBAで2変数の差分を取る方法

fumufumu_2006の回答

  • ベストアンサー
回答No.6

追加分の場合を少し変更 Sub test() Dim fso As New FileSystemObject Dim file1 As String Dim file2 As String Dim size1 As Long Dim buf As String file1 = "C:\file1.txt" '旧ファイル file2 = "C:\file2.txt" '新ファイル '旧ファイルのサイズ(文字数、バイト数ではない)を取得 With fso.GetFile(file1).OpenAsTextStream size1 = Len(.ReadAll) .Close End With '新ファイル読み込み With fso.GetFile(file2).OpenAsTextStream .Skip size1 '読み込みスキップ buf = .ReadAll '追加分読み込み .Close End With Set fso = Nothing MsgBox buf '配列にするなら、 'Dim d() As String 'd = Split(buf, vbCrLf) End Sub ADODB.Streamを使って、file1を読まない場合 Sub test() Dim strm As New ADODB.Stream Dim fso As New FileSystemObject Dim file1 As String Dim file2 As String Dim size1 As Long Dim buf() As Byte Dim s As String file1 = "C:\file1.txt" file2 = "C:\file2.txt" '新ファイル '旧ファイルのサイズ(バイト数)を取得 size1 = fso.GetFile(file1).Size Set fso = Nothing '新ファイル読み込み With strm 'バイナリで増えた分を読み込み .Open .Type = adTypeBinary .LoadFromFile file2 .Position = size1 buf = .Read(adReadAll) .Close '文字列に変換 .Open .Type = adTypeBinary .Write buf .Position = 0 .Type = adTypeText .Charset = "shift_jis" s = .ReadText(adReadAll) .Close End With set strm = Nothing MsgBox s '配列にするなら、 'Dim d() As String 'd = Split(s, vbCrLf) End Sub

stentemp
質問者

お礼

fumufumuさん、たびたびすみません。 現在の方法でも遅れた時に手動で流れを一時ストップすれば動くことは動くんです。 ただ、それでは不完全なのでお聞きしました。 教えていただいたコードを自分でチェックしながらやってみます。 新回答が次々増えると困るので、一度これで締め切ります。 有り難うございました。

関連するQ&A

  • VBAで2変数の差分を取る方法  その2

    前回はありがとうございました。 まだ最終までは行ってないのですが、Wendyさんfumufumuさんに教えていただいたマクロともうまく動きます。 fumufumuさんの変数bufなんですが、この中身をシートに一行ずつ入れるにはどうするのでしょう。 Msgboxでは行ごとに綺麗に表示されす。 OpenAsTextStreamで開きReadAllで読み込んだbufの中身は配列になっているのでしょうか。 Splitで色々やってみたんですが、旨くいかいなです。 ---------------------------------------------------- Set fso = CreateObject("Scripting.FileSystemObject") With fso.GetFile(TXT).OpenAsTextStream .Skip size buf = .ReadAll .Close End With Set fso = Nothing MsgBox buf ------------------------------------------------------ fumufumuさんのDim fso As New FileSystemObjectでは動かなかったので Set fsoにするなど一部変えてあります。

  • アスタリスクを文字列として変数に入れるには

    HP-UX cshで、アスタリスクを文字列として 変数に入れるにはどうしたら良いでしょうか? 現在は <file3の中身> grep -v file*.txt | grep -v file2.txt で、 set hensu=`cat file3.txt`としてecho $hensuすると grep -v file1.txt file2.txt file3.txt | grep -v file2.txt という具合に、アスタリスクがワイルドカードとして 働きます。これを「file*.txt」という文字列として 変数に入れる方法を教えてください。 宜しくお願いします。

  • sedの置換文字に変数を使用したいのですが・・・

    あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。 例: X="a" Y="b" echo test.txt | sed 's/${X}/${Y/g}' >test.txt sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?

  • Perlのプログラミングについて

    Perlのプログラミングでつまづきました。 # ファイルから指定文字列を含む行を収集する # 入力ファイルのオープンと読み込み print( "入力ファイル名?" ); $n = <STDIN>; chomp( $n ); open( FIN, "<$n" ) or die "入力ファイルオープンエラー: $!\n"; $n = @a = <FIN>; close( FIN ); print( "$n 行読み込みました\n" ); # 行の収集 print( "検索文字列?" ); $x = <STDIN>; chomp( $x ); $ptn = $x; #指定の文字列 $x = @b = grep( /$ptn/, @a ); print( "$x 行見つかりました\n" ); # 出力ファイルのオープンと書き出し print( "出力ファイル名?" ); $y = <STDIN>; chomp( $y ); open( FOUT, ">$y" ) or die "出力ファイルオープンエラー: $!\n"; print FOUT ( $ptn, "\n" ); print FOUT ( $x, "\n" ); print FOUT ( @b ); close( FOUT ); というプログラムで実行すると C:\My Perl\pl>perl プログラムの実行.pl 入力ファイル名?sample1.txt 168 行読み込みました 検索文字列?k 45 行見つかりました 出力ファイル名?out3-24.txt 続行するには何かキーを押してください . . . となり出力ファイルの中身が表示されません。 どこを間違えているのかご指摘いただけないでしょうか?

  • VB テキストファイルから1文字だけ読み込みたい

    1.txtの中身が 01110 10100 であったとします open "1.txt" for input as #1 でファイルを開いて、 dim readin(10) as integer に対して、 readin(0)=0 readin(1)=1 readin(2)=1 ・・・   =1      =0      =1      =0 readin(7)=1 readin(8)=0 readin(9)=0 というように、整数の配列にテキストの中にある0と1を代入したいのですが、どうすればよいのでしょうか。 検索をしても、line input のように行で読み込むものや、項目の間にスペースの区切りが必要なものが出てきます。 テキストの中身をスペースで区切る、もしくはlineinputでバッファ変数に読み込んだあと、leftなどでバッファから読み込むことも出来そうですが、それは最終の手段としておいておいて、 一回の操作で直接1文字のみ読み込む方法があれば教えてください。

  • ファイルから文字を読みとる。

    JAVAを勉強中でファイル入出力で困っているので教えて下さい。 あるファイル(sample.txt)があるとします。 [sample.txt] (0,0) (10,20) このファイルは(x座標,y座標)のフォーマットで1行に1座標が書き込まれているとします。 ここからx座標、y座標をそれぞれ変数x,yに代入することはできるのでしょうか? C言語だと ("%d,%d",&x,&y)のような形でそれぞれ読み書きできたと思うのですが、 while((x_data = input.readLine()) != null){  y_data = input.readLine();  area_data.addElement(new Area(x_data,y_data)); } というかたちで 0 0 10 20 と1行に1文字ずつしか読み書きできません。 ご存じの方は是非教えて下さい。 また、JAVAを勉強するためのおすすめサイト、書籍がありましたら教えて下さい。

  • エクセルでのシート間のデータの移動について

    前回の質問ではこのような回答をしてもらいました。 ------------------------- Sub test() 'TXTファイル読み込みダイアログボックス Dim FileToOpen As String FileToOpen = Application.GetOpenFilename("テキストファイル (*.txt), *.txt") Dim myVal As String Dim x As Integer Dim y As Integer y = 1 '1列目から Open FileToOpen For Input As #1 ' シーケンシャル入力モードで開きます。 Do While Not EOF(1) ' ファイルの終端までループを繰り返します。 x = x + 1 Input #1, myVal Cells(x, y) = myVal If x Mod 20 = 0 Then'20行置きに y = y + 1 '列をずらす x = 1 '行をクリア End If Loop Close #1 ' ファイルを閉じます。 End Sub ------------------------- 今度はこのマクロを利用して同じファイル内のシートAAAにA1からA100までそれがC列まであるとします。 このデータをシートBBBに20行ずつ移したいのです。 わかる方がいましたら教えてください。 よろしくお願いします。

  • 【Ruby】テキスト置換を1ファイル完結にしたい

    memo.txtの中に含まれている"俺の飯"という文字列を"私のごはん"というふうに置換を行いたいのですが、 現在のやり方だとファイルを開いて1行ずつ読み込んで新しいファイルに文字列を書きだしており 読み込んだ際、置換対象の文字列があった場合に置換して書きだしておりますが このやり方だとどうしても新規ファイルを出力しなければいけません。 これを新規ファイルを作らずにmemo.txtの中身だけを書き換えるようにするには どのような処理にすれば良いのでしょうか? 何卒宜しくお願い致します。 ---- sample.rb require 'rubygems' open("memo.txt"){ |f| open("after_memo.txt","w"){ |o| while line = f.gets line.gsub!("俺の飯", "私のごはん") o.puts line end } } -- memo.txt 俺の飯はリーズナブル! 俺の飯美味しそう!

    • ベストアンサー
    • Ruby
  • VBA 文字数の判定

    テキストファイルを1行ずつ読み取り、 100文字を超えている行のみ、新しいテキストファイルまたはexcel行に書き込んでいくという バッチを作成したいと思います。 以下でテキストファイルを1行ずつ読み取ることはできました。 1行ずつ読み取った行に対して、文字数以上の判定の方法を教えてください。 また100文字以上の場合は、別ファイルに書き込んでいく構文も教えていただけますか。 Sub test() Dim buf As String, n As Long Open "パス\a.txt" For Input As #1 Do Until EOF(1) Line Input #1, buf n = n + 1 Cells(n, 1) = buf Loop Close #1 End Sub

  • バッチ処理でファイルの中身を変数に入れるやり方

    あるファイルの中には1行の文字列があります。 このファイルをバッチで読み取り、変数に設定したいです。 例: test.txt abcacbacbacbacbacbacbacbacb test,bat set DATA=[test.txtを読み込んだ値] よろしくお願い致します。