エクセルに入力済みの連続したデータを1行単位で以下のような内容でテキストファイルを作成し、
かつテキストファイル名を、セルに入力されている文字を使って保存するマクロを作りたいのですが、
どのようにしたら良いのでしょうか?よろしくお願いします。

*エクセルシート
(ファイル名:aaa.xls シート名:sheet1 エクセルシートがあるフォルダ名:yyy)

_|A |B |C |
1|x |y |z |
2|a1|a2|a3|
3|b1|b2|b3|

*テキストファイル(保存するフォルダ名:zzz)

---テキストファイルの内容(ファイル名:a1.txt)
x
a1

y
a2

z
a3
---
---テキストファイルの内容(ファイル名:b1.txt)
x
b1

y
b2

z
b3
---

エクセルはExcel2000でWindows2000を使用しております。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

このマクロは、そのデータとは関係のない余計なデータが右側セル、下側にあると、誤動作しますので、その点は注意してください。


必ず、<標準モジュール>でお使いください。

'目的のブックのシートを開いたままお使いください。
Sub ColumnOut2Text()
Dim i As Long
Dim j As Long
Dim Fno As Integer
Dim OutColumn As String
'ユーザー設定
  Const myPath As String = "C:\ZZZ\"
 'かならず、最後に\ を入れてください。
'
With Worksheets("Sheet1")
For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
 Fno = FreeFile()
 Open myPath & .Cells(i, 1).Value & ".txt" For Output As #Fno
 For j = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column
  OutColumn = .Cells(1, j).Value & Chr(13) & .Cells(i, j).Value & Chr(13)
  Print #Fno, OutColumn
 Next j
 OutColumn = Empty
 Close #Fno
Next i
End With
 Beep
End Sub
    • good
    • 0
この回答へのお礼

できました!ありがとうございます。

お礼日時:2005/05/10 16:05

#1です。


保存するフォルダの指定がありました。
Dpath="zzz" としてください。
このままだと、Excelファイルのあるパスに保存します。
    • good
    • 0
この回答へのお礼

了解しました。

お礼日時:2005/05/10 16:07

これでどうですか。


Sub テキストファイル出力()

Sheets("sheet1").Select
i = 2
Dpath = ActiveWorkbook.Path
While Cells(i, 1) <> ""
Open Dpath & "\" & Cells(i, 1) & ".txt" For Output As #1
For j = 1 To 3
Print #1, Cells(1, j)
Print #1, Cells(2, j)
Print #1, ""
Next j
Close
i = i + 1
Wend

End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。やってみましたが、何も保存されませんでした。

お礼日時:2005/05/10 16:06

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

Q行と列を入れ替えた式

行と列を入れ替えた式

A=(a b c d)とします。この行列の行と列を入れ替えた行列は(a c b d)らしいんですが、行と列を入れ替えるという意味がよくわかりません
僕は、1行目と1列目を換えて、2行目と2列目を換えると考えました。しかし、その場合は(a b c d)で元に戻ってしまします。
何故、僕の考えでは行と列を入れ替えた行列にならないんでしょうか??

誰か、うまく教えらる人 アドバイスおねがいします

Aベストアンサー

こんばんわ。

行列で「行と列を入れ替える」というのは、
「対角線に沿って線対称に入れ替える」ことになります。
ですので、対角線上(左上から右下)の成分は変わりません。

2×2行列において
左上を(1, 1)、右上を(1, 2)
左下を(2, 1)、右下を(2, 2)

という座標もどきに表すことにして、行と列の数字を入れ替えることを考えます。
これが「行と列を入れ替える」の本当の意味です。

すると、対角成分は入れ替えても元の場所を指しています。
大学数学ではこれを「転置」と呼びます。

2×2行列では様子がわかりにくいので、3×3行列での転置の様子を合わせて添付しておきます。

Q=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $

いつもお世話になってます。
以下の関数式について、お時間がありましたらどうぞご教示ください。

=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $12,2,FALSE))

「シート2の範囲指定した表にA1セルの値と同じ値の右隣になる値を返せ。ただし該当なき場合は空白とせよ。」

純粋になんでこのような構文になるのかが解りません。

1.ISNAってそもそもなんでしょう?
2.同じ式を繰り返すのはなぜ?
(模範式で、このように同じ式を繰り返す構文があまり無いように思えたのです。)

・参考となる他所のページがあれば教えて下さい。
・素人です。お手柔らかにお願いします。

(エクセル2003)

Aベストアンサー

1.ISNAってそもそもなんでしょう?
ISで始まる情報関数の一つで、#N/A!エラーのみを判定する関数
結果はTRUE(真),FALSE(偽)のいずれかになります。
エラー判定のIS関数には他に
ISERR:#N/A!を除くすべてのエラーを判定する関数
ISERROR:すべてのエラーを判定する関数
があります。

2.同じ式を繰り返すのはなぜ?
ISNAの判定する値がセルでなく数式の結果だからです。
A2=VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)
なら
A3=IF(ISNA(A2),"",A2)
ということになります。A2のように計算の為のセルを省略する為に
=IF(ISNA(数式),"",数式)のように同じ数式を2回繰り返しになってます。

Qエクセルの行と列を入れ替える。

エクセルで、数式を残したまま行と列を入れ替えることはできますか?
行と列を入れ替えると、#REFが出てしまうのですが。

Aベストアンサー

こういうのはどうですか。
例 データ 
Sheet1のA1:C3
143
254
397
A3,B3,C3には
=SUM(A1:A2)のような合計関数が入っていますが、回答には関係ない。
Sheet2 に行って
A1に
=OFFSET(Sheet1!$A$1,COLUMN()-1,ROW()-1)
と入れてA1の式をA3まで複写。
A1:A3を範囲指定し、+ハンドルを出して、C1:C3まで引っ張る。
結果 Sheet2の A1:C3
123
459
347
値だけ並べ替えている。
Sheet1の変動の結果は即時反映します。

Qエクセルについてなのですが、 例えば指定の範囲内に A B B C A B C A B B C D

エクセルについてなのですが、

例えば指定の範囲内に
A B B C A B C A B B C D B D
と並んだセルからAとDの合計を出したい時はどのようにすればいいのですか?

COUNTIFSだったら複数条件を満たした数を表示するので希望とは違います。
希望はA or Dの合計を出したいのです。

Aベストアンサー

こんにちは!

COUNTIFS関数はAND条件になりますので、今回の質問には適しません。

=COUNTIF(範囲,"A")+COUNTIF(範囲,"D")
のように「A」のセル数と「D」のセル数をコツコツと足し算するのが
間違いないと思います。m(_ _)m

Qエクセルデータの列と行を入れ替える方法をご存知の方、教えて下さい。

エクセルデータの列と行を入れ替える方法をご存知の方、教えて下さい。
今、A列(1行目から1,000行目位まで)に日付、B~F列にそれぞれ数値のデータを入れていますが、それを1行目に日付、2~6行目に数値のデータと言うように、いわゆるタテとヨコを入れ替えたいのですが、何か良い方法は無いでしょうか。
1,000日分位のデータがあるため、手で打ち換えるのもちょっと・・・
データは日付列が1列、データ列が5列、数値のみで数式などは入っていませんし、セル結合もしていません。単純に6列×1,000行位のエクセルデータです。
また、入れ替えるのでなく別のシートに入力し直す方法でも、同じシートの未使用スペースにコピーアンドペーストする方法でも構いませんし、(エクセルが何列使えるか知りませんが)1,000列使えないようなら幾つかに分割しても構いません。
ご存知の方がおられましたらよろしくお願いします!

Aベストアンサー

Excel2003の最大列数は、2^8=256 で、2007は 2^14=16,384 ですので、
お使いのバージョンによって、適宜行数を変更する必要がありますが、・・・
下記のような操作で、行と列を変更することができます。
  
1) 入れ替えるセル範囲を選択して「コピー」します。
2) 新しいSheetを開いて、右クリックから「形式を選択して貼り付け」→「行列を入れ替える」にチェックを入れて「OK」を押します。
  
「Excelで表の行と列の入れ替え」
http://shikaku.biglobe.ne.jp/pc_technic/excel/03_1.html
  
下記URLのページのような方法もあります。
  
「行と列を入れ替えたい時は(行列を入れ替える)」
http://blog.goo.ne.jp/office2007/e/4bd8aef879c510d0c9dea43cf75433e0

QSUMPRODUCT($A$1:$A$10,$B$1:$B$10)とSUMPRODUCT($A$1:$A$10*$B$1:$B$10)

エクセルのSUMPRODUCT関数についてお尋ねします。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)
の違いは何でしょうか?
両者とも同じ答えを返しますが、いろいろ試したところ、前者は範囲内に文字列があってもそれを無視して計算し、後者は文字列があればエラーになるようですが、その理解で正しいでしょうか?
正しいとすれば、なぜでしょうか?

Aベストアンサー

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算するように出来ています。最初、SUM関数に対し、そのように作られました。プログラムとしては、初歩的なものですが、そのアイデアは、今日まで、踏襲しているようです。このオリジナルの仕組みを考えたのは、VisiCalc の開発者、ブルックリン氏です。昔々、本で読んだことがあります。 PRODUCT関数とも共通です。3つの関数は、同じような仕様を持っています。

こちらが、本来の使い方です。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

つまり、
$A$1:$A$10 と $B$1:$B$10 の値を別々に取得しています。

では、
=SUMPRODUCT($A$1:$A$10,$B$1:$B$11)

とすると、なぜ、エラーが出るかというと、$B$11 に対応する数値が、NULL値(有効な値がない)だからです。それは、全体に反映させてしまいます。(理由は分かると思いますが、プログラムが途中で、エラーで止まってしまうからです)

ところが、こちらは、

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)

$A$1:$A$10*$B$1:$B$10 は、分割出来ません。したがって、この数式の中でのエラーは、そのまま、元の数式に反映されます。

ご自分で、ユーザー定義関数を作ってみれば分かります。VBAでも、同じように作ることが可能です。一度、試してみるとよいです。

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算...続きを読む

QExcel で 行 と 列を入れ替えるには

Excelで 行 列 を入れ替えるにはどの様にすればいいでしょうか?
 10行 10列 の行列を順番も換えず入れ替えたのですが
どの様にすればいいのでしょうか?
 よろしくお願いします。

Aベストアンサー

入れ替えたい範囲を選択して"コピー"
"形式を選択して張り付け"で「行列を入れ替える」にチェックをつけて"OK"
で出来ます。

Q「赤黒白」を→|○|○|-|○| などと分けたい

オフィス系ソフトの超初心者です。(wikiの編集に使っています)
使っているのはLibre Office(Open Office系)です。
表の編集作業中です。

以前もお世話になったのですが、再びお知恵をお借りしたいです。

現状、A列に品名、B列にはその色が記載してあります。
例えば、A1の品に赤色、黒色、白色の3種類がある場合、B1には「赤黒白」と記載されています。
これを、赤色があればC1に「○」、黒色があればD1に「○」といったように各列に分け、丸印の有無で見分けられるようにしたいのです。

関数の内、分類項目が「文字列」のものを一通り見たのですが、これといって良い方法を思いつきません。
何か良い方法はないでしょうか?

Aベストアンサー

IF関数、ISERROR関数、FIND関数の3つの関数を使います


IF関数は条件式の真偽を判断する関数
=IF(条件式,真の場合,偽の場合)

ISERROR関数は、その式がエラーとなるか調べる関数
=ISERROR(テスト対象)

FIND関数は、セルに特定の文字列が含まれている場合に、その位置を返す関数
=FIND(検索対象文字,対象セル)

質問でやりたいことは、条件式に特定の文字列が含まれている場合に、そのセルに○か×を返したいのですから、
=IF(ISERROR(FIND("検索したい色",B1))=FALSE,"○","×")
と入力すればOKです

QExcel の行と列の入れ替え

Mac 版のExcel (2008) について質問です。
旧バージョンでは行と列の入れ替えは「形式を選択してペースト」をすれば出来たのですが、2008 のバージョンではそれが出来なくなっています。
このExcel 2008 での行と列の入れ替えをする方法を教えてください。

Aベストアンサー

>何回か試してみましたが、その都度「行列を入れ替える」のチェックボックスの有るぱねると、無いパネルが出ることがあります。

それはオブジェクトペーストの形式を問うパネルではないでしょうか?直前にExcelのセルをコピーしなければ、そちらの形式のパネルが出てきてしまいます。Excelのセルをコピーした後「形式を選択してペースト」を選べば必ず「行列を入れ替える」が選択できると思うのですが、確認お願いします。

Qエクセル:AとBが同じ値であるのに、A-Bはゼロではない??

excel2003です。

Aのセルの時刻と、Bのセルの時刻が同じであれば、Cのセルが 0(ゼロ)になるようにしようと試みました。
たとえば、Aが「9:30」、Bも「9:30」のとき、
A - B = C。これで、Cはゼロになるはずだと考えました。
シートのオプションでゼロを表示しないように設定しました。これで、上記の条件であれば、Cのセルは見た目空白になるはずです。

ところが、Cのセルには「#####」が表示されてしまいます。列幅の問題ではなく、負の時刻と認識しているようです。
実際にはA・Bのセルには、直接時刻を入力しているのではなく、数式が入っているのですが、A・Bの値のみを別セルにコピペして引き算した場合、結果はちゃんとゼロになります。
何故でしょうか??Cが「#####」になってしまう理由として、どういうケースが考えられますでしょうか?

実は問題は一応解決していて、Cのセルには下記の式を入れました:
=if(A=B,0,A-B)

問題は解決したのですが全然納得できません。

Aベストアンサー

パソコン内部の処理では有効桁数の関係で、見た目が同じ値でも
小数点以下の深いところで微妙に数値が異なっていることがあります。
if関数で等しいかどうかを判定する場合は、有効桁数を考慮の上
判定をしてくれるわけですが、引き算を行うと微妙にゴミが残ってしまうことがあります。
これも有効桁数で処理はしてくれるものの、Excelでは時間に負の数を認めていませんので、
ゴミが負になった瞬間、このようなエラーが出ることがあります。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング