みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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のみにマクロで記録させたものが反映されている。
他のシートは部分的に反映されたりしている。

投稿日時 - 2007-12-11 00:58:01

QNo.3588347

すぐに回答ほしいです

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

こんにちは。

最初に、別なコメントですが、ご質問文のように、自分のすることを論理的に、そしてきれいに並べられる人は、意外に早くマクロは上達します。もう、それで半分以上は出来たに等しいです。

マクロのほとんどは、一行のマクロの積み重ねです。後は、それぞれをどういう表現をするかだけです。その表現の仕方を知らないから出来ないだけです。それさえ分かれば、たぶん、私が書かなくても、yukaaikawaさんは、出来るはずだと思います。

掲示板では、いろんなノウハウが紹介されたりしますが、目的を達成できさえすれば、それで良いと思います。分からないことは、後は、VBAの逆引き辞典やインターネットで細かいことを調べればよいのです。

今回は、入門レベルに合わせて書くことにし、#1で書いた話とは少し違いますが、元の文章をそのままマクロに書き換えてみました。あまり、私が初歩的な書き方をすると、他の回答者の方から、思わぬ突っ込みを受けかねませんもので、少しアレンジはしています。

なお、塗りつぶしの青色は、私などは、パステルカラーを使うことにしています。文字の色の場合は、濃い青を使うようにしています。

色番号は、ヘルプで調べると出てきます。
「GridlineColorIndex」 プロパティをみてください。 (グリッドライン)

'行を3行挿入
'?.Rows("1:3").Insert shift:=xlShiftDown
の始点となる部分が、1行目ということなら、こうなります。

'--------------------------------------------
'標準モジュール

Sub TestMacro1()
  Dim i As Integer
  If Worksheets.Count < 4 Then
    '挿入 ワークシート
    Worksheets.Add
  End If
  For i = 1 To 4
    With Worksheets(i)
      .Name = Mid("abcd", i, 1)
      '全体の文字サイズを10に変更
      .Cells.Font.Size = 10
      '行を3行挿入
  '*ここが良く分かりません。1行目からという条件です
      .Rows("1:3").Insert shift:=xlShiftDown
      'A1セルの文字サイズを16に変更
      .Range("A1").Font.Size = 16
      '4行目を選択し、文字位置を中央揃え
      .Rows(4).HorizontalAlignment = xlCenter
      'A4・B4・C4・D4・E4・F4のセル色を青に変更
      .Range("A4:F4").Interior.ColorIndex = 34 'パステルの水色
      '.Range("A4:F4").Interior.Pattern = xlSolid 'たぶん要らないはず
      'シートa~dのA1にa ~d と入力
      .Range("A1").Value = Mid("abcd", i, 1)
      'aとシートcとシートdをB列・C列を選択 桁区切りスタイルに変更

      '分岐
      If .Name <> "b" Then
        .Columns("B:C").NumberFormatLocal = "#,##0"
      Else
        'シートcをC列・D列を選択 桁区切りスタイルに変更
        .Columns("C:D").NumberFormatLocal = "#,##0"
        ' G4セルを青に塗りつぶし
        .Range("G4").Interior.ColorIndex = 34
      End If
    End With
  Next i
'最初のシートに戻る
  Worksheets(1).Select
End Sub

投稿日時 - 2007-12-11 12:34:34

お礼

さっそくのコメントありがとうございます!
教えていただいたとおりにやってみたら(というかとりあえず、コードをコピペ)、完璧に出来ました!本当にありがとうございます!

ただ、以下の要因で、今回は、シートごとにマクロの記録ボタンを押して行うことにいたしました。
・部分的に省略したりだとか、なるべくシンプルにして質問させていただいたため、コードを読み取って、書き換えないとならない部分がある。それをするにはもう少し勉強してからでないと間違える恐れがある。
・一連の作業は、ワークシート挿入後、別のところからデータを貼り付けて、再度処理を開始しなければならない。そのためのコードを書き換える能力がない。

今回、コードを編集したり、貼り付けたりする機能があることを初めて知りました。とても勉強になりました。それから、コメントくださった中の「'」がコメントアウトだということにも後から気付きました。そのほか、いろいろと勉強になりました。

少し勉強してから質問できるように、がんばっていきたいと思います。が、なかなかそれが長い道のりだったりするんですよね。。でもあきらめないようにします。ありがとうございました!

後で締め切ってポイント付与作業させていただきます!取り急ぎお礼まで。失礼します。

投稿日時 - 2007-12-11 14:44:29

ANo.2

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

こんにちは。

手作業でされたことは、やはり手作業の中の約束事で出来上がっているのです。

特に作業グループは、あくまでも、マニュアル操作が主な使い方で、VBAでは、Selection というところで、シート全体を通した確保がされません。したがって、それらは個別にしなくてはなりません。

例:
For Each nam In Array("a","b","c","d")
 Worksheets(nam).Select
 '-フォントの色
 '-フォントサイズ
 '-桁区切り書式
 '-塗りつぶし
Next nam

としてみるとよいと思います。そして、個別のものは、個別に回すようにすればよいです。分からないようでしたら、また、書き添えます。

投稿日時 - 2007-12-11 09:58:06

補足

ありがとうございます!
そうなんですね。マクロという意味やできることなど、ぼんやりとしか分かってなく、お手数をおかけしてしまっています。

ところで、例、を挙げていただきましたが、これをどこにどのように設定したらよいのでしょうか。申し訳ありませんがご教示いただければ幸いです。

投稿日時 - 2007-12-11 10:32:56

あなたにオススメの質問