
前回、こちらで質問させて頂いた者です。
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

No.2ベストアンサー
- 回答日時:
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
tom04さん!
前回に引き続き、今回までも・・・!
(実はtom04さん、見てくれないかな~と期待はしてました(笑))、
ほんとにほんとにご丁寧にありがとうございます。2回も書き込んで頂いて、恐縮です。
見ず知らずの者のために、時間を割いて頂いて・・・ほんとに感謝です。
そしてそして・・・
できました~!!!
どど~って並び替えられました、感動。
マクロできる人ってほんとにすごいです。尊敬します。
そして、G列以降もデータがあるので、自分でいじってみたら、ちゃんと直せましたよ!
わざわざ、直すときの説明をつけてくれたおかげです。
ほんとに助かりました!ありがとうございました!
No.4
- 回答日時:
やはり、教えてもらったコードをただコピペするだけでなく、何が載っているのかくらいは、だいたい理解してから使ったほうがいいですね。
今回のように自力でメンテできないという問題があるし、サイト管理者による監視の目があるとはいえ、極端な場合は危険なコードがないとも言えません。VBE 上で各単語にカーソルを置いて F1 キーを押せば、すぐヘルプが出ます。ネットで検索してもいいです。ヘルプ内で使われているような独特の用語については、ネットが効率的かもしれません。すぐに全てが理解できるということは、まず、ないと思いますが、いろんな課題に接するうちに、だんだん分かってきます。
No.1・2 さんが親切だから良かったですが、これでは質問ではなく、完全に業務委託って感じです。初心者であってもご自分がプログラマとなって内容を確認していれば、どこをどう修正したらこんなエラーが出たくらいは言えるし(恐らく今は、説明もできませんね?)、回答者が修正版を提示するときも、部分的に書く程度で済むかもしれません。
No.3 さんが紹介されている「マクロの記録」は、誰でも簡単に VBA を利用できるように用意されている機能なので、ぜひ試してみてください。美しいコードにはならないかもしれませんが、簡単な処理なら役に立ちます。
>No.1・2 さんが親切だから良かったですが、これでは質問ではなく、完全に業務委託って感じです。
はい、ほんとにそのとおり・・・・。そういった批判もくるだろうなと思ってましたが、時間がなかったので、こちらの質問サイトを頼ってしまいました。反省しています。ほんとにtom04さんや、MackyNo1さんには頭が下がる思いです。
>やはり、教えてもらったコードをただコピペするだけでなく、何が載っているのかくらいは、だいたい理解してから使ったほうがいいですね。
はい、今回教えていただいたコードだけでも、ちゃんと勉強して理解します。今後も表の変更があると思いますし、その都度こうやって業務委託するわけにはいからないですからね(笑)努力してみます!
>No.3 さんが紹介されている「マクロの記録」は、誰でも簡単に VBA を利用できるように用意されている機能なので、ぜひ試してみてください。美しいコードにはならないかもしれませんが、簡単な処理なら役に立ちます。
ぜひやってみます!!美しいコードなんて、私のような初心者には全然必要ないです(^^*)
ご指摘ありがとうございました。
No.3
- 回答日時:
前回の質問でNo4の回答をしたものですが、マクロコードが理解できないのに回答をコピペするだけで問題を解決しようとすると、トラブルが発生したときに対応できなくなるのであまりお勧めできる管理方法とは言えません。
またマクロを使用する場合もエクセルの基本機能を十分駆使して作成するほうが簡単で効率的です。
例えば前回の質問のNo4で回答した方法は結合セルがある場合に並べ替える簡便な対処法ですが、これを自動的にマクロで実行させたいなら、「マクロの記録」を利用することで、コードを完全に理解できていなくても簡単に実行できます。
具体的には、開発タブの「マクロの記録」(Exce;2003以前なら「ツール」「新しいマクロの記録」)で適当な名前を付けて以下のような操作をします。
C5:C100セルを選択し(データの増加分を見込んで大きめに選択)右クリック「コピー」、D6:G100セルを選択して右クリック「形式を選択して貼り付け」で「書式」にして「OK」します。
つぎに、A5:G100セルを選択して「データ」「並べ替え」でご希望のご希望の並べ替えを行い、最後にD6:G100セルを選択して右クリック「セルの書式設定」の配置タブで「結合」のチェックを外して「OK」し、マクロの記録を終了します。
おっしゃるとおりです。
マクロは以前、本を借りて読んでみましたが、ちんぷんかんぷんで、それ以来苦手です。
そして、お恥ずかしいことに、データの行や列が増えたり減ったりするだけでマクロのコードが使えなくなってしまうのも知りませんでした・・・・。
たった1行増えたりするだけでもエラーになってしまうのですね。
せめて、教えていただいたコードに書かれてる内容だけでも、きちんと調べて把握したいと思います。
それと、マクロの記録方法を教えて頂いてありがとうございます!!
これならデータが増加しても対応できるんですね。
やってみます!
ありがとうございました。
No.1
- 回答日時:
こんばんは!
前回投稿した者です。
実は投稿後気になっていたのですが・・・
たまたま質問の表はグループ・氏名が「ひらがな」になっていたので、前回の方法でも何とか対処できたと思います。
漢字など含まれているのが普通だと思いますので、その辺も変えてもう一度コードを載せてみます。
尚、データは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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Visual Basic(VBA) 正規表現を用いての並び替え 7 2022/04/04 09:27
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- Visual Basic(VBA) VBA処理追加 こちらでご教示頂いたのですが回答完了させてしまいましたのでこちらからまた質問させてく 2 2022/10/27 09:57
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) Sheet1をフィルターで「りんご」を抽出し、Sheet2へ地域を貼り付ける下記マクロを変更して S 2 2022/12/11 03:01
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel2007で、太字にした行のみ...
-
エクセルのマクロについて質問...
-
EXCELの行(または列)の...
-
エクセルのマクロ
-
Excel 2003のマクロについて
-
excel ある部分だけをコピペし...
-
Excelマクロで任意の項目の数値...
-
条件に応じて特定の行を非表示...
-
VBA シングルクォーテーション...
-
マクロの作成
-
(再)エクセル データ並び替え
-
エクセル VBA 小数点を含む数字...
-
Excel にて非表示行を探すワー...
-
抽出、マクロ関係になると思います...
-
Excel2007 セルを右方向に削除...
-
Excelで周期的に列を削除する方法
-
エクセルで全ての数字間にカン...
-
ハイパーリンクからアドレスを...
-
マクロで教えてください。
-
値貼り付けをしても書式も貼り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel2007で、太字にした行のみ...
-
Excel にて非表示行を探すワー...
-
条件に応じて特定の行を非表示...
-
excel ある部分だけをコピペし...
-
エクセルで全ての数字間にカン...
-
エクセル VBA 小数点を含む数字...
-
Excel2007 セルを右方向に削除...
-
値貼り付けをしても書式も貼り...
-
Excel(VBA)データ入力に応じて...
-
「マクロ」の足し算の式を教え...
-
Excelでセル内の数式は残し値だ...
-
wordのvbaでハイパーリンク設定...
-
エクセル2003でマクロをおこな...
-
VBA コピーを有効行までループ...
-
エクセルで特定の行を消して間...
-
EXCEL マクロで「キーワード入...
-
エクセル マクロ オートシェ...
-
yyyy/mm/ddの日付に一括変換す...
-
Excelで周期的に列を削除する方法
-
並べ替えのマクロで対象行の範...
おすすめ情報