• ベストアンサー

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/17068)
回答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

  • エクセルのマクロについて教えてください

    作業が面倒だし、間違いもよく発生するので、 下の条件のマクロをどなたか教えて頂けませんか? 宜しくお願い致します。 社内のサーバーにエクセルファイル名、AからZまであるとします。 各AからZにそれぞれ同じシート名「集計」があるとします。 そのシート内にデータが色々あるとします。 ある決まったセルだけを削除するのではなく、セルの色だけで判断してデータを削除したいのです。 例えば、赤色のセルになっている部分だけを対象に 入力されている数字を消したいのです(行削除ではなく、単純にデリートです)。 上記をマクロで実行する方法はないでしょうか。 マクロ初心者なので、プログラム言語の下に簡単な説明を頂けると助かります。 どなたか詳しい方がいらっしゃいましたら、宜しくお願い致します。

  • エクセルのマクロの保存先(マクロ初心者)

    エクセル2010を使用しています。 最近必要に迫られてマクロを勉強し始めたばかりの超が付く初心者です。 今まで何年間も、手作業でやっていた作業がマクロで簡単、確実に実行できることがわかり、少しずつ使い始めました。(確かに便利で色々使いたくなっています) が、1つ問題に気付きました。 「保存先」の使い方が良く理解できません。 Auto_Open マクロが当方の使い方では非常に便利で使いたいのですが、今の当方のマクロの知識では大きな誤り(意図しない動作)に気付きました。 例えば起動時に、Sheet1の特定の範囲(A1:C5)のセルを削除して新たに入力出来る状態で起動させるようにした場合、Sheet2で保存したらSheet2の(A1:C5)のセルの内容が削除されて起動してきます。 つまり目的としないシートでも実行されてしまいます。 当方のような超初心者の場合、汎用性があるような使い方では意図しない作業が実行されてしまい非常に危ないと思います。 そこで、他のBookやシートに影響しないような設定の仕方を教えて頂きたいのです。 マクロに汎用性を要求するのは次の段階だと思います。 「個人Book」とか、「開いている・・・」とか「作業中の・・・」とか色々のマクロの保管場所があり、これを使い分けておられると思いますが、当方の場合、まずはこのシートでこれがしたい、だけで良いのです。ウッカリ意図しない動作されると非常に困ります。 どなたかこのような場合の対処教えてください。

  • Excel 空白行を上に詰めるマクロ

    関数を使用して、sheet1からsheet2に必要なデータを抜き取りました。 sheet2のセルには関数が入っています。 sheet2の抽出データには1行単位(まれに2~3行続けて)空白が発生します。 この行を削除し、かつ上に詰めて表示をしたいのですが、下記の条件で実行可能でしょうか? (例) sheet1 ⇒ sheet2   A   B   C     A  B  C 1 あ  い  う   1 あ  い  か 2        か   2 (空白行) 3 き  く   け    3 き  く  し   4 こ  さ   し   4 (空白行) ●2行目、4行目を削除し、且つ5行目以降に入力されている関数は削除したくない ●空白行削除のマクロは自動?(sheet1のデータを変更したら)で実行できるようにしたい よろしくお願いします。

  • エクセルマクロの構文

    エクセルマクロに関してご教示いただきたく存じます。 下記の手順を1つのマクロで実行したい場合、どのような構文を書けば実現できますでしょうか? 前提: ・エクセル中、シート(1)、シート(2)を準備。 ・シート(1)には毎日1日分のデータを入力(例えば、1行目の経費項目、金額、経費支払者 の3カラムヘッダーの下に、2行目から1日分のレコードを入力していく) ・シート(2)には毎日の日別データを累積していく(例えば、シート(1)に1日目で10レコード、2日目で15レコード、3日目で20レコードの場合、3日目終了時に計45レコードにしたい。1行目の経費項目、金額、経費支払者 の3カラムヘッダーはシート(1)と同様) マクロ実行: ・シート(1)に1日目のデータ入力(10レコード)が終わった段階で、ボタンを押し、下記マクロを実行  (1)シート(1)の10レコード(A2:C11)を、シート(2)のA2:C11にコピー  (2)シート(1)の10レコード(A2:C11)を、削除(データクリア) ・シート(1)に2日目のデータ入力(15レコード)が終わった段階で、上記と同じボタンを押し、下記のマクロを実行  (1)シート(1)の15レコード(A2:C16)を、シート(2)のA12:C26にコピー(シート(2)において1日目のデータの次に累積させていく)  (2)シート(1)の15レコード(A2:C16)を、削除(データクリア) ・シート(1)に3日目のデータ入力(20レコード)が終わった段階で、上記と同じボタンを押し、下記のマクロを実行  (1)シート(1)の20レコード(A2:C21)を、シート(2)のA27:C46にコピー(シート(2)において1日目のデータの次に累積させていく)  (2)シート(1)の20レコード(A2:C21)を、削除(データクリア) ・4日目以降、同じボタンでマクロを実行する度に、シート(1)のデータがシート(2)の47行目以降、空白なく追加されていく 以上、皆様のお知恵をお貸しください。

  • Excelでマクロ設定したが反映されない(初心者です)

    Excelでマクロを設定したのですが、なぜかきちんと反映されません。 以下、主な作業(実際の作業とは少し違いますがだいたい主な作業)を記載してみました。なぜ反映されないのか分からないので、もしお分かりになる方がいらしたら教えてください。必要な情報が足りない場合は、付け足します!マクロ初心者、というか、Excelも関数をたまに使う程度なので、基本から間違えてたりするかもしれませんがお願いいたします。 ※一連の作業がまずワークシートを1枚増やして、その後、必要なデータを貼り付け、さらに作業にうつります。ということで、キリのいいところで作業を2つに分けています。 【STEP1】 新しいマクロの記録 ok 挿入 ワークシート Sheet4タブを a と変更 Sheet1タブを b と変更 Sheet2タブを c と変更 Sheet3タブを d と変更 記録終了 【STEP2】 新しいマクロの記録 ok タブabcdを選択 作業グループの状態で、 全体の文字サイズを10に変更 行を3行挿入 A1セルの文字サイズを16に変更 4行目を選択し、文字位置を中央揃え A4・B4・C4・D4・E4・F4のセル色を青に変更 シートaのA1にaと入力 シートbのA1にbと入力 シートcのA1にcと入力 シートdのA1にdと入力 シートaとシートcとシートdを選択 作業グループの状態で、 B列・C列を選択 桁区切りスタイルに変更 シートcを選択 C列・D列を選択 桁区切りスタイルに変更 G4セルを青に塗りつぶし 記録終了 保存 (Book1.xls) 新規作成 マクロ Book1.xls!Macro1 実行 ★シートabcdにそれぞれ必要なデータを貼り付ける。 マクロ Book1.xls!Macro2 実行 ⇒シートdのみにマクロで記録させたものが反映されている。 他のシートは部分的に反映されたりしている。

  • excelのマクロ選択用マクロ

    お世話になります。 excelで分からない事があるので答えていただけたら幸いです。 質問の内容ですが、 同じシート内に、A,B,C,D,Eのマクロがあります。 これらのマクロを,プルダウンから選んで実行する為のマクロを作りたいのですが、可能でしょうか? よろしくお願い致します。

  • エクセル マクロ 入力制限について

    検索で探したのですが、うまくヒットしないため、質問させていただきます。 エクセルのセル入力制限についての質問です。 D1セルが空白でなかったら、A1・B1・C1に入力できないようにする と言う条件です。 それを、D1セルだけでなく、行すべてに適用したいのですが、 (D2 に入力されていたら、A2・B2・C2を入力できなくする) マクロで処理できるでしょうか? マクロ実行は、オープンしたときに実行するようにしたいと考えております。 ご教授お願いします。

  • Excelマクロでセルの比較

    Excelマクロでセルの比較 まだマクロ初心者なので、詳しいことがわからなくて困っております。 例)●前提として何行目まであるかは変化します     (A列)(B列) (1行目) 35  35 (2行目) 26  26 (3行目) 13  13 (n行目) 12  12 ※n=最終行 【やりたいこと】 このようにシートに入力されていたとして、 「A1=B1?」⇒「A2=B2?」⇒「A3=B3?」⇒「An=Bn?」と比較を進めていき不一致の有無を出す。 もし不一致がなければ、そのまま通過しその次のマクロを実行していく。 不一致があった場合には、不一致の行を別ファイルに出力してファイル保存し、ファイルを閉じる。 マクロを実行している元のファイルは、保存せずにファイルを閉じる) 行の長さが変化するため、その変化にも対応した処理を実行したいと思っております。 本やサイトで調べてみたのですが、基礎知識がないためうまく処理をさせるマクロを作ることが出来ませんでした。 このようなマクロが可能なのかもわかりませんが、出来ましたらこのマクロを教えていただけますでしょうか。 宜しくお願いいたします。

  • 至急お願いします。エクセルのマクロに関してです。

    かなり至急です><エクセル2010のマクロの質問です。 2つ質問があります。 1つ目です。 以下の一連の作業を1つのマクロで行いたいのですが、どうしたらいいでしょうか? 現在は、シート1にデータがあります。 (1)選択した3列を、B~D列に移動する (2)B列に含まれるセルのうち、0(空白)でないセル数分だけシートを追加する。 (たとえば、シート1のB14~B18に数字がはいっていたら、シートを5枚追加するという感じです。) (3)B列に含まれるセルのうち、0(空白)でないセル数分に対し、2行ずつ各シートの3・4行目にコピーする。 (たとえば、シート1のB14~B18に数字がはいっていたら、シート2の3・4行にシート1の14・15行のコピーを貼り付け、シート3の3・4行にシート1の15・16行のコピーを貼り付け、シート4の3・4行にシート1の16・17行のコピーの貼り付ける・・・という感じです。) 現在は (1)Sub () Selection.Cut ActiveCell.Columns("A:C").EntireColumn.Select Selection.Cut Columns("B:B").EntireColumn.Select Selection.Insert Shift:=xlToRight End Sub (2) Sub Macro() Dim n As Long For n = 14 To 18 ' Sheets.Add Next End Sub (3) Sub Macro() Dim n As Long For n = 14 To 18 ' Sheets("Sheet1").Rows(n & ":" & n + 1).Copy _ Sheets("Sheet" & n - 252).Range("A3") Next End Sub と別々のマクロに分けてます。 また(2)(3)でみられる For n = 14 To 18 ' の部分の数字は手動でいれてますが、かなり時間をくってしまうので・・・。 2つ目です。 複数ブックに同じ動作をするエクセルのマクロが知りたいです。 現在100ほどブック(Book1~100)を開いていて、100のブックすべてのSheet1のA1のセルに「1」と入れたいのですが、 そのようなマクロはどうくんだらよろしいでしょうか。 ちなみにExcel2007です。 困っているので、お願いします。

  • エクセル マクロ VBA

    エクセルのマクロについて質問いたします。 下記のステップ1からステップ2を一発で行うマクロ文は、 どのようになりますか? 教えてください。 <ステップ1> あるシートのB列に『AAA』という文字を含んでいる行があったら その行は丸ごと削除する。 また、『AAA』という文字を含んでいなかったら、 エラーなどが出ないで、次のステップ2の処理に移る。 <ステップ2> ステップ1と同じシートのC列に、『B』という文字を含んでいる行があったらその行は丸ごと削除する。 ※この”『B』という文字を含んでいる”という意味は、 『B-』や”『B5』と入力されている場合も含めるということです。 また、『B』という文字を含んでいなかったらエラーなどが出ないこと。

専門家に質問してみよう