アプリ版:「スタンプのみでお礼する」機能のリリースについて

仕事で使うためのマクロを作成しているところです。

1.エクセルで作成したデータ(A列に何百行も入っています。1行目から最終行まで空白セルはありません)を上から20行コピー
2.メモ帳を起動して貼り付け
3.Cドライブの直下に『1.txt』として保存し、メモ帳を閉じる
4.1.でコピーした次の行から20行コピー
5.メモ帳を起動して貼り付け
6.Cドライブの直下に『2.txt』として保存

・・・と言うように繰り返していきたいのですがどうしたらいいのかわかりません。
色々調べると一つ一つの工程のマクロは見つけられるのですが、
理屈がわからない状態なので「こんな感じかな?」とそれぞれをつなげてもさっぱり動いてくれません。
どなたか上記の一連のマクロのやり方を教えては頂けないでしょうか?
また、できましたらどういう理由からそうなるのかも教えていただきたいと思います。
(仕事上、期限があるのでそう時間はないのですが、
勉強のためにその理屈から自力で作成したものと頂いた回答の答え合わせができたらなぁ。と考えております。)
わがままな要望で大変申し訳ありませんが、よろしくお願いします。

A 回答 (3件)

Sub Macro5()


Dim sht As Worksheet
Dim cnt, idx As Long
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  Set sht = ActiveSheet
  On Error GoTo end0
  For idx = 1 To sht.Range("A65536").End(xlUp).Row Step 20
    cnt = cnt + 1
    ActiveSheet.Cells(idx, "A").Resize(20, 1).Copy
    Workbooks.Add
    ActiveSheet.Paste
    ActiveWorkbook.SaveAs Filename:="Z:\" & cnt & ".txt", _
      FileFormat:=xlText, CreateBackup:=False
    ActiveWorkbook.Close
  Next idx
end0:
  Application.DisplayAlerts = True
  Application.ScreenUpdating = True
End Sub

自作のマクロを掲載するならともかく、それをしないで注文ばかりされるのはいかがなものかと…

この回答への補足

アドバイスありがとうございます。
こういった場合、自作のマクロを掲載した方がいいのですね。
すみませんでした。

質問では「何百行」としていますが、とりあえずテスト的に60行のデータをメモ帳3つに保存させるために作ったマクロを掲載します。
貼り付けをエクセルの別のセルで試したところ正しくできたので、コピーまでは大丈夫なのだと思っています。
メモ帳も起動し保存まで行くのですが、起動するメモ帳は合計で3つでいいのになぜか9つ起動してしまします。
また、下の状態で実行したところ「2.txt」と「3.txt」の2つしか自動で保存されませんでした。
また、ファイル名と中身は昇順になるはずなのになっていませんでした。
(ファイル名が1つ保存されていないせいでしょうか。)

Private Sub Kjtxt()
Dim down, choice
down = Worksheets("Sheet1").Range("a" & Rows.Count).End(xlUp).Row
For choice = 1 To down Step 20
Worksheets("Sheet1").Range("a" & choice & ":" & "a" & choice + 19).Copy

Dim i As Integer
For i = 1 To 3
Dim kidou1
kidou1 = Shell("notepad.exe", 1)
AppActivate ("無題 - メモ帳")
CreateObject("wscript.shell").SendKeys "^v"
CreateObject("wscript.shell").SendKeys "%{f}{a}"
CreateObject("wscript.shell").SendKeys "c:\" & i & ".txt"
CreateObject("wscript.shell").SendKeys "%{S}"
CreateObject("wscript.shell").SendKeys "%{f}{x}"

Next
Next
End Sub

これからアドバイスしていただいたマクロを試してみようと思います。
よろしくお願いします。

補足日時:2007/12/21 11:50
    • good
    • 0

この質問の課題は、質問者には荷が重過ぎるのだと思います。


(1)メモ帳を仲立ちにする方法はメモ帳がVBAのようなものが無いので、貼り付けたり名をつけて保存したりするのが難しい。初心者の思いつきの方法です。SendKeysというもので苦し紛れにできると思うが。
普通オフィス以外のソフトをプログラムで動かそうなんて超ベテラン(プロ)のやることです。
(2)テキストで保存し、そのテキストファイルを20行ずつ読んで、所定の名前をつけたテキストファイルとして書き出す。これを繰り返す。コード自体は簡単な方法もありますが、プログラムの訓練を受けていないと、これも難しいでしょう。
(3)エクセルの20行のセルの値を1行分ずつ読み出して、それの20行分を1つのテキストファイルに書き出すという方法もあります。
(2)では
A.シーケンシャルファイルを読むコード
B.書き出すコード
をWEBで見つけて勉強すること。
C.それに20行ごとに繰り返す制御
(3)では
A.セルの20行の値を読むコード
B。20行ごとの繰り返しする制御構造
C。付随してファイルのCloseやOpenの仕方
などを1つずつ勉強してから、質問すべきです。

この回答への補足

アドバイスありがとうございます。
確かに荷が重いです。。。が、「できません」とは言えないのです。
指示されている方法とは異なったやり方を選択するにしても、
結果は指示されているように出さないといけません。
仕事なので・・・
私が考えているのは(1)です。
指示されていることを素直に実行しようとすると(1)となり、その他の方法が見つけられないので。

頂いたアドバイスできになったのが(3)です。
こちらは(1)とは違うのでしょうか?
「書き出す」と言うことについてもう少し教えていただけないでしょうか?

補足日時:2007/12/21 11:32
    • good
    • 1

そのExcel表をテキスト形式で保管して、テキストファイルを操作したほうが簡単なのでは

この回答への補足

アドバイスありがとうございます。
「テキストファイルを操作」するというのは、手作業で20行ずつ切り分けて保存すると言うことでしょうか?

補足日時:2007/12/21 11:30
    • good
    • 1

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

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