プロが教えるわが家の防犯対策術!

マクロの自動実行についてお伺いします。
今、エクセルに一定のデータを貼り付けたら、(例えばナンバーを元に)自動的にソートされるマクロを作ろうとしてます。

以下流れになります。
****************************
以下貼り付け(エクセル以外からの元データ)
(プログラムの詳細は分かりませんが、エクセルなどにコピペできるものらしいです。)
1|Aさん
3|Bさん
2|Cさん

N|XXさん

↑をエクセルをシートに貼り付けしたら、別シートにソートされて

1|Aさん
2|Cさん
3|Bさん

N|XXさん

という表が出来上がる。
****************************

自動実行だとworksheet_changeというイベントがあるようですが、特定の範囲なりセルなりが指定されてる場合にいきる処理のように見えます。
そんなに広範囲ではないことは予想できますが、はっきりとしたデータの範囲も量も分からない場合、ループで範囲を覚え、それをソートするのがいいのでしょうか。

ちょっと質問が曖昧な気もしますが、アドバイスお願いします。

A 回答 (3件)

>はっきりとしたデータの範囲も量も分からない



量は構いませんが,「どこに貼り付けたい」のかも事前に決められないのですか。
エクセルの方では,あなたが「貼り付け」作業をしたのか,それとも「何かその他のふつーの編集作業」をしたのかは区別は全くできませんので,何をやってもともかく並べ替えをします。
(言い換えると,「A列B列に貼り付けたのなら並べ替え,その他の列に何かしたなら何もしない」みたいにプログラムすることも出来ますが,事前に無いナイ尽くしでは。。。)


手順:
シート名タブを右クリックしてコードの表示を選ぶ
現れたシートに下記をコピー貼り付ける

private sub Worksheet_Change(byval Target as excel.range)
application.enableevents = false
target.sort key1:=target.cells(1), order1:=xlascending, header:=xlno
application.enableevents = true
end sub

ファイルメニューから終了してエクセルに戻る
どこにでもとにかくコピー貼り付けたり編集すると,並べ替える
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

説明が足りませんでした。
質問の内容は「早めにこれをしてほしい」と頼まれたことでした。
どう処理するかを考えてる中で「?」な部分が出てきてしまい、かなり大雑把な部分でもどうすればいいか分からずに質問した次第です。
もう一度整理して、依頼者にどうしたいか確認してから再度取り掛かります。

お礼日時:2013/02/18 22:12

コレを「ちょっと」曖昧で済まされると冷や汗が出ますね^^;




とりあえず、

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 数値 Then  '行番号指定(列指定は Target.column)
~~処理~~
End If
End Sub

で、特定の行(列)が変更されたら、と言う命令を書けます。
もちろん、Andで組み合わせることも出来ます。


むしろコレが「頻繁に発生する」処理じゃないのであれば、
データの確認がてら 貼り付け→ソート くらいの処理なのだから
その都度 手でやってもそこまで手間ではないと思いますよ。
むしろ、要らない時にマクロが動いてびっくりすることになるかもしれません。
マクロで書き換わったデータは(普通では)元に戻りませんから、
失敗して一からやり直し・・と言うのもよく聞く話です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

処理を考えながら、(No1さんへの回答と同じく)?な点がぽつぽつ出てきてしまっていました。
再度詰めなおしてから取り掛かります。

お礼日時:2013/02/18 22:12

[Alt]+[F11]VBEで挿入 - 標準モジュール


XL2003において ほぼ自動記録で作ってみました
Sub 並べ替える()
’A2セルに何も入っていなければ 終わる
   If Range("A2") = "" Then Exit Sub
’そのシートのA1セルを選んで[Ctel]+[Shift]+[*] その後[Ctrl]+[C]コピー の選択なし版)
   Range("A1").CurrentRegion.Copy
’シートの追加
   Sheets.Add
'貼り付け
   ActiveSheet.Paste
’[Esc] コピーの解除
   Application.CutCopyMode = False
’A列を昇順で並び替え
   Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
       OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
       :=xlPinYin, DataOption1:=xlSortTextAsNumbers
End Sub
データを張り付けた後[Alt]+[F8]マクロの実行 上記マクロ
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

頂いた処理を試してみます(もう少し流れをつめた後でですが。。。)

お礼日時:2013/02/18 22:13

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