• ベストアンサー

Excel+VBAでフランス語を扱いたいのですが・・・

Excel 2002+VBAで、Excelシート上にフランス語で入力してもらった内容をテキストファイルに書き出す処理をしようと思っています。 ところが、VBAで range("A1").value とすると、セディーユなどの区分符号が正しく表示されません。 例えば、Francaisなどが正しく出ません。 (セディーユが正しく出せないようなので、ここに正しい単語も書けません) どうにかして、区分符号を含めた正しい文字をVBAで取得することができないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 >range("A1").value >とすると、セディーユなどの区分符号が正しく表示されません。 見えないだけです。たとえば、UserForm など、独立させた TextBox では見えたはずです。 テキストファイルに書き出すなら、単に、名前を付けて保存で、[Unicode テキスト]出力すれば、それで出来るはずです。あえて、VBAということもないとは思いますが、もし行うなら、 以下を使います。 CreateTextFile ([in] Name, [in] OverWrite, [in] Unicode) OverWriteがTrue で上書き Unicodeの引数をTrue 例: Set FS = CreateObject("Scripting.FileSystemObject") Set txf = FS.CreateTextFile(filename, True, True) txf.Write (script_text) txf.Close 参考:

参考URL:
http://homepage2.nifty.com/pasocon/nyumon/filesystemobject/createtextfile.html
katsu2000x
質問者

お礼

なるほど、MsgBox等では正しく見えてないのですが、実際はちゃんとした文字を持っていたのですね。 教えていただいたやり方だとエンコードがUTF-16になってしまうので、別のUTF-8で出力できるクラスモジュールを使って出力することにしました。 ただ、考え方としては非常に参考になりました。 ありがとうございました。

関連するQ&A

  • VBAでEXCELから固定長のテキストデータにしたい

    VBAにてEXCELに展開されたデータを固定長のテキストデータに落としたい。 EXCEL側の用件 (1)シート1にボタンを用意して、ボタンをクリックしたらテキストファイルを作成する処理にしたい。 (2)シート2にデータが展開されている。 列は10個程度、行は場合によりけり(MAX65536?) 固定長にする箇所とかはわかるのですが、ボタンクリックしたらシート2を見て、セル(もしくはrange)をどのように取得すればいいのかVBAがよくわからないのです。

  • excel2000のVBAについて

    excel2000でコマンドボタン(command1)をclickすると VBAの command1_click関数の処理をするという マクロをVBAで作成したいのですが、 (1)excelシート上にコマンドボタンの作成方法 を教えてください

  • Word vbaからexcel vbaへ値を渡すことができますか?

    Word vbaからexcel vbaへ値を渡すことができますか? 現在Wordでvbaを組んでいますが、Wordで取得した値をexcel vbaで利用したいのに変数の値がnullになってしまい四苦八苦しています。Application間で値を渡すには何か特別な処理がいるのでしょうか?(参照は設定済みです) やりたい事は、Wordで「ShipTo」文字列をsearch→後ろの番号を変数へ格納→excel vbaを起動→シートの表中からWordで取得した番号を元に文字列を検索しセルに入れる(VLOOKUPを使用)→セルの文字列をWord vbaへ返しWord側で利用、という処理です。excel vbaの起動は以下のように記述しています。 ------------------excelVBAの起動 Sub getExcelTable() Dim xLobj As Object, myObj As Object Set xLobj = CreateObject("excel.application") xLobj.Visible = True Set myObj = xLobj: workbooks.Open (ThisDocument.Path & "\sample.xls") myObj.Run ("'sample.xls'!getStr") MsgBox strA ←これがでない MsgBox strB ←これがでない Set xLobj = Nothing End Sub -----------------excel vbaのコード Option Explicit Dim endRow As Integer, ShipTo As Variant Dim strA As Variant, strB As Variant Sub getStr() endRow = Range("a65536").End(xlUp).Row MsgBox ShipTo ←これがでない Cells(endRow + 2, 1).Select Selection.Value = "=VLOOKUP(" & ShipTo & ",$A$1:$T$" & endRow & ",3,0)" strA = ActiveCell.Text Cells(endRow + 2, 2).Select Selection.Value = "=VLOOKUP(" & ShipTo & ",$A$1:$T$" & endRow & ",13,0)" strB = ActiveCell.Text End Sub Word vbaからexcel vbaは起動します。Word側、excel側で使う関数はグローバル変数にし、variant型にしてみましたが値がわたりません(Wordでは取得できています)。Application間で値を渡す方法、もしくは根本的にもっとうまい方法があればご教示ください! WinXP、Office2003を使用です。

  • Excel2013にしたらVBAがすごく重くなった

    会社のPCがExcel2010からExcel2013に変更されたのですが、Excel2010の環境で作成していたVBAマクロの処理がもの凄く遅くなってしまいました。 Excel2010では10秒ほど待てば終わった処理が30分以上かかるようになってしまい、業務効率を上げるために作ったVBAが逆に非効率になってしまい困っております。 (フリーズしたような感じになりますが、長時間までは処理は終わり、エラーは出ておりません) Excel2013で重くなった箇所を調べていたら、下記コード部分の繰返し処理で重くなっているのが分かりました。 処理の概要は、「全体」シートの指定列の最終行のセルから指定された番号(12345)があるか1行ずつ調べていき、ヒットしたらその行を全体を切取り、「●●」シートの最終行に貼り付けていく単純なものです。 「全体」シート行数は8000~10000行あります。 ・重くなっている処理の箇所 ================================== Application.ScreenUpdating = False ActiveWorkbook.Worksheets("全体").Activate LastRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To LastRow If Cells(i, 5).Value Like "12345" Then Rows(i).Cut Sheets("●●").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) End If Next i ================================== Excel2010で問題のなかった処理がExcel2013になって途端に重くなった原因自体も分かりませんが、問題点の回避方法や処理速度を改善する方法はありませんでしょうか。 よろしくお願いいたします。

  • Excel2002VBAを使って集計値を自動入力

    Excel2002を使用しています。 コード  件数  区分 201    1    1 202    2    3 201    1    5 201    2    2 202    1    4 203    4    1 201    2    1 202    3    5 sheet1に“コード”をセルA1とする上記のような リストがあるとして、sheet2のセルA1に コード201の区分1と2の件数の計5と コード202の区分3と4の件数の計3の合計8を Excel2002VBAを使って自動入力したいのですが 書き方が思いつきません。 ご教授よろしくお願いします。

  • Excel2002VBA「~のときは○○、そうではないときは何もしない」

    VBA初心者です。環境は、Excel2002で、Windows2000です。 VBAで、下記のようにしたいのですが、どうしてもいい方法を思いつきません。 どなたか、ご指導願います。 マクロ実行時にSheet2があるときは、Sheet2を削除。 ただし、ないときには何もしないで、次の処理へとぶ。 On Error GoTo を利用するのでしょうか? けれど、エラー処理へとんだ場合、どう処理したらいいのか分かりません。 どうぞよろしくお願いします。

  • Excel2000とExcel2002のVBAの違いについて。

     以前、このカテゴリーにて、Excel2000におけるVBAのマクロを教えてもらったのですが、そのマクロ入力済みエクセルファイルをExcel2002へ移植したら、上手くVBAが働きません。  具体的にいうと、シート1に入力したデータの履歴を、シート2にて保存していくマクロなのですが、Excel2002では履歴のシートに上書きしていくことがあります。(たまに発生する)  Excel2000ではキチンと履歴のセルが全て残ります。  どなたか、この不具合を認識しておられる方。もしくは、対策をご存知の方がいらっしゃいましたら、教えてください。  

  • 【Excel VBA】ユーザーフォームについて

    Excel2003を使用しています。 Sheet1のある範囲のデータをSheet2に(アクティブセルに)コピーするというマクロを作成しました。 データをコピーする際、範囲中のいくつかのセル(2~3箇所ですが)のデータを書き換えて、コピーするときもあるため、変更箇所がある場合は入力モード等の関係もあるので、ユーザーフォームを使って、書き換えるようにしました。 コピー元の範囲を変えただけの同じようなマクロが複数あるのですが、テキストボックスやコンボボックスに入力されたデータをシートへ転記する際のセルの位置が変わるだけなので、ひとつのユーザーフォームを使いまわしというと変ですが、そのようなことはできないのかなと思い、質問させていただきました。 -------------------------------------------------------------- Private Sub CommandButton1_Click()   Range("F371").Value = TextBox1.Text   Range("N371").Value = ComboBox1.Text   Unload Me End Sub 上記コードは、ユーザーフォームのコードの一部ですが、 Range("F371").Value = TextBox.1Text      ↓ Range("F397").Value = TextBox.1Text のように、転記先のセルだけ変わればいいので、そのために、同じユーザーフォームをいくつも作るのも…と思った次第です。使いまわしのようなことはできなければ、コピーして作成しようと思っています。 うまく文章に表すことができなくて申し訳ないのですが、よろしくお願いします。

  • Excel2007 VBAでいくつか質問

    Excel2007 VBAでいくつか質問 お世話になります、 本来ならこんなタイトルではいけないのでしょうが、 お許しください。 さて、 いくつかの質問にお付き合いください。 一、サブルーティンやファンクションなどの引数で取得したレンジが、どのシートにあるか レンジ引き渡し時に指定がある場合 シート名を取得する方法ってありますか? 一、これって駄目なんですか? (※:変数宣言などはされているものとします) tempranges2=Application.WorksheetFunction.MIN(INDEX((Sheet2!A2:N33<>"")*COLUMN(Sheet2!A2:N33)+(Sheet2!A2:N33="")*900000,,)) 一、これって何処が駄目なんですか? dim My_ranges As range My_ranges=sheets(1).range(cells(1,1),cells(30,30)) 宜しくお願い致します。

  • VBAで別のExcelブックのボタンのマクロ登録

    Excelブック1とExcelブック2があります。 Excelブック1はVBAで 1)Excelブック2を開いて 2)Excelブック1のワークシート(Sheet1)と  モジュールシート(Module1)を  Excelブック2にコピーします。 3)ワークシート(Sheet1)にはコントロール(ボタン)が貼り付けてあって  このボタンをクリックするとモジュールシート(Module1)の中の  Excute_Button()というプロシージャ(マクロ)を呼び出すため  Excelブック1のVBAで  wb.Worksheets("Sheet1").Shapes.Range(Array("Button 1")).Select  Selection.OnAction = "Excute_Button"  と記述してボタンのマクロの登録をします。   (wbはExcelブック2を指しています) 4)Excelブック2を保存して閉じる。 という処理をしています。 この後、Excelブック1を閉じて、 Excelブック2を開いてワークシート(Sheet1)のボタンをクリックすると Excelブック1が開いてしまいます。 Excelブック2のボタンのマクロの登録のマクロ名を見てみると Excelブック1のファイル名!Excute_Button となっています。 Excelブック1のVBAで、ここを単にExcute_Buttonだけにするには どのようにすればよいでしょうか。

専門家に質問してみよう