重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

前回、こちらで質問させて頂いた者です。


http://oshiete.goo.ne.jp/qa/7917475.html

一度は解決したのですが、
エクセルの表を作り変える必要が出てきて、セルの位置などが変わってしまい、
教えていただいたマクロではエラーが出てしまって並び替えができなくなってしまいました。

前回:1行目がタイトル行
    データは2行目以降(A・B列は2行ずつ結合)

変更:4行目がタイトル行
    データは5行目以降(A・B・C列は2行ずつ結合)

   
少し変わっただけなので、このへんかな~と勝手に見当をつけて自分でマクロをいじってみたのですが、検討違いのようでエラーばっかりで直りません(T0T) (マクロはとっても苦手です・・)

下のマクロが、以前の質問で回答してくださった方から教えていただいたマクロなんですが、
ここのどこを変えれば、変更後の表に対応できるようになりますでしょうか?
どなたか教えてください~(>_<)

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

Sub 並び替え() 'この行から
Dim i As Long
Application.ScreenUpdating = False
'セルの分割
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Step 2
With Cells(i, 1)
.UnMerge
.Offset(, 1).UnMerge
.Offset(1) = Cells(i, 1)
.Offset(1, 1) = Cells(i, 2)
End With
Next i
Cells(1, 1).CurrentRegion.Sort key1:=Cells(1, 1), order1:=xlAscending, Header:=xlYes _
, key2:=Cells(1, 2), order2:=xlAscending, Header:=xlYes

'セルの再結合
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row - 1 Step 2
Application.DisplayAlerts = False
With Cells(i, 1)
.Resize(2, 1).Merge
.Offset(, 1).Resize(2, 1).Merge
End With
Next i
Application.ScreenUpdating = True
End Sub 'この行まで


・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

また、わがままで申し訳ないのですが、グループごとに並び変えるときに、さらに名簿順になるように並び替えられると助かるのですが、何か文を追加することで、そういう並び替えになりますか?
もし可能なら、それも教えて頂きたいです。




なにとぞ、よろしくお願いしますm(_ _)m

「(再)エクセル データ並び替え」の質問画像

A 回答 (4件)

No.1です!


たびたびごめんなさい。

前回のコードは無視して↓に変更してください。
間違いが2か所ありました。


Sub 並び替え2()
Dim i As Long
Application.ScreenUpdating = False
'セルの分割とよみ表示
Range("A:B").Insert
For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row Step 2
'↑5行目~C列の最終行まで2行おき(A・B列を挿入しているため、元のA列がC列に移動)
With Cells(i, 1)
.Value = Application.GetPhonetic(.Offset(, 2))
.Offset(, 1) = Application.GetPhonetic(.Offset(, 3))
.Offset(, 2).Resize(1, 3).UnMerge
.Resize(1, 2).Copy .Offset(1)
End With
Next i
'並び替え
i = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(4, 1), Cells(i, 9)).Sort key1:=Cells(4, 1), order1:=xlAscending, Header:=xlYes _
, key2:=Cells(4, 2), order2:=xlAscending, Header:=xlYes
'↑の Cells(i, 9) はA列最終行のG列(2列挿入しているため列番号が「9」となります。
'再結合
Range("A:B").Delete
For i = 5 To Cells(Rows.Count, 1).End(xlUp).Row Step 2
With Cells(i, 1).Resize(2, 1)
.Merge
.Offset(, 1).Resize(2, 1).Merge
.Offset(, 2).Resize(2, 1).Merge
End With
Next i
Application.ScreenUpdating = True
End Sub

何度も失礼しました。m(_ _)m
    • good
    • 0
この回答へのお礼

tom04さん!
前回に引き続き、今回までも・・・!
(実はtom04さん、見てくれないかな~と期待はしてました(笑))、
ほんとにほんとにご丁寧にありがとうございます。2回も書き込んで頂いて、恐縮です。
見ず知らずの者のために、時間を割いて頂いて・・・ほんとに感謝です。

そしてそして・・・
できました~!!!

どど~って並び替えられました、感動。

マクロできる人ってほんとにすごいです。尊敬します。
そして、G列以降もデータがあるので、自分でいじってみたら、ちゃんと直せましたよ!
わざわざ、直すときの説明をつけてくれたおかげです。

ほんとに助かりました!ありがとうございました!

お礼日時:2013/02/10 17:02

やはり、教えてもらったコードをただコピペするだけでなく、何が載っているのかくらいは、だいたい理解してから使ったほうがいいですね。

今回のように自力でメンテできないという問題があるし、サイト管理者による監視の目があるとはいえ、極端な場合は危険なコードがないとも言えません。

VBE 上で各単語にカーソルを置いて F1 キーを押せば、すぐヘルプが出ます。ネットで検索してもいいです。ヘルプ内で使われているような独特の用語については、ネットが効率的かもしれません。すぐに全てが理解できるということは、まず、ないと思いますが、いろんな課題に接するうちに、だんだん分かってきます。

No.1・2 さんが親切だから良かったですが、これでは質問ではなく、完全に業務委託って感じです。初心者であってもご自分がプログラマとなって内容を確認していれば、どこをどう修正したらこんなエラーが出たくらいは言えるし(恐らく今は、説明もできませんね?)、回答者が修正版を提示するときも、部分的に書く程度で済むかもしれません。

No.3 さんが紹介されている「マクロの記録」は、誰でも簡単に VBA を利用できるように用意されている機能なので、ぜひ試してみてください。美しいコードにはならないかもしれませんが、簡単な処理なら役に立ちます。
    • good
    • 0
この回答へのお礼

>No.1・2 さんが親切だから良かったですが、これでは質問ではなく、完全に業務委託って感じです。

はい、ほんとにそのとおり・・・・。そういった批判もくるだろうなと思ってましたが、時間がなかったので、こちらの質問サイトを頼ってしまいました。反省しています。ほんとにtom04さんや、MackyNo1さんには頭が下がる思いです。


>やはり、教えてもらったコードをただコピペするだけでなく、何が載っているのかくらいは、だいたい理解してから使ったほうがいいですね。

はい、今回教えていただいたコードだけでも、ちゃんと勉強して理解します。今後も表の変更があると思いますし、その都度こうやって業務委託するわけにはいからないですからね(笑)努力してみます!

>No.3 さんが紹介されている「マクロの記録」は、誰でも簡単に VBA を利用できるように用意されている機能なので、ぜひ試してみてください。美しいコードにはならないかもしれませんが、簡単な処理なら役に立ちます。

ぜひやってみます!!美しいコードなんて、私のような初心者には全然必要ないです(^^*)


ご指摘ありがとうございました。

お礼日時:2013/02/10 17:15

前回の質問でNo4の回答をしたものですが、マクロコードが理解できないのに回答をコピペするだけで問題を解決しようとすると、トラブルが発生したときに対応できなくなるのであまりお勧めできる管理方法とは言えません。



またマクロを使用する場合もエクセルの基本機能を十分駆使して作成するほうが簡単で効率的です。
例えば前回の質問のNo4で回答した方法は結合セルがある場合に並べ替える簡便な対処法ですが、これを自動的にマクロで実行させたいなら、「マクロの記録」を利用することで、コードを完全に理解できていなくても簡単に実行できます。

具体的には、開発タブの「マクロの記録」(Exce;2003以前なら「ツール」「新しいマクロの記録」)で適当な名前を付けて以下のような操作をします。

C5:C100セルを選択し(データの増加分を見込んで大きめに選択)右クリック「コピー」、D6:G100セルを選択して右クリック「形式を選択して貼り付け」で「書式」にして「OK」します。
つぎに、A5:G100セルを選択して「データ」「並べ替え」でご希望のご希望の並べ替えを行い、最後にD6:G100セルを選択して右クリック「セルの書式設定」の配置タブで「結合」のチェックを外して「OK」し、マクロの記録を終了します。
    • good
    • 0
この回答へのお礼

おっしゃるとおりです。
マクロは以前、本を借りて読んでみましたが、ちんぷんかんぷんで、それ以来苦手です。

そして、お恥ずかしいことに、データの行や列が増えたり減ったりするだけでマクロのコードが使えなくなってしまうのも知りませんでした・・・・。

たった1行増えたりするだけでもエラーになってしまうのですね。

せめて、教えていただいたコードに書かれてる内容だけでも、きちんと調べて把握したいと思います。

それと、マクロの記録方法を教えて頂いてありがとうございます!!
これならデータが増加しても対応できるんですね。
やってみます!
ありがとうございました。

お礼日時:2013/02/10 17:08

こんばんは!


前回投稿した者です。

実は投稿後気になっていたのですが・・・
たまたま質問の表はグループ・氏名が「ひらがな」になっていたので、前回の方法でも何とか対処できたと思います。

漢字など含まれているのが普通だと思いますので、その辺も変えてもう一度コードを載せてみます。
尚、データはG列までだとしていますので、
もっと列がある場合はコード内のコメント部分で調整してみてください。

Sub 並び替え2()
Dim i As Long
Application.ScreenUpdating = False
'セルの分割とよみ表示
Range("A:B").Insert
For i = 5 To Cells(Rows.Count, 3).End(xlUp).Row Step 2
With Cells(i, 1)
.Value = Application.GetPhonetic(.Offset(, 2))
.Offset(, 1) = Application.GetPhonetic(.Offset(, 3))
.Offset(, 2).Resize(i, 3).UnMerge
.Resize(1, 2).Copy .Offset(1)
End With
Next i
'並び替え
i = Cells(Rows.Count, 1).End(xlUp).Row
Range(Cells(4, 1), Cells(i, 7)).Sort key1:=Cells(4, 1), order1:=xlAscending, Header:=xlYes _
, key2:=Cells(4, 2), order2:=xlAscending, Header:=xlYes
'↑の Cells(i, 7) はA列最終行のG列
'再結合
Range("A:B").Delete
For i = 5 To Cells(Rows.Count, 1).End(xlUp).Row Step 2
With Cells(i, 1).Resize(2, 1)
.Merge
.Offset(, 1).Resize(2, 1).Merge
.Offset(, 2).Resize(2, 1).Merge
End With
Next i
Application.ScreenUpdating = True
End Sub

こんなんではどうでしょうか?m(_ _)m
    • good
    • 0

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