- 締切済み
マクロについての質問です。
マクロのことで質問です。まだ初心者なので調べてもわからず、うまくいかないのでおしえてください。 自分は郵便局の市町村合併のリストをエクセルでまとめたいのですが、http://www.post.japanpost.jp/cgi-zip/zipcode.php?pref=7&city=1072010&addr=%E6%97%AD%E7%94%BA&cmp=1&mode=list ←これを例にすると、まず、自分がやりたいことは、全一覧の下の行から(横の範囲は郵便番号から変更前の住所・郵便番号 )の値を一番下まで全てドラッグしコピーし、自分のエクセル(A1)に貼り付けます。その際、A列にある郵便番号の数字の行だけを残してそれに該当しない行は削除したいのです。しかも、データが無くなるまで(範囲指定ではなく)それを行いたいのですが、どういった関数や式を使用すればよいのですか?教えてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- misatoanna
- ベストアンサー率58% (528/896)
ご質問内にあるURLのページを、"ア行"と書いてある行以降をコピーして そのままエクセルに貼り付けると、必要なデータ行は2セルずつ結合され、 それ以外は単行ですので、結合されていないセルだけを選択して削除すれば よいのではないでしょうか。 Sub Test() Dim rng, LST, i Set rng = Cells(1, 1) LST = Range("A65536").End(xlUp).Row For i = 2 To LST If Cells(i, 1).MergeCells = False Then _ Set rng = Union(rng, Cells(i, 1)) Next rng.Select Selection.EntireRow.Delete End Sub
- pulsa
- ベストアンサー率57% (34/59)
データの最終行の値の求め方 Range("A1").CurrentRegion.Rows.Count Range("A1").SpecialCells(xlCellTypeLastCell).Row Range("A" & Rows.Count).End(xlUp).Rows このどれかですかね それぞれ、意味が違いますが、大体同じ値が返ると思います また、それぞれに一長一短があるので、どれが良いと言うのもないんですが、最後のヤツは良く見かけます 個人的には、最初ヤツが好きですね 詳しくはWebでそれぞれを比べてもらって、今回のマクロにベストな方法を選択して下さい あと、ループはdo Loopだけではありません 今回のように、開始と終了の数が使える場合は、For Nextを使うのが一般的です 質問本体で行くと、No.1の方の方法を取るのが楽かもしれませんね あくまで「俺ならこうする」ですが >数字の行だけを残してそれに該当しない行は削除したい コレを逆にフィルタリングします(オートフィルタ) 見出し(1行目)とA列に数字以外が入っている行が表示されているようにします そこで、A列の2行目以下データがある行+1までを行ごと削除します コードだとこんな具合 Range("A1").AutoFilter Field:=1, Criteria1:=">=a" '文字のみの表示 Range("A2", Cells(Range("A2").CurrentRegion.Rows.Count + 1, 1)).EntireRow.Delete 'A2から連続したデータの最終行+1(連続していなければ他の最大行を取る関数を使っても良い) ActiveSheet.AutoFilterMode = False 'オートフィルタ解除 この3行は結構強烈です ">=a"で文字(数字以外)をフィルタリングできます EntireRowは選択セルを含む行の事です フィルタリングした状態のRangeに対して作業を行うと、表示中のセルのみに反映するので、表示中セルに対して削除を反映 つまり表示中Rangeを削除 AutoFilterMode = False でオートフィルタを解除します オートフィルタはトグルと思っている方が多いと思いますが、本当はコレで解除します コメントに書いた通り、最大行が上手く取れないときは、他の関数と入れ替えてみてください じゃ
お礼
ありがとうございました。お陰でなんとか希望する配列になりました。
- siroakaki
- ベストアンサー率47% (21/44)
違っていたら、すみません。 A列で値がある行を残す=A列で空白行を除くですかね。 A列で分類をかけてみたら、いかがでしょう。
- noah7150
- ベストアンサー率46% (116/251)
やりたい事が今一解りませんが、文字のある行のみ複写できれば良いのでしょうか? 1行目にタイトルを付けてデータ->フィルタ->オートフィルタ で該当カラムを空白以外とし表示させ、行欄の角をクリックし複写 別のシートに貼り付けるとフィルタで隠された行は複写されませんよ
補足
回答ありがとうございます。 そうです。A列に文字のある(数字)行のみを残すプログラムをVBAで作りたいのですが、どうすればよいですか?また、合併情報のデータの数は決まっていないので、毎回貼り付けたデータの最後まで読んで削除したいです。だから、DO while LOOP などを使用して行いたいのですが、貼り付けたデータの最後まで読むという関数などないでしょうか? 専門用語などがまだ勉強不足なため、うまく表現できませんがよろしくお願いします。
お礼
ありがとうございました。とても役にたちました。