Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


46 / 12976 ツリー ←次へ | 前へ→

【78760】エクセルの指定セルをテキストデータに書き出したい かわかみまめお 17/1/16(月) 21:02 質問[未読]

【78761】Re:エクセルの指定セルをテキストデータに... γ 17/1/17(火) 7:29 発言[未読]
【78764】Re:エクセルの指定セルをテキストデータに... かわかみまめお 17/1/17(火) 19:18 発言[未読]
【78772】Re:エクセルの指定セルをテキストデータに... かわかみまめお 17/1/23(月) 1:10 質問[未読]
【78774】Re:エクセルの指定セルをテキストデータに... γ 17/1/23(月) 7:09 回答[未読]
【78791】Re:エクセルの指定セルをテキストデータに... γ 17/1/24(火) 7:09 回答[未読]
【78792】Re:エクセルの指定セルをテキストデータに... かわかみまめお 17/1/25(水) 0:56 お礼[未読]

【78761】Re:エクセルの指定セルをテキストデータ...
発言  γ  - 17/1/17(火) 7:29 -

引用なし
パスワード
   うーん、
SaveDという文字列変数に
・一行の中の各セルの値を、タブ記号を挟んで連結し、
・行と行の間は改行記号を挟んで連結
しておき、それをまとめてファイルに書き込んでいるわけで、
どのあたりが不明ですか?

タブ記号というのが何かは分かりますか。

「改行」というのがある種の動作とイメージされているのに、
「単に改行記号という文字を連結することである」といった
あたりが理解しにくいのかなあ。

ステップ実行というのは知っていますか?
一行毎に実行して、SaveDにどんな値がセットされるかを
ローカルウインドウで確認してみると実感が湧くと思います。

> ループして最後にprintするのでしょうか。
> 1つのセルごとにprintする必要があるのではないのか、と思いました。
なぜ纏めて書き込むとまずいのでしょうか?
セル毎に書き込むこともできるのでしょうが、
そうしないといけないわけでもありません。

-----------------------
(2)は、
いったん、表示上の一行単位で、
一セルを複数行に分割していくとよいのでしょう。

ただし、あくまで例のようで、
コードを出しても、いやいや実際はこうです、
ということになりそうなので、少し待ちます。
まずは、最初の点に取り組むことから初めて下さい。
それが出来ない限り、二つの目のテーマに取り組んでも無駄ですから。

# 日中はアクセスしませんので、返事を頂いても反応は夜以降になります。

【78764】Re:エクセルの指定セルをテキストデータ...
発言  かわかみまめお  - 17/1/17(火) 19:18 -

引用なし
パスワード
   γ様

お世話になります。
かわかみまめおです。
ご丁寧に御教示ありがとうございます。
あまりに自分が勉強不足でしたので、いただた内容をもう少し自分で勉強致します。
お時間を頂いて、またご質問させていただくことになるかと思いますが、
その際は宜しくお願いいたします。

【78772】Re:エクセルの指定セルをテキストデータ...
質問  かわかみまめお  - 17/1/23(月) 1:10 -

引用なし
パスワード
   γ様、ありがとうございます。
その後、少しずつですが、自分でも調べました。

(1)ステップ実行をして、イミディエイトウインドウを見ながら、
SaveDの変化を確認しました。考えてようやく、理解できました。
(自分では、saveD の値が、AAA、次が、AAAタブBBB 次が、AAAタブBBBタブCCC
と累積していく場合に、前の分を書き込んでからでないと、コンピュータは、忘れてしまうのではないか、という考えがあったもので、このような質問をしてしまいました。)

(2)セルの複数行についても、β様からの御教示もあり「タブに関する、エクセルとwindows の違い」なども参考にしました。今の自分では、ちょっと難しいので、
元のエクセルの雛型を以下のようにしました。
  
      A列                B列
1行目 ファイル名となる文字列(XXX) テキストに書き出す内容(セル内複数行)
2行目 ファイル名となる文字列(YYY) テキストに書き出す内容(セル内複数行)

そして、セルの指定は、複数セルの「範囲」ではなく、セル「B1」しか選ばず、XXXファイルを作成する、ことににしました。そのために、
Print #1, SaveD を
Print #1, Replace(SaveD, vbLf, vbCrLf) へ変更することにより、最低限の目的は達成できました。(次の目標は、「B1:B2」を選んで、一気にXXX とYYYのファイルを作成することです。)

本当にどうもありがとうございました。

(3)γ様、もう一点教えて頂きたいことが出てきました。
今回は、テキストファイルが、カレントフォルダに作成されますが、これを常時、元のエクセルがあるフォルダと同じフォルダ内に作成するためには、どのような構文を書き加えたらよろしいでしょうか。

【78774】Re:エクセルの指定セルをテキストデータ...
回答  γ  - 17/1/23(月) 7:09 -

引用なし
パスワード
   > 元のエクセルがあるフォルダと同じフォルダ内に作成するためには、

そのマクロが記載されているブックのフォルダは
ThisWorkbook.Path
で得られます。

テキストファイルの操作にあたって、
「フォルダ名を付けたファイル名」(フルパス名)を使うことです。
間の"\"を忘れないようにしてください。

【78791】Re:エクセルの指定セルをテキストデータ...
回答  γ  - 17/1/24(火) 7:09 -

引用なし
パスワード
   '左上のセルの値をファイル名にする
  File_name = Cells(Selection.Row, Selection.Column).Value '余り感心しないが
  File_fullpath = ThisWorkbook.Path & "\" & File_name & "_j.txt"
  
'ファイルの読み込みと出力
  '''Open File_name & "_j.txt" For Output As #1
  Open File_fullpath For Output As #1

ということです。(変数宣言の追加は省略しました)

【78792】Re:エクセルの指定セルをテキストデータ...
お礼  かわかみまめお  - 17/1/25(水) 0:56 -

引用なし
パスワード
   γ様

御教示どうもありがとうございます。

1.1つ前のγ様の投稿で頂きましたアドバイスを元に自分で試行錯誤の上、

Open File_name & "_j.txt" For Output As #1

Open ThisWorkbook.Path & "\" & File_name & "_j.txt" For Output As #1

に変更したところ、うまく動きました!


2.しかしながら、今回、γ様の投稿で頂きました、
先に、 
File_fullpath = ThisWorkbook.Path & "\" & File_name & "_j.txt"
としておき、後で、
Open File_fullpath For Output As #1
として使う、という記述方法の方が、今後複雑になったときのことを考えると、
応用も効き、より適切なのだと思いました。

次につなげたいと思います。

お陰様で、今回必要なことが自動できるようになりました。
ご丁寧に、御教示頂きどうも有難うございました。

46 / 12976 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free