- 締切済み
マクロの自動実行について
マクロの自動実行についてお伺いします。 今、エクセルに一定のデータを貼り付けたら、(例えばナンバーを元に)自動的にソートされるマクロを作ろうとしてます。 以下流れになります。 **************************** 以下貼り付け(エクセル以外からの元データ) (プログラムの詳細は分かりませんが、エクセルなどにコピペできるものらしいです。) 1|Aさん 3|Bさん 2|Cさん ~ N|XXさん ↑をエクセルをシートに貼り付けしたら、別シートにソートされて 1|Aさん 2|Cさん 3|Bさん ~ N|XXさん という表が出来上がる。 **************************** 自動実行だとworksheet_changeというイベントがあるようですが、特定の範囲なりセルなりが指定されてる場合にいきる処理のように見えます。 そんなに広範囲ではないことは予想できますが、はっきりとしたデータの範囲も量も分からない場合、ループで範囲を覚え、それをソートするのがいいのでしょうか。 ちょっと質問が曖昧な気もしますが、アドバイスお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
[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]マクロの実行 上記マクロ
- tsubuyuki
- ベストアンサー率45% (699/1545)
コレを「ちょっと」曖昧で済まされると冷や汗が出ますね^^; とりあえず、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 数値 Then '行番号指定(列指定は Target.column) ~~処理~~ End If End Sub で、特定の行(列)が変更されたら、と言う命令を書けます。 もちろん、Andで組み合わせることも出来ます。 むしろコレが「頻繁に発生する」処理じゃないのであれば、 データの確認がてら 貼り付け→ソート くらいの処理なのだから その都度 手でやってもそこまで手間ではないと思いますよ。 むしろ、要らない時にマクロが動いてびっくりすることになるかもしれません。 マクロで書き換わったデータは(普通では)元に戻りませんから、 失敗して一からやり直し・・と言うのもよく聞く話です。
お礼
回答ありがとうございます。 処理を考えながら、(No1さんへの回答と同じく)?な点がぽつぽつ出てきてしまっていました。 再度詰めなおしてから取り掛かります。
- keithin
- ベストアンサー率66% (5278/7941)
>はっきりとしたデータの範囲も量も分からない 量は構いませんが,「どこに貼り付けたい」のかも事前に決められないのですか。 エクセルの方では,あなたが「貼り付け」作業をしたのか,それとも「何かその他のふつーの編集作業」をしたのかは区別は全くできませんので,何をやってもともかく並べ替えをします。 (言い換えると,「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 ファイルメニューから終了してエクセルに戻る どこにでもとにかくコピー貼り付けたり編集すると,並べ替える
お礼
回答ありがとうございます。 説明が足りませんでした。 質問の内容は「早めにこれをしてほしい」と頼まれたことでした。 どう処理するかを考えてる中で「?」な部分が出てきてしまい、かなり大雑把な部分でもどうすればいいか分からずに質問した次第です。 もう一度整理して、依頼者にどうしたいか確認してから再度取り掛かります。
お礼
回答ありがとうございます。 頂いた処理を試してみます(もう少し流れをつめた後でですが。。。)