質問: excel2003 並び替えに関する質問 vba初心者 エクセルの並び替えにおいて質問させていただきます。 a列 b列 c列 d列 りんご 1 バナナ 4 バナナ 2 みかん 6 すいか 3 いちご 8 みかん 4 もも 3 いちご 5 すいか 2 ドリア 6 ぶどう 1 というものを a列 b列 c列 d列 りんご 1 バナナ 2 バナナ 4 すいか 3 すいか 2 みかん 4 みかん 6 いちご 5 いちご 8 ドリア 6 もも 3 ぶどう 1 というようにa列にならってc,d列の項目を並び替えて、並び替えられないものは下に列挙させるようなやり方をvbaで組みたいのですが、まずはどうすればよいのかわかりません。 もし、これを見て答えられるようであれば、どなたか教えていただければ幸いです。 どうか宜しくお願いします。
回答: 考え方としてラフに書くと、以下のような感じでしょうか。 1.c列1行目内容がa列1行目からa列の空白以外の行までに存在するか この時に、a列が何行目まであるか調べておく 2.n行目に存在したとき c、d列1行目内容をe、f列n行目にコピー 3.存在しなかったとき 存在しなかったのは何個目かカウントする。 c、d列1行目内容をe、f列のa列最終行+何個目行目にコピー 4.c列次行について、空白になるまで1.から繰り返す。 5.c、d列を削除する。 dim cnt1 as integer dim cnt2 as integer dim cnt3 as integer dim flg as integer range("c1").select cnt1 = 0 cnt3 = 0 do until activecell.offset(cnt1, 0).value = "" 'c列が空になるまで繰り返す cnt2 = 0 flg = 0 do until activecell.offset(cnt2, -2).value = "" 'a列が空になるまで繰り返す if activecell.offset(cnt1, 0).value = activecell.offset(cnt2, -2).value then activecell.offset(cnt2, 2).value = activecell.offset(cnt1, 0).value activecell.offset(cnt2, 3).value = activecell.offset(cnt1, 1).value flg = 1 exit do end if cnt2 = cnt2 + 1 loop if flg = 0 then activecell.offset(cnt2 + cnt3, 2).value = activecell.offset(cnt1, 0).value activecell.offset(cnt2 + cnt3, 3).value = activecell.offset(cnt1, 1).value cnt3 = cnt3 + 1 end if cnt1 = cnt1 + 1 loop columns("c:d").select selection.delete shift:=xltoleft range("c1").select