EXCEL VBAの質問です。

EXCELのシートに文字データがあります。
それをコピーしてnotepadに貼り付けて
名前をつけて保存までを自動化したいのです。
Shellを使うような記述をWEB上で見つけましたがうまくいきません。
EXCEL2000をXPHOMEで使用しています。

サンプルコードをお教えください。
URLは不要です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/02/07 12:23:14
  • 終了:--

回答(8件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982005/02/07 12:29:32

ポイント10pt

http://www.hatena.ne.jp/1107746594#

人力検索はてな - EXCEL VBAの質問です。 EXCELのシートに文字データがあります。 それをコピーしてnotepadに貼り付けて 名前をつけて保存までを自動化したいのです。 Shellを使うような記述..

ただ単にテキストファイルに出力ということでいいのでしょうか?

dim a as string

dim ifno as integer

a=Range(”A1”)

ifno = FreeFile

Open ”file.txt” For output As #ifno

Print #ifno,a

close #ifno

こんな感じで どうでしょうか?

id:okamotona

勉強になりました。

確かに動作しました。

追加です。これから回答いただける方は、

ある範囲(例えばセルのA1〜A30)までを

吐き出すコードをお教えください。

2005/02/07 12:35:57
id:taknt No.2

きゃづみぃ回答回数13539ベストアンサー獲得回数11982005/02/07 12:42:42

ポイント10pt

>ある範囲(例えばセルのA1〜A30)までを

a=Range(”A1”)

a=Range(”A1:A30”)

とすれば、A1からA30までとなります。

となりの列との区切りは タブとなります。

この場合は、行が違うだけなので 改行になりますが、タブを カンマにするなどしたい場合は

Replace関数を使ったらいいでしょう。

id:okamotona

うーむ 型が一致しませんと怒られちゃいました。

何か私がまずいことをしているような・・・

もう少し回答をお待ちしております。

2005/02/07 12:54:23
id:hawkplume No.3

hawkplume回答回数2ベストアンサー獲得回数02005/02/07 15:46:15

ポイント5pt

dim a as string

Dim a As Range

と変更して、

Print #ifno,a

の箇所を

Dim y As Integer

Dim x As Integer

For y = 1 To a.Rows.Count

For x = 1 To a.Columns.Count

Print #ifno, a.Cells(y, x);

If x <> a.Columns.Count Then

Print #ifno, ”,”;

End If

Next x

Print #ifno, ””

Next y

に修正、でどうでしょう?

かなりベタな方法ですが。

区切文字をタブにしたい場合は、

Print #ifno, ”,”;

の箇所を

Print #ifno, Chr(9);

に修正すれば、タブ区切となるかと。

id:okamotona

よくわかりません(涙)

私の勉強不足です。

2005/02/08 11:37:49
id:SigZ No.4

SigZ回答回数29ベストアンサー獲得回数02005/02/07 17:24:36

ポイント5pt

http://www.f3.dion.ne.jp/~element/msaccess/AcTipsGnrlHowToAttach...

外部テキストファイルとの接続方法

shellでnotepadを開いても、保存するところまでは自動化できないので、おおよそはtakntさんの回答でいいと思います。ただ、printステートメントで書き込むオブジェクトは String じゃなくちゃ駄目じゃないんですかね。>型不一致

ということでサンプルです。

Sub SaveRangeText()

Dim MyRange As Range

Dim FileNumber As Integer

Dim Text As String

Dim FileName As String

Range(”A1:A30”).Select

For Each MyRange In Selection

Text = Text & CStr(MyRange.Value) & Chr(13) & Chr(10)

Next

FileName = ”sample.txt”

ifno = FreeFile

Open FileName For Output As #FileNumber

Print #FileNumber, Text

Close #FileNumber

End Sub

って感じじゃどうでしょうね。

id:okamotona

ファイル名が又は番号が不正です

と怒られちゃいました

2005/02/08 11:40:20
id:rinkan7 No.5

rinkan7回答回数4ベストアンサー獲得回数02005/02/07 18:05:19

ポイント10pt

こんな感じでいかがですか?

Sub aaa()

Dim a As String

Dim ifno As Integer

Dim cnt As Integer

ifno = FreeFile

Open ”c:¥file.txt” For Output As #ifno

For cnt = 1 To 30

a = Range(”A” & cnt)

Print #ifno, a

Next cnt

Close #ifno

End Sub

id:okamotona

エラーは出ませんがファイルが作成できません。

なぜでしょうか

2005/02/08 11:45:03
id:beatgoeson No.6

beatgoeson回答回数128ベストアンサー獲得回数142005/02/08 09:42:03

ポイント30pt

http://www.hatena.ne.jp/1107746594

人力検索はてな - EXCEL VBAの質問です。 EXCELのシートに文字データがあります。 それをコピーしてnotepadに貼り付けて 名前をつけて保存までを自動化したいのです。 Shellを使うような記述..

私のとこでもRangeが複数セルにまたがるとだめだったので以下ではいかがですか?

Dim myRange As Range

Dim a As String

Dim ifno As Integer

Dim sRow As Long

Dim sCol As Long

Dim eRow As Long

Dim eCol As Long

Dim i As Long

Dim j As Long

Set myRange = Range(”A1:C2”)

sRow = myRange.Row

sCol = myRange.Column

eRow = myRange.Rows(myRange.Rows.Count).Row

eCol = myRange.Columns(myRange.Columns.Count).Column

For i = sRow To eRow

For j = sCol To eCol

a = a & Cells(i, j) & vbTab

Next j

a = a & vbCrLf

Next i

Debug.Print a

ifno = FreeFile

Open ”c:¥file.txt” For Output As #ifno

Print #ifno, a

Close #ifno

id:okamotona

回答者の皆様の所ではファイルが出来ていると思います。しかしなぜか私のところでは出来ません。

うーむ

2005/02/08 11:48:19
id:masahiror No.7

masahiror回答回数30ベストアンサー獲得回数12005/02/08 12:21:35

ポイント10pt

  シート全体を保存したいなら

ActiveWorkbook.SaveAs Filename:= _

”C:¥test.txt”, FileFormat:=xlCSV, _

CreateBackup:=False

というのはどうですか?

id:okamotona

これもいいかもしれません。

2005/02/09 10:30:20
id:beatgoeson No.8

beatgoeson回答回数128ベストアンサー獲得回数142005/02/08 14:10:43

ポイント30pt

最初の回答者の時は、ファイルは作成されたんですよね。

私の回答は、c:¥file.txt としてるので最初の回答者とは違うフォルダに作成されてると思うのですが。

C:¥ に本当に出来てないですか?

id:okamotona

全角の¥がネックでした!

半角にすると出来ました。beatgoesonさんの回答が一番すっきりしました。感謝。

2005/02/09 10:34:03
  • id:taknt
    クリップボード経由ってのは

    どうでした?
  • id:okamotona
    Re:クリップボード経由ってのは

    >どうでした?
    すみません。よくわかりません。ごめんなさい。
  • id:taknt
    Re(2):クリップボード経由ってのは

    >>どうでした?
    >すみません。よくわかりません。ごめんなさい。

    dim a as string
    dim ifno as integer
    Dim Odata As DataObject

    Set Odata = New DataObject
    Range(”A1:A30”).Copy
    Odata.GetFromClipboard
    a = Odata.GetText
    a=replace(a,vbtab,”,”)

    ifno = FreeFile
    Open ”file.txt” For output As #ifno

    Print #ifno,a
    close #ifno

    ということです。
    Excelのバージョンが 97とかだと Replace関数が 使えません。
  • id:okamotona
    Re(3):クリップボード経由ってのは

    コンパイルエラーが出ました
    Odata と言うのが引っかかるみたいです。
    いわしまで付き合っていただいてすみません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません