エクセルVBAについて質問です。次のページにあるようなマクロを作ってください。

http://hatena88.web.fc2.com/hatena/newpage2.shtml
長めマクロなので、最初に正解された方に200ポイント、2位以降の方に50ポイント差し上げます。

なお、上記のページで更にいくつかの質問があります。これらに答えてもらうことと、下記のページで回答者4の方がされているような解説を入れてもらうことも有効回答の条件とさせていただきますのでよろしくお願いします。
http://q.hatena.ne.jp/1158311664

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/10/04 05:37:44
  • 終了:2006/10/11 05:40:03

回答(1件)

id:takomaro No.1

takomaro回答回数36ベストアンサー獲得回数02006/10/05 02:18:30

ポイント60pt

以下のマクロを標準モジュールにコピペでできると思います。

ただ、連続的に行うとTXTの内容に挿入されていくので一度作ったファイルは移動するか名前を変更しないとおかしなことになります。

Option Explicit '配列宣言

Dim Y 'セルY軸座標

Dim Text1, Text2, Text3 '合成する文字列

Dim Tmp 'メモ帳起動用

Sub TEST()

'セルの座標

Y = 2

'計算の都度、メモ帳をアクティブにして書き出すのは時間がかかるため

'はてな.txtに書き出し、後で変換する

'ファイル「はてな.txt」を書き込みできる状態に

Open "D:\はてな.txt" For Append Access Read Write As #1

Do '1列目のデータがなくなるまでループ

'書き出す文字列作成

'1列目

Text1 = Cells(1, 1).Text & Cells(Y, 1).Text

'2列目

Text2 = Cells(1, 2).Text & Cells(Y, 2).Text

'5列目

Text3 = Cells(1, 5).Text & Cells(Y, 5).Text

'?列に変更するときは"Cells(1, X)"のXを任意の列番号に代えてください(2つとも)

'ファイル「はてな.txt」に書込み

Print #1, "XXX"

Print #1, "YYY"

Print #1, Text1

Print #1, Text2

Print #1, Text3

Print #1, "ZZZ"

Print #1, "========"

Print #1,

Print #1, "--------"

'処理を次の行へ

Y = Y + 1

Loop Until Cells(X, Y) = ""

'ファイル「はてな.txt」を書込みできる状態から開放

Close #1

'メモ帳を開いて「はてな.txt」を読み込む

'メモ帳をアクティブ

Tmp = Shell("notepad.exe", 1)

'「はてな.txt」を読込み

SendKeys "%FO", True

SendKeys "D:\はてな.txt", True

SendKeys "{ENTER}", True

'名前を代えて保存で名前・文字コード変更

SendKeys "%FA", True '%:「Alt」キー相当 ファイル-名前を付けて保存

SendKeys "%E", True '文字コード選択

SendKeys "{DOWN}{DOWN}{DOWN}", True 'UTF-8を選択 {DOWN}:「↓」キー

'文字コードは選択式ですので{DOWN}の回数でUTF-8にあわせてください。

'当方の文字コードは

'ANSI

'Unicode

'Unicode Big endian

'UTF-8

'となっているため標準「ANSI」から{DOWN}3回となってます

SendKeys "%S", True '保存

SendKeys "Y", True '上書き確認

SendKeys "%FX", True 'メモ帳終了

End Sub

参考

※Sendkeyについて過去にはてなであった質問

http://q.hatena.ne.jp/1159092555

  • id:takomaro
    途中一箇所間違ってました。
    Loop Until Cells(X, Y) = ""

    Loop Until Cells(Y, X) = ""
    にしないと必ず5回で終わってしまいます。すいません。
    (言い訳:サンプルが5×5だったので気付きませんでした。)
    質問終了まで「この質問・回答へのコメントを書く」がクローズになっていたので、
    修正だけ乗っけて10Point使わせるのももったいないと思ったのでまってました・・・
    それと修正をしたこのマクロでご希望にあうものだったのでしょうか?
  • id:llusall
    takomaroさんの回答に対してのコメントが見られなかったので、これで良いのか、何か違った仕様を望んでいるのか判らなかった為、回答は控えさせていただきました。
    無駄に手間隙かけて回答するのもアレですので^^;
    どうだったんでしょうね。
  • id:taroemon
    takomaro様

    お返事遅れて失礼しました。
    ちゃんとコメント書いておいたのですが、
    操作ミスでもあったのか、表示されていませんでした。
    今、自分で確認して驚いているところです。

    回答に対するコメントには下記のような質問をしていました。
    『僕のパソコンの環境下で、当該マクロを実行すると、
    Loop Until Cells(X, Y) = ""のXの場所で
    「コンパイルエラー 変数が定義されていません」という
    エラーが表示されます。
    まだ初心者なので、知ってて当然と言うことまで、
    ご指導板だければ幸いです。』

    このエラーは新たにいただいたとおり、
    XとYを入れ替えてもやっぱり出てしまいます。


    llusall 様

    上記にも書きましたとおり、
    回答に対してお返事したつもりでしたが、
    原因不明(おそらく私の操作ミス)で表示されていませんでした。
    お騒がせしました。
  • id:takomaro
    重ね重ねすいません。以下のようにXを1に変更してください。
    (最初のコメントで直してくださいと書いた同じ所です。)
    Loop Until Cells(Y, X) = ""

    Loop Until Cells(Y, 1) = ""
    エラーが出てしまうのは私のミスでした、中途半端なものをアップしてしまい余計な手間を取らせて申し訳ありません。
    制作上の癖でセルの座標を操作するのにX・Yを当初設定していたのですが、
    注釈等を付け体裁を整えているときに今回のマクロではX軸を操作する様な処理はなかったので余分な変数を削除し損ねたものです。

    ちなみに「コンパイルエラー 変数が定義されていません」と表示されてしまうのは、マクロの一番行頭にあるコマンドのおかげで、宣言してない変数がマクロ内にあったとき、マクロ実行時にエクセルがチェックして表示します。

    Option Explicit
    モジュール内のすべての変数に対して、明示的な宣言を強制します。
    このコマンドを使う意図は、もっと複雑な変数を多く使うようなときにスペルミスなど不具合を発見するのに有効なためです。
  • id:taroemon
    takomaro様

    再度のご回答及び丁寧なご指導ありがとうございました。
    お約束の通り残りの140ポイントという形で差し上げます。
    今後ともよろしくお願いします。
  • id:taroemon
    上記の文章で誤字がありましたので訂正します。
    140ポイント追加して、お約束の200ポイントを差し上げます。
    支払っておきましたので、お時間のあるときにでもご確認ください。
    またのご回答をお待ちしています。
  • id:takomaro
    ポイントありがとうございました。
    一週間近く家を空けていたので本日確認いたしました。
    色々と誤記・ミスがあったためポイントは期待してなかったので
    とても嬉しいです。

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

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

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

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