• ベストアンサー

Excelでのマクロ作成について

次のようなマクロをExcelで作りたいのですが上手くできませんでした。みなさんのお力をお借りしたいと思い質問しました。 [質問内容]       A        B        C 1 20030303120000 2 3 20030406120000 4 5 20030512120000 6 7 このようなシートで、セルA1の内容を「03/03/2003」に変更して行2を削除する。(セルの内容ではなく行そのものを削除する。) この作業を繰り返して次のようなシートにする。      A        B        C 1 03/03/2003 2 04/06/2003 3 05/12/2003 4 5 ひとつのマクロを繰り返し実行するのでも構いませんが、数が多いのでできれば100行程度を一度に実行できれば助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.3

b = 1 For a = 1 To 100 c = Cells(b, 1).Value Cells(b, 1).Value = "" If Len(Trim(c)) > 1 Then c = Mid(c, 5, 2) + "/" + Mid(c, 7, 2) + "/" + Left(c, 4) Cells(a, 1).Value = c End If b = b + 2 Next a 先ほどのだと 後ろの方が削除されないので 削除も入れました。 あと For文のループ回数は、適当に変更してみてください。

nobucci
質問者

お礼

こんにちは。2度も御回答いただきありがとうございます。 教えて頂いた方法でセル内容の変更がうまくいきました。 takntさんの言われる通り、私が作ったマクロを修正して頂くのが良かったのでしょうが、マクロについてはほとんど知識が無いので、それ以前の問題でした。 とても困っていたので本当に大変助かりました。 ありがとうございました。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.5

1行余分な列を使いますか、関数で出来るタイプの問題で VBAを使うほどでもありません。 (1)B列を使うとしてB1に =DATE(MID(A1,1,4),MID(A1,5,2),MID(A1,7,2)) といれ式をB2:B100に複写します。 (2)セルの書式をユーザー定義で mm/dd/yyyyにします。 余分列をなくすため、同じ場所でコピーを形式を選択して貼りつけ、「値」にしてA列を削除してしまう手もあります。

nobucci
質問者

お礼

こんにちは。御回答ありがとうございます。 関数を使った簡単な方法を教えて頂きありがとうございます。勉強になりました。 今回質問した作業を毎月繰り返す必要があるので、マクロの方が便利かなと思いました。 ありがとうございました。

noname#11856
noname#11856
回答No.4

For a = 100 To 1 Step -1 If IsEmpty(Cells(a, 1).Value) Then Rows(a).Delete Shift:=xlUp '←行全体を削除する場合 'Cells(a, 1).Delete Shift:=xlUp '←A列のセルのみ削除する場合 End If Next 行削除のほうです。 ループが逆順なのはその方が都合がいいからです。 書式のほうはtakntさんのでいいと思いますが もしかしたら、Valueに入れる前に .NumberFormatとかいじらなきゃいけないかも。

nobucci
質問者

お礼

こんにちは。御回答ありがとうございます。 教えて頂いた方法で行削除うまくできました。セルのみの削除も教えて頂きありがとうございました。 また.NumberFormatについても教えて頂いたお陰で、セル内容の変更もうまくできました。 マクロの知識がほとんど無いので大変勉強になりました。 ありがとうございました。

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.2

こんにちは。 この程度の処理で100件程度であれば、 むしろ関数で日付に変換してソート処理でもかければ かんたんにクリアできるかと思いますが、 マクロを使うのに何か理由でもあるのでしょうか。 参考までに関数で処理するとこんな感じでしょうか。  =DATE(LEFT(TRUNC(A1/1000000),4),MID(TRUNC(A1/1000000),5,2),MID(TRUNC(A1/1000000),7,2))

nobucci
質問者

お礼

こんにちは。御回答ありがとうございます。 関数を使う方法には考えが行きませんでした。 行削除をしなければならないのでマクロしかないと決め込んでいました...。 このような方法もあるのですね。勉強になりました。 ありがとうございました。

  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.1

ま 自分で 最初に作ったのを示して、どこが 悪いのか きくのが普通でしょうね。 b = 1 For a = 1 To 100 c = Cells(b, 1).Value If Len(Trim(c)) > 1 Then c = Mid(c, 5, 2) + "/" + Mid(c, 7, 2) + "/" + Left(c, 4) Cells(a, 1).Value = c End If b = b + 2 Next a これで 多分 思ったとおりになると思います。

関連するQ&A